此篇文档将介绍自动化测试系统中常见问题以及解决方案
介绍自动化测试用例管理工具为 jest
自动化测试管理和维护
探讨:
简单说一下测试工作流程,部分细节会被跳过
1. 了解需求文档
2. 需求评审 > 需求完善
3. 编写测试用例
4. 测试用例评审 > 测试用例完善
5. 搭建测试环境
6. 执行测试用例
7. 提交缺陷(bug) > 跟进缺陷
8. 验证缺陷 > 回归测试
9. 拓展性测试
10. 需求变更
11. 维护测试用例
12. 持续集成测试
管理
根据以上步骤来解析自动化测试用例的设计以及管理,以下通过测试用例标题进行解析:
-
测试用例标题应具有以下特性:
- 从测试用例标题中可以获取该测试用例的目的
- 测试用例标题的唯一性
- 测试用例标题中应包含一定的关键字
- 测试用例标题也应具有简洁性
- 用例名称具有关联性(需求、功能、场景等)
-
自动化测试用例标题也应具有以上特性,从以上几个特点进行解析为什么要符合以上特点:
- 标题语义明确,涵盖测试点
- 编写功能测试中可以在测试步骤中体现用例的功能和步骤,但在自动化测试用例的设计和实现都是代码,阅读性比较差,如果是一个熟悉项目的测试者从标题就能观测出这个测试用例在项目中的作用,相对自动化测试用例的代码有较好的解析(测试代码中也少不了注释)。
- 唯一性:无论是功能测试还是自动化测试标题的唯一性是检索测试用例的关键,如果存在同名且内部步骤不同的测试用例是,就容易产生歧义。如果在自动化测试中使用测试用例命令来运行自动化,出现同名的用例就会一起运行,没有唯一性。
- 关键字:自动化测试项目做大后,会根据测试用例名中的涵盖的关键字进行专项测试,或提前测试用例中具有可以标识用例类型的文本
- 简洁性:用例名称过长时不易与阅读
- 关联性:与关键字驱动有些类似,可以通过部分字段提取用例做专项测试。
- 标题语义明确,涵盖测试点
维护
对于自动化测试用例的维护,需要持续的努力和不断的改进,以确保自动化测试用例的持续有效性。
未完待续…
jest 运行上一次运行结果中失败的套件
问题:
使用jest工作作为测试框架,在使用 npx jest test --watchAll 的时候只能手动输入 f 运行失败的测试用例,如何在使用 npx jest test --watchAll 命令后自动运行失败的测试用例,或者多次运行失败的用例?
解答:
在 Jest 中可以通过使用 --onlyFailures 标志来仅运行上次测试运行失败的测试用例。您可以在运行 Jest 时添加 --onlyFailures 标志来运行失败的测试用例,例如:
# shell
npx jest --onlyFailures
Jest 将读取一个名为 test-results.json 的文件来确定上次测试运行期间失败的测试用例。如果没有找到该文件,则 Jest 将运行所有测试用例。
设置自动化测试运行次数
要指定测试用例的重复次数,可以在 Jest 的配置文件中使用 --testRunner 选项指定自定义测试运行器,并在测试运行器中实现测试重复逻辑。例如,你可以使用 jest-runner 包提供的 serial 运行器来实现测试用例的重复运行,如下所示:
- 安装 jest-runner 包:
npm install jest-runner --save-dev
- 在 Jest 的配置文件中指定 --testRunner 选项和 --maxWorkers 选项,并实现测试运行器:
{
"testRunner": "./path/to/customTestRunner.js",
"maxWorkers": 4
}
- 创建自定义测试运行器:
在 RepeatRunner 类中,我们重写了 runTests 方法,使其在测试运行之前先循环运行指定的次数,然后再运行测试用例。
const SerialRunner = require('jest-runner/build/runners/serial');
class RepeatRunner extends SerialRunner {
constructor(...args) {
super(...args);
this.repeats = 3; // 设置重复次数
}
async runTests(tests, watcher, onStart, onResult, onFailure, options) {
for (let i = 0; i < this.repeats; i++) {
await super.runTests(tests, watcher, onStart, onResult, onFailure, options);
}
}
}
module.exports = RepeatRunner;
现在你可以使用 npx jest --runInBand 命令运行测试用例,并将其重复运行三次。如果需要修改重复次数,只需要在自定义运行器中修改 this.repeats 属性即可。
运行指定文件,实现关键字驱动测试
问题:
随着自动化测试项目的逐步推进,手工测试用例也逐渐转变为自动化从测试用例,自动化测试用例库也编写繁多,如果在对某个模块做专项测试时运行所有用例,有些测试用例没有必要执行,就会出现自动化测试运行出现浪费行为。如何通过一个文件或脚本的方式进行运行某些测试用例?
需求:
- 根据指定的测试用例名称进行专项测试某些文件
- 这些测试用例的名称通过外部驱动的方式进行存储可以时csv、json 等文件按的格式
- 在运行这些测试问用例后所有的测试结果需要融合到一个测试报告中
关键字驱动
关键字驱动测试(Keyword-Driven Testing),又称数据驱动测试或行为驱动测试,是一种自动化测试方法,通过关键字的方式描述测试用例,将测试数据和测试步骤分离,从而实现自动化测试用例的可重用性和可维护性。
在关键字驱动测试中,测试用例通常由以下几部分组成:
- 测试用例的名称和描述:用于描述测试用例的名称和目的。
- 测试数据:用于描述测试用例需要的输入数据,可以是手动输入的数据,也可以是从外部数据源读取的数据。
- 测试步骤:用于描述测试用例的执行步骤,每个测试步骤由一个关键字和一组参数组成,用于执行测试操作,例如“点击”、“输入”、“检查”等。
- 预期结果:用于描述测试用例的预期结果,通常是与测试步骤相关的结果或系统的状态。
在执行关键字驱动测试时,测试框架会自动解析测试用例的关键字和参数,并执行对应的测试步骤。测试人员只需要编写测试用例的关键字和参数,不需要编写具体的测试代码,从而实现自动化测试的快速构建和维护。
关键字驱动测试可以大大提高自动化测试的效率和可维护性,同时也可以降低自动化测试的编写和维护成本。
https://www.guru99.com/keyword-driven-testing.html
方案1
该方案是以测试套件为最小的测试单元,测试覆盖性较高,但是会存在部分测试用例执行浪费,增加自动化测试的整体测试时间。
您可以将要运行的测试用例名称列表写入一个文件中,然后使用 --testNamePattern 选项来匹配这些测试用例名称。
以下是一些具体步骤:
- 创建一个包含要运行的测试用例名称的文本文件。每个测试用例名称应该单独一行。
例如,假设您有一个名为 my_test_cases.txt 的文本文件,其中包含以下内容:
test case 1
test case 2
test case 3
- 在运行 Jest 命令时,使用 --testNamePattern 选项来匹配这些测试用例名称。在命令行中,您可以使用以下命令:
以下命令使用 sed 和 tr 命令来将 my_test_cases.txt 中的测试用例名称转换为正则表达式格式,并将其作为 --testNamePattern 选项的值传递给 Jest。
sed 命令将每个测试用例名称转换为 name()| 的形式,其中 name 是测试用例名称。tr 命令用于删除 sed 命令添加的最后一个 | 字符和换行符。这样,最终的正则表达式就可以匹配 my_test_cases.txt 中包含的所有测试用例名称。
npx jest --testNamePattern="$(sed 's/.*/&()|/' my_test_cases.txt | tr -d '\n')"
- 运行上述命令后,Jest 将只运行包含在 my_test_cases.txt 中的测试用例。
请注意,如果您在测试用例名称中使用了正则表达式中的特殊字符,则需要在测试用例名称中转义这些字符。否则,这些字符可能会被解释为正则表达式元字符,从而导致匹配失败。
另外,上述命令是在 Unix 系统上运行的。如果您在 Windows 上运行 Jest,请使用适当的命令替换 sed 和 tr 命令。
方案2
该方案是根据自动化测试用用例名称进行执行,也属于关键字启动测试的一种,测试颗粒度更细。
linux 系统
- 创建一个包含测试用例的文件,文件名采用匹配模式,可以写测试用例名称的一部分,最好填写每个测试用例名字具有唯一性的标志。
- 假设文件名为 testCaseList.txt
- –testPathPattern:指定要匹配测试用例的路径
- –testNamePattern: 指定要匹配测试用例的名称,多个测试用使用 “ | ” 分割
# testCaseList.txt
--testPahtPattern="filePath" --testNamePattern=`test case name 1|test case name 2`
- 执行测试用例
# bash
npx jest $(cat testCaseList.txt)
运行上述命令后,Jest 会根据 testCaseList.txt 中匹配到的测试用例。
- 如果是 windows
window 系统
由于 linux 与 windows 系统存在差别,需要在 windows 系统中做一些改变
- 创建 批处理文件 testCaseList.bat
- 通过运行批处理的方式来批量运行测试用例
- 将 npx jest 命令写入到批处理文件中
- 将( ` ) 符号改为( " )
- 运行终端为 cmd.exe
# testCaseList.bat
npx jest --testPahtPattern="filePath" --testNamePattern=`test case name 1|test case name 2`
-
执行测试用例
双击 testCaseList.bat 文件即可运行 -
在 windows 运行 bash
如果为了文件的统一性,windows 和 linux 环境可以统一使用 bash ,在 windows 系统中可以使用 git 的 bash 窗口执行 linux 系统的运行测试命令。