一、引言
1、项目简介
本项目是一个B/S架构的论坛系统,依托线上平台为用户提供一个便于交流、讨论的场所。该系统使用前后端的设计模式,围绕用户和和帖子两个核心对象进行业务处理,实现了用户注册登录、帖子管理,用户个人中心,以及评论私信等功能。
下面这张图囊括了本项目的核心功能点:
2、测试目的
本次测试结合软件规格说明书和产品说明文档,针对项目的主流程中的核心功能进行测试,旨在验证上述论坛系统的核心功能模块是否符合需求。
二、测试计划
1、测试范围
本次测试主要集中在论坛系统的核心功能模块上,包括用户管理、帖子管理、站内信管理等,是因为这些核心功能模块是论坛系统的基础功能,对于用户的日常使用至关重要。
2、测试方法
本次测试将采用黑盒测试方法,重点验证用户界面操作与预期结果是否一致:
- 黑盒测试方法就像是模拟真实用户行为的一种方式,它关注系统是否符合用户的期望和需求。测试人员作为外部用户,不需要了解系统内部的细节,这使得测试结果更加客观可靠。
- 通过测试输入和输出的正确性、界面友好性、系统响应速度等方面来评估系统的质量,特别适用于论坛系统的核心功能。
- 同时,黑盒测试方法还能高效地设计多个测试用例来覆盖不同的功能和使用场景,以检验系统在各种情况下的稳定性和正确性。这样,我们可以在相对较短的时间内发现系统中的潜在问题和缺陷。
3、测试环境
浏览器:Chrome
操作系统:Windows
设备:PC
三、测试执行
1、测试用例设计
本次功能测试是根据核心功能点进行测试用例的设计,以下是分模块归纳出的测试功能点,在进行具体的测试时,可以根据这些测试功能点编写具体的测试用例:
2、自动化测试
本次测试使用到自动化测试,使用的自动化测试工具 Selenium3
和 Junit5
共同完成测试用例的管理和执行。下面是自动化测试的实施详细步骤:
(1)导入自动化测试相关依赖
Selenium3+Junit5配置文件:Gitte 地址
(2)编写公共模块
- 编写创建驱动方法
- 编写保存现场截图方法
注:创建启动以及现场截图功能会频繁进行复用,所以单独创建一个类进行存储。
(3)注册模块
- 创建驱动,并打开页面
- 测试页面是否正常打开
- 测试正常注册:多参数测试(根据给出的注册白名单,即不需要校验验证码)
- 测试异常注册:表单为空/无效用户名/密码错误/验证码错误的情况。
- 注意测试的顺序,使用Order注解指定,否则可能会因为执行顺序不对导致测试失败。
(4)登录模块
- 创建驱动,并打开页面
- 测试页面是否正常打开
- 测试正常登录:多参数测试(根据给出的登录白名单,不需要校验验证码)
- 测试异常登录:表单为空/用户名/密码/验证码错误的情况
- 注意测试的顺序,使用Order注解指定,否则可能会因为执行顺序不对导致测试失败。
(5)业务功能模块
- 创建驱动,并打开页面
- 测试导航页面是否正常打开
- 由于帖子管理模块、个人中心模块、站内信模块等业务模块都需要登录后在导航页面进行跳转测试,因此将业务功能模块统一进行测试。
- 对各个具体的业务功能点进行有效测试:可以采用多参数进行测试。
- 对各个具体的业务功能点进行无效测试:根据上面的测试用例图进行具体设计。
- 测试时要注意各个功能点之间的执行顺序,使用Order注解指定,否则可能会因为执行顺序不对导致测试失败。
- 注意添加等待,防止出现元素找不到(页面跳转后元素位渲染完毕)、元素状态未就绪(按钮不可点击)等问题。
- 注意根据实际页面调整滚动条,避免因为元素在视窗外导致操作失败。
3、代码编写
针对以上模块进行自动化代码的编写,编写自动化代码时,注意结合实际页面元素,和具体功能点具体分析,这里给出完整代码:点击访问 Gitee
4、测试结果
执行用例个数:50;通过测试用例个数:50。测试用例全部通过,暂未发现 bug:
自动化测试视频:
forum-success-test
四、测试总结
在本次测试中,我们针对IT论坛项目进行了50个全面的测试用例。通过对各个基本功能模块和关键业务逻辑的测试,我们对系统的稳定性和正确性进行了验证。经过测试,我们得出以下总结:
- 测试覆盖率全面: 通过设计并执行50个测试用例,我们尽可能地覆盖了项目的各个功能和业务场景,包括用户注册、登录、帖子发布、评论回复等关键功能。
- 无执行错误: 在所有测试用例中,没有发现任何执行错误或系统崩溃的情况。这表明系统在处理各种输入和操作时表现稳定,并且能够准确地处理用户请求和数据交互。
- 功能符合预期: 在测试过程中,我们验证了各项功能是否符合预期的行为和规范。例如,用户能够成功注册、登录,发布帖子和评论等。系统在各个环节都表现出正确的行为和响应。
五、测试复盘
1、测试小结
本次测试根据项目的核心业务功能来设计的测试用例,然后根据测试用例使用selenium4自动化测试工具和junit5单元测试框架结合来实现web自动化测试的。
在进行自动化代码编写时,采用分模块编写测试用例,同时将测试中常用的方法如截图、创建驱动抽象出一个公共的类实现复用,最后使用测试套件执行所有测试类。
2、本次测试难点
自动化写出来不难,但是自动化执行速度快、更好地发现问题并避免误报才是难题。在本次自动化测试中,主要遇到以下几个问题:
- 时刻注意测试用例执行的顺序。比如在上面的测试中,一定是先登录才能访问导航页面进行具体的业务操作,否则会因为无权限导致测试用例执行失败。
- 注意添加等待,防止在操作元素时出现元素找不到(页面跳转后元素未渲染完毕)、元素状态未就绪(按钮不可点击)等问题。这个问题也是在测试中遇到最多的问题,当我们跳转到一个页面后,由于页面元素可能还未加载,直接获取或操作,可能出现找不到元素,或元素功能未就绪的问题,此时我们可以在测试中合理的添加等待,如添加智能等待、强制等待等。
- 注意根据实际页面调整滚动条,避免因为元素在视窗外导致获取不到,从而操作失败。在上面的测试中,有些页面比如文章编辑页,再进行提交的时候,由于提交按钮在浏览器视窗外(即当前显示的页面中看不到提交按钮),直接获取并点击提交按钮就会报错,此时就需要将滚动条调整到下面,找到提交按钮元素再进行点击操作。
3、本次测试亮点
- 使用了JUnit5中提供的注解:避免生成过多的对象,造成资源和时间的浪费,提高了自动化的执行效率。
- 项目中使用单例模式,只创建一次驱动对象,避免每个用例重复创建驱动对象造成时间和资源的浪费。
- 合理运用Junit5中的参数化:保持用例的简洁,提高代码的可读性。
- 使用测试套件:通过套件一次执行所有要运行的测试用例。
- 在合适的位置使用了等待:提高了自动化的运行效率,提高了自动化的稳定性,减小误报的可能性。
- 使用了屏幕截图:方便问题的追溯以及问题的解决。
4、测试迭代建议
上面的基本功能测试只是测试了业务的主流程没有问题,例如注册功能,失败的用例为用户名已存在、提交表单为空,两次输入密码不一致。没有进行更精细化的测试用例设计,比如测试用户名长度限制、是否包含特殊字符,密码的格式要求等等……如果想要让测试更加全面的覆盖整个项目,我们可以进一步设计更加详细的测试用例,拓展测试范围,如增加界面测试、易用性测试、兼容测试、性能测试、安全测试等……