目录
一、项目背景
1.论坛系统项目是一个综合性很强的项目,涉及前端页面设计、后端业务逻辑实现以及数据库的高效管理。前端主要有六个个页面构成:登录页、注册页面、帖子列表页、帖子详情页、个人中心页面、以及帖子编辑页。其结合后端实现了以下的主要功能:登录、注册、编辑帖子、删除博客等功能。
2.该论坛项目可以实现对个人信息、帖子标题、帖子发布时间、站内消息、个人中心等进行详细的查看,同时可以对帖子的类型进行分类,按需要进行帖子详情的查看
3.该项目的目的:用户可以通过该论坛进行帖子的发表和互动,在该社区中分享自己的见解和感受,方便用户的在线交流。同时不同的论坛分类,如Java。C++等方向,能帮助用户有针对性的解决编程难题,分享最新的技术趋势
二、项目功能
该个论坛系统主要实现了以下几个功能:登录、注册、查看帖子详情、编辑发布帖子、个人信息的修改等功能。
登录功能:用户名以及密码已经在后端写入了数据库用户名以及密码是已经存在的就可以进行登录。登录成功后就会跳转到论坛首页的列表页面。在右上角存在切换夜间(白天)模式、查看站内消息、点击头像,发布帖子等功能按钮,但是在未登录情况下按下均只会跳转到登录页面。
注册页面:将注册好的用户名、昵称和密码等信息写入数据库,注册成功后会跳转到登录页面进行登录后才能查看该论坛的功能
列表页面:可以在列表页查看有限数量的帖子简介,其包括帖子的分类、帖子标题、发布时间、用户昵称、点赞数、浏览数和评论数等。在右上角可以看到登录的用户的昵称、头像等。在右上角还有个人中心主页、退出、发布帖子等按钮功能:个人中心即查看个人信息,发布帖子即梯子的编辑发布页,退出即回到登录页面。
详情页面:在列表页面点击帖子的标题按钮就会跳转到详情页,此时就可以看到该篇博客的完整内容。在该详情页面有发私信、点赞、回复功能。
编辑帖子:在登录之后的右上角点击“发布帖子”之后就会进入帖子编辑页面,此时就可以进行帖子的编写,点击“发布文章”后就可以成功发布文章,此时就会跳转到列表页。
个人信息修改:点击首页的头像后有一个框,点击框中的“个人中心”后就会跳转到个人中心页面,在该页面可以对个人头像、昵称、邮箱、电话号码、密码、个人简介等信息进行修改提交
三、测试计划
主要使用的测试工具:selenium、jmeter、postman
主要涉及的测试类型:功能测试、自动化测试、性能测试
3.1功能测试
1.测试用例的设计
2.实际执行测试
(1)登录
(2)注册
(3)发布帖子并查看首页列表
发布后跳转首页列表
(4)查看帖子的发布详情
(5)查看个人中心并修改信息
(6)退出回到登录页
3.2自动化测试
1.自动化测试一般步骤:
- 使用脑图(思维导图)编写web自动化测试用例
-
在Python下使用selenium,创建自动化项目,根据用例来实现Python脚本
2.代码编写
- 根据脑图进行测试用例的编写:每个页面一个测试类,然后再各个测试类中进行测试用例的编写
- 注意公共属性需要单独放一个类,方便进行代码复用
- 创建启动的页面截图会频繁进行复用,所以单独创建一个类进行存储
- 注意添加隐式等待,为了确保页面正确加载显示
- 截图会对原来的相同文件名的图片进行覆盖,使用时间戳来保证每次生成图片的文件名唯一不被覆盖
(1)添加相关的库
(2)在新建的项目下创建common和test目录来存放公共类和测试类,以及images来存放截图
(3)创建一个公共类用来创建驱动和页面的截图
- 创建驱动、保存现场截图
- 在保存现场截图的时候命名是按时间来进行文件夹的划分,然后图片的名称要体现出测试类的类名,方便进行问题的追溯
- 文件名的动态获取,时间格式的设置
- 可以在创建驱动的时候修改option默认的有头模式or无头模式
- 用implicitly_wait来进行隐式等待,确保访问页面某个元素时该元素的正确加载
(4)登录页面的测试ForumLogin
- 调用创建驱动
- 测试登录页面是否正常打开
- 使用正确的密码和账号进行登录
- 使用错误的密码或账号进行登录
- 注意添加截图来判断页面是否成功登录
- 可以使用断言来检测登录失败的弹窗信息
(5)注册页面的测试ForumEnroll
- 测试注册页面是否正常打开
- 使用完整且正确的注册信息进行注册
- 使用不完整或错误的注册信息进行注册(如用户名已存在、密码和确认密码不一致、未勾选同意条款、纤细填写不完整)
- 点击注册添加截图来获取测试结果判断是否成功或错误出现的问题
- 可以附加使用打印错误提示信息来测试错误情况
- 注册完是否正常跳转到登录界面
(6)论坛首页列表的测试ForumList
- 测试列表页面是否正常打开
- 使用find_element来测试各个功能元素是否存在
- 点击"Java"帖子分类看是否能正确跳转并截图跳转后的页面
(7)帖子详情页的测试ForumDtail
- 测试详情页是否正确打开
- 测试该页面下的内容是否完整可见
- 测试该页面下的其他功能,如点赞、发私信等功能元素是否存在
- 注意导航回到列表页的操作
(8)帖子编辑页面的测试ForumEdit
- 测试编辑页是否可以正确打开
- 测试帖子“发布”功能是否可以正常发布:元素齐全 or 部分元素
- 截图验证信息填写情况
- 发布后是否跳转到列表页
(9)个人中心页面测试ForumPrivate
- 测试个人中心页面是否正确打开
- 测试各个信息是否可以被修改
- 填写完后是否修改
- 截图验证信息修改情况
(10)驱动释放
- 因为驱动的测试是要在最后一个测试类完成之后进行释放的,所以直接新在所有的测试类测试完后调用公共类中的驱动释放
(11)测试运行Runtest
- 为了让所有的测试类集成测试并且按照一定的顺序进行测试,使用一个Runtest里面的if __name__ == "__main__"来控制程序的执行入口
3.3代码测试
3.4结论
- 关注测试用例的执行顺序问题
- 对于页面的检查一定要到位,如检查元素是否存在确保页面的正确性
- 因为列表页等的测试是需要在登录成功后才能抵达的,所以在进行登录页面测试的最后一步应该是登录成功的状态,这样子是为了确保列表页等能够正确进入测试。
- 驱动关闭的位置要注意,只有最后一个用例结束之后才进行关闭。
- 注意屏幕截图保存的方式:动态时间戳并进行时间格式化,然后期望按照某种维度(天、周)以文件夹的方式进行保存。
- 可以适当关注用例执行时间,如果时间过长就需要考虑是我们自己写的测试用例的问题还是程序真的有性能问题
- 测试用例并不是越多越好
- 可以使用无头模式来创建驱动
- 添加显示or隐式等待可以保证页面元素加载后再访问,强制等待一般用于测试
3.5代码参考
ForumTest · 阿赭/测试学习 - 码云 - 开源中国
3.6注意点
-
注意在进行顺序划定以及导航方面存在遗漏或者错误的情况;另外对于页面登录过程中的内容清空也要格外注意,一定要进行清空;可以进行隐式等待,确保页面加载完成,提高自动化的稳定性。
3.7亮点
- 只创建一次驱动对象,避免每个用例重复创建驱动对象造成时间和资源的浪费
- 使用了等待,元素的加载有了保证,提高了自动化的运行效率,提高了自动化的稳定性,减小误报的可能性
- 使用了截图,方便问题的追溯和解决
- 使用测试套件:降低了测试人员的工作量,通过套件一次执行所有要运行的测试用例
- 使用的无头模式,只注重结果,留出屏幕,相当于在后台执行
四、性能测试
4.1Jmeter的基本使用
使用Jmeter配合使用Postman进行性能测试,主要对登录、用户个人信息、首页板块列表、根据帖子ID获取帖子详情、帖子编辑发布等接口进行测试
涉及到的jmeter组件:取样器、HTTP信息头管理器、HTTP Cookie管理器、HTTP请求默认值、CSV数据文件设置器、Json提取器、用户定义的变量、Json断言等等
(1)登录界面可以进行Json断言的检测,对每次登录返回的code进行断言
(2)使用HTTP Cookie管理器,后序发起的http请求中会自动添加该保存的cookie信息
(3)使用csv文件管理器,用户登录的账号密码可以自动去csv文件里取,一次取多个或者循环取,避免手动输入参数
(4)使用HTTP请求默认值,所以在该元件作用域下发起的http请求,都会自动拼接加上请求默认值,可以在HTTP请求默认值中指定固定的端口号和ip地址以及内容的编码格式
(5)使用HTTP信息头管理器,在其作用域下发起的http请求头都会默认带上信息头管理器中的内容
(6)用户定义的变量,可以固定一个变量的值,对该变量进行修改会影响所有使用该变量的组件
(7)Json提取器,可以提取某次http请求返回数据中的变量值,一般使用¥.变量[n].变量来获取值,使用¥{变量名}来使用
(8)聚合报告,可以显示各个接口请求的响应时间和吞吐量等指标
(9)同步定时器:只有当指定的线程数都准备就绪后才会开始发起请求
4.2对项目进行性能测试--梯度增加线程数量
4.3测试结果
1.聚合报告
2.吞吐量
3.响应时间
分析:观察响应时间和吞吐量可以发现,一开始,线程逐步增加,吞吐量处于较高水平,而响应时间较低,当线程数逐步上升时,响应时间逐渐增加,吞吐量也不如之前那样高,可以说,响应时间和吞吐量在一定程度上是呈现负相关的
4.4难点
- 直接请求登录后的其他界面是不可取的,无法获取到我们想要的页面,需要添加http cookie管理器进行用户身份的验证
- 要着重关注请求体的数据格式,在编辑发送帖子时,要注意数据的接收格式为application/json
- 如果想要访问多次访问同一个ID的详情页,可以通过Json提取器提取特定的变量值并保存,如果想要方便对变量值进行修改,可以使用用户自定义的变量对变量进行管理
- 在使用Jmeter对接口进行测试时候,也可以辅助使用Postman观察请求和响应的情况