项目背景介绍
背景
- 个人博客系统采用前后端分离的方法来实现,同时使用了数据库来存储相关的数据。前端主要有四个页面构成:注册页、登录页、(主页)列表页、个人列表页、详情页以及编辑页,以上模拟实现了最简单的个人博客系统。其结合后端实现了以下的主要功能:注册、登录、编辑博客、注销、删除博客、以及验证码等功能。
- 但是该项目用户头像不能自己设定,在进行前端页面的书写过程中已经将头像的图片写为静态了;用户信息中的分类数没有在后端中具体实现,直接在前端页面中写了1;用户信息中的github地址也是不能够上传的,点击跳转为无页面
- 该个人博客系统可以实现个人用户简单的博客记录,时间、标题、内容以及发布者等都可以进行详细地查看。
- 在没有登录的情况下,只有主页,详情页,登录页和注册后可以正常打开,其他页面均会被跳转到登录页
功能
该个人博客系统主要实现了以下几个功能:注册、登录、注销、写博客以及删除博客等功能。
- 注册功能:用户输入用户名、密码、确认密码,要求3个值均不能为空,密码和确认密码必须相同,用户名必须是不存在的。完成该要求后,点击“提交”,即可注册成功
- 登录功能:输入已经注册过的账号和密码,以及验证码,登录成功后就会跳转到个人列表页面。在右上角存在主页和写博客和注册和我的4个按钮。但是在未登录情况下按下“写博客”和“我的”按钮只会跳转到登录页面。
- 个人列表页面:登录后才可以访问,可以在该页面看到登陆者的所有博客列表,其包括博客标题、发布时间以及内容概要,还有“查看全文”“修改”“删除”按钮。在左侧可以看到登录用户的用户名、文章数、分类数等的模块。在右上角有主页、写博客和注销三个功能:主页即列表页,写博客即博客编辑页,注销即注销用户,回到登录页面。“删除”按钮点击后,会刷新当前页面
- 详情页面:在(个人列表页面/主页)点击“查看全文”按钮就会跳转到详情页,此时就可以看到该篇博客的完整内容。在右上角有主页、写博客、登录3个功能
- 写博客:在登录之后的任意界面点击“写博客”之后就会进入博客编辑页面,此时就可以进行博客的编写,点击“发布文章”后就可以成功发布文章,此时就会跳转到个人列表页。
相关技术栈
SpringBoot SpringMVC MyBatis MySQL HTML CSS JavaScript
博客登录页:
博客注册页:
个人博客列表页:
博客主页 :
博客详情页:
博客编辑页(修改页):
手工测试
测试计划
编写测试用例
执行测试用例(部分)
仅针对部分用例进行测试
正常登录(输入正确的用户名、密码、验证码)
登录成功后,跳转到个人博客列表页
写博客测试(登录状态下):
发布成功后,跳转到个人博客列表页,并出现在首行
发布成功后,查看详情页
删除博客
删除成功后,“hello”这篇博客就没了
注销:点击注销后,回到登录页
自动化测试
测试环境
测试环境
操作系统:
版本 Windows 10 家庭中文版
版本号 22H2
安装日期 2021/7/6
操作系统内部版本 19045.4529
体验 Windows Feature Experience Pack 1000.19058.1000.0
浏览器
Google 版本 127.0.6533.120(正式版本) (64 位)
Selenium:
版本:3.141.59
驱动版本 :127.0.6533.119 (64位)
编写测试用例 (UI自动化测试)
只测试了核心功能
代码编写
- 1、每个页面一个测试类,然后在各个测试类中进行测试用例的编写。
- 2、有一个公共类,专门放公共属性
- 3、使用测试套件便于运行
- 4、创建驱动、关闭驱动以及现场截图放在公共类里
- 5、添加隐式等待 ,确保页面正确加载显示
1、添加相关依赖
<dependencies>
<!-- 添加selenium依赖-->
<!-- https://mvnrepository.com/artifact/org.seleniumhq.selenium/selenium-java -->
<dependency>
<groupId>org.seleniumhq.selenium</groupId>
<artifactId>selenium-java</artifactId>
<version>3.141.59</version>
</dependency>
<!-- 保存屏幕截图需要用到的包-->
<dependency>
<groupId>commons-io</groupId>
<artifactId>commons-io</artifactId>
<version>2.6</version>
</dependency>
<!-- 添加junit5依赖-->
<!-- @Test 、 @BeforeAll 等,这些注解需要这个依赖-->
<!-- https://mvnrepository.com/artifact/org.junit.jupiter/junit-jupiter-api -->
<dependency>
<groupId>org.junit.jupiter</groupId>
<artifactId>junit-jupiter-api</artifactId>
<version>5.9.1</version>
<scope>test</scope>
</dependency>
<!-- 参数化需要这个依赖 -->
<!-- https://mvnrepository.com/artifact/org.junit.jupiter/junit-jupiter-params -->
<dependency>
<groupId>org.junit.jupiter</groupId>
<artifactId>junit-jupiter-params</artifactId>
<version>5.9.1</version>
<scope>test</scope>
</dependency>
<!-- 以下2个依赖是用来管理测试用例的,比如套件等 -->
<!-- https://mvnrepository.com/artifact/org.junit.jupiter/junit-jupiter-engine -->
<dependency>
<groupId>org.junit.jupiter</groupId>
<artifactId>junit-jupiter-engine</artifactId>
<version>5.9.1</version>
<scope>test</scope>
</dependency>
<dependency>
<groupId>org.junit.platform</groupId>
<artifactId>junit-platform-suite</artifactId>
<version>1.8.2</version>
<scope>test</scope>
</dependency>
</dependencies>
2、新建包并在包下创建测试类以及公共类
以下是所建立的是common公共包和Tests测试包:
1)公共类InitAndEnd
- 创建驱动、驱动释放、保存现场截图
- 注意:在保存现场截图的时候命名是按时间来进行文件夹的划分,然后图片的名称要体现出测试类的类名,方便进行问题的追溯。
- 注意文件名的动态获取,注意时间格式的设置。
2)注册页测试registTest
- ① 测试没有任意一个(用户名、密码、确认密码),不能成功注册
- ② 测试密码和确认密码不一致时,也不能注册成功
- ③ 注册时使用的账号密码均为随机生成的
- ④ 测试用户名已存在的情况下,不能注册成功
- ⑤测试正确输入后,能注册成功并跳转到登录页,并且用注册的账号密码能正确登录
- ⑥忽略弹窗的代码前,要加上显式等待,以免弹窗还没加载出来导致报错
- ⑦注意测试的顺序,使用Order注解指定,否则可能会因为执行顺序不对导致测试失败
- ⑧在测试前清空所有元素内容(非首个执行的测试用例),以免被前一次的测试用例干扰
3)登录页面测试 loginTest
- ① 获取驱动,并打开页面
- ② 测试页面是否正常打开
- ③ 测试异常登录:(多参数测试LoginFail.csv)用户名/密码错误的情况(均有null的情况)
- ④ 测试正常登录:多参数测试(LoginSuccess.csv)
- ⑤ 注意测试的顺序,使用Order注解指定,否则可能会因为执行顺序不对导致测试失败
- ⑥ 验证码用的是固定通用验证码
- ⑦注意浏览器打开后,要写上隐式等待,以免元素没能加载好就开始操作
- ⑧忽略弹窗的代码前,要加上显式等待,以免弹窗还没加载出来导致报错
- ⑨登录成功后,断言页面跳转到了个人列表页。要在断言前加显式等待,以免还没来得及跳转,就被断言,导致报错
4)个人博客列表页测试myBlogListTest
① 登录后,测试个人博客列表页是否可以正常打开
② 登陆后,测试该页面左侧的用户栏能正确显示
③ 登陆后,测试该页面右侧有数据,博客数不为0或者显示“该用户没发表任何文章”
④ 测试未登录的直接链接是否会跳转到登录页面,顺便测试了“注销”按钮
5)编辑页测试BlogEditTest
① 测试未登录,编辑页会被跳转到登录页
② 测试登录后,编辑页可以正常打开
③ 测试不输入内容,无法提交博客
④ 测试输入内容,点击“提交”按钮可以正常提交并跳转到个人列表页,刚发布的博客在列表首位
6)详情页测试BlogDetailTest
① 登录后,从个人列表页点击“查看全文”进入,测试详情页能正确打开
②未登录,从列表页(主页)点击文章详情进入,测试该页面能正常打开
7)列表页(主页)测试BlogListTest
① 测试列表页能正确打开:登录和没登录
② 测试从各页面的“主页”按钮,均能正确跳转过来
8)测试套件runSuite
测试套件的运行,使用的是以测试类作为执行顺序的方式。
代码测试
所有测试用例都通过了
可以看到所有测试用例均通过
代码参考
自动化测试亮点
- 1.通过使用junit5中的注解,避免生成过多的测试对象,减少资源和时间上的浪费,提高了自动化执行的效率
- 2.使用参数化,保持用例的整洁,提高代码的可读性。
- 3.使用隐式等待,提高了自动化运行效率,提高了自动化的稳定性。
- 4.使用了显式等待,避免跳转页面,处理弹窗等出错
- 5.使用测试套件:降低了测试人员的工作量,通过套件一次执行所有要运行的测试用例。
- 6.使用屏幕截图,方便问题的溯源以及解决。