实现一个类似CSDN的个人博客系统
支持以下核心功能:
支持用户注册登录并设置个人信息如头像、昵称等等;
对于未登录的用户,可以阅读他人博客;
对于已登录用户可以发布、修改、删除文章,并提供保存草稿功能以便用户下次继续编辑
该个人博客系统主要实现了以下功能:注册、登录、注销、写博客、修改博客、删除博客、保存草稿,修改草稿,删除草稿,查看博客详情和修改个人信息
- 注册功能:用户输入想创建的账号和密码,点击注册按钮后无误后显示注册成功,并询问是否跳转到登陆页面。在右上角存在网站主页,登录两个按钮。
- 登录功能:用户输入正确的账号密码后,登录成功后就会跳转到列表页面。在右上角存在网站主页,注册两个按钮。
- 我的博客页面:可以在列表页查看当前登录用户发布的博客简介,其包括博客标题、发布时间以及内容概要。在左侧可以看到登录的用户以及文章数、分类数等的模块。在右上角有个人中心、网站主页、写博客、草稿箱、注销五个功能
- 博客详情页面:在博客简介下方点击“查看全文”按钮就会跳转到当前博客详情页,此时就可以看到该篇博客的完整内容。在右上角有网站主页、和我的博客两个功能
- 个人信息页面:该页面显示用户全部的个人信息,包括头像,性别,账号,昵称,个人简介等,用户也可以修改除账号以外的全部信息。
- 写博客:在登录之后的任意界面点击“写博客”之后就会进入博客编辑页面,此时就可以进行博客的编写,点击“发布文章”后就可以成功发布文章,此时就会跳转到我的博客页面。
- 修改、删除博客:在登录之后的我的博客页面点击任意博客下的修改或删除按钮,可以对已发布的博客进行继续编辑或删除。
- 修改、删除草稿:在登录之后的草稿箱页面点击任意博客下的修改或删除按钮,可以对未发布的博客草稿进行继续编辑或删除。
注册测试:
正常注册:
1.
打开谷歌浏览器,搜索框输入:http://43.139.215.203:8080/reg.html
2.
用户名输入:user1
密码输入:123456
确认密码输入:123456
点击提交
3.得到结果:
异常注册(输入已被注册的账号、密码和正确的确认密码):
1.
打开谷歌浏览器,搜索框输入:http://43.139.215.203:8080/reg.html
2.
用户名输入:admin
密码输入:123456
确认密码输入:123456
点击提交
得到结果:
登录测试:
正常登录:
1.打开谷歌浏览器,搜索框输入:http://43.139.215.203:8080/login.html
2.填入正确的账号、密码和验证码
用户名:admin
密码:123456
验证码:wannengyanzhengma
点击提交
得到结果:跳转成功
异常登录(异常密码-密码错误):
1.打开谷歌浏览器,搜索框输入:http://43.139.215.203:8080/login.html
2.填入正确的账号、密码和验证码
用户名:admin
密码:111111
验证码:wannengyanzhengma
点击提交
得到结果:
博客编辑测试:
已登录:
正常编辑:
1.打开谷歌浏览器,搜索框输入:http://43.139.215.203:8080/blog_add.html
2.输入标题:博客编辑测试,正文输入内容:博客编辑测试,点击发布文章,点击确认提交
得到结果:
异常编辑(标题为空,点击发布):
1.打开谷歌浏览器,搜索框输入:http://43.139.215.203:8080/blog_add.html
2.不输入标题,正文输入内容:博客编辑测试,点击发布文章,点击确认提交
得到结果:
未登录:
1.打开谷歌浏览器,搜索框输入:http://43.139.215.203:8080/blog_add.html
得到结果:跳转回登录页面
删除博客测试:
已登录:
1.打开谷歌浏览器,搜索框输入:http://43.139.215.203:8080/myblog_list.html
2.选择文章标题为:博客删除测试,点击删除,点击确认删除
得到结果:删除成功
个人信息修改测试
已登录
正常修改(修改头像,上传图片文件):
1.打开谷歌浏览器,搜索框输入:http://43.139.215.203:8080/personal.html
2.点击头像,点击确认,跳转到上传页面,选择图片文件后,点击提交
得到结果:
异常修改(修改头像,上传非图片文件):
1.打开谷歌浏览器,搜索框输入:http://43.139.215.203:8080/personal.html
2.点击头像,点击确认,跳转到上传页面,选择非图片文件后,点击提交
得到结果:
这里未设置响应的编码格式,导致出现
???
实际应该为:
修改:在响应返回之前,添加代码response.setContentType(“application/json;charset=utf8”);
再次测试,得到结果:
注销测试:
已登录
1.打开谷歌浏览器,搜索框输入:http://43.139.215.203:8080/myblog_list.html
2.点击右上角的注销按钮,选择确认注销
得到结果:跳转回登录页面
以页面书写测试类,然后对主要功能进行测试。
1.添加依赖:
<dependencies>
<dependency>
<groupId>org.seleniumhq.selenium</groupId>
<artifactId>selenium-java</artifactId>
<version>4.8.0</version>
</dependency>
<dependency>
<groupId>commons-io</groupId>
<artifactId>commons-io</artifactId>
<version>2.6</version>
</dependency>
<dependency>
<groupId>org.junit.jupiter</groupId>
<artifactId>junit-jupiter</artifactId>
<version>5.8.2</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:存放通用类
screen:存放测试时的屏幕截图
test:存放测试代码
logined:已登录进入相关网页
open: 相关网页对登录状态没有要求
unlogined:未登录进入相关网页
类创建
com.common
公共类AutoTest
功能:创建驱动、保存现场截图
注意:
1.在保存现场截图的时候命名是按时间来进行文件夹的划分,然后图片的名称要体现出测试类的类名,方便进行问题的追溯。
2.文件名的动态获取,注意时间格式的设置。
3.可以在创建驱动的时候修改默认的有头模式or无头模式
4.测试类全部继承该类,从该类获取驱动对象,调用屏幕打印方法
com.test.open
登录页面测试类LoginTest
功能:
① 获取驱动,并打开页面
② 测试页面是否正常打开
③ 测试正常登录:多参数测试
④ 测试异常登录:用户名/密码错误的情况,用户名正确密码为空
注意
测试的顺序,使用Order注解指定,否则可能会因为执行顺序不对导致测试失败
清空内容后才能再次输入用户名以及密码
注册页面测试类RegTest
功能:
① 获取驱动,并打开页面
② 测试页面是否正常打开
③ 测试正常注册:动态参数测试
④ 测试异常登录:用户名密码正确,确认密码为空;用户名正确,密码和确认密码不匹配
注意
测试的顺序,使用Order注解指定,否则可能会因为执行顺序不对导致测试失败
清空内容后才能再次输入用户名、密码和确认密码
正常注册时,放在再次运行后用户名已被注册,所以采用user+随机值的方式设计用户名
网站主页测试类HomepageTest
功能:
① 获取驱动,并打开页面
② 测试页面是否正常打开
博客详情测试类BlogDetailTest
功能:
① 获取驱动,并打开页面
② 测试页面是否正常打开
com.test.logined/com.test.unlogined
博客编辑测试类BlogAddTest
功能:
① 获取驱动,并打开页面
② 测试页面是否正常打开
③ 测试正常编辑博客并提交:输入标题和正文
④ 测试异常编辑博客并提交:输入正文标题为空
注意
测试的顺序,使用Order注解指定,否则可能会因为执行顺序不对导致测试失败
清空标题后才能再次标题
等待弹窗时需要进行强制等待,等待弹窗弹出,否则出现弹窗未找到错误
博客草稿测试类BlogDraftTest
功能:
① 获取驱动,并打开草稿箱页面
② 测试页面是否正常打开
博客修改测试类BlogEditTest
功能:
① 获取驱动,并打开页面
② 测试页面是否正常打开
③ 测试正常修改博客并提交:修改标题和正文,标题正文均不为空
④ 测试异常修改博客并提交:删除标题
注意
测试的顺序,使用Order注解指定,否则可能会因为执行顺序不对导致测试失败
等待弹窗时需要进行强制等待,等待弹窗弹出,否则出现弹窗未找到错误
博客列表测试类BlogListTest
功能:
① 获取驱动,并打开页面
② 测试页面是否正常打开
个人主页测试类PersonalTest
功能:
① 获取驱动,并打开页面
② 测试页面是否正常打开
驱动释放类DriverQuiteTest
因为驱动的测试是要在最后一个测试类完成之后进行释放的,如果是使用@AfterAll注解,那么每次修改测试类的时候都会需要挪动驱动释放的位置,所以直接新建一个类作为驱动释放,此时只需要在测试套件中放到最后就行。
测试套件runSuite
测试套件的运行,使用的是以测试类作为执行顺序的方式。
源码地址:https://gitee.com/yuminghui2023/auto_test
测试结果:
所有测试用例通过,如图所示
小结
1.注意测试用例的执行顺序,不同的执行顺序回使得正确的执行得到错误的结果
2.设置隐式等待,提高了自动化的运行效率,提高了自动化的稳定性,防止因页面刷新过慢导致找不到对应元素,减小误报的可能性。
3.设置浏览器的无头模式,我们作为测试人员只需要关注结果即可
4.保存现场截图,注意设计好截图的命名格式,方便问题的回溯
5.使用单例模式创建驱动,减少驱动频繁创建销毁带来的资源消耗
6.适当关注测试的时间,可用于检测系统的性能是否有大问题
7.测试用例不是越多越好,重要的是对系统测试的覆盖率