单个实例执行的测试用例分组规范
到目前为止,WebdriverIO 为每个测试文件创建一个单独的实例来运行。因此,如果我们的目录结构如下所示
test
└─── specs
│ test_login.js
│ test_product_order.js
│ test_checkout.js
│ test_b1.js
│ test_b2.js
并且配置文件中定义的测试用例如下所示
"specs": [
'./test/specs/test*.js'
],
那么当运行 WebdriverIO 时,测试用例定义将被扩展以创建所有测试文件列表,并且将创建一个单独的实例来运行每个测试(最多为“maxInstances”的值)。其余测试将排队,直到测试完成。因此,每个测试都在其自己的实例中运行。
此模型有很多优点。这意味着测试可以并行运行,并且可以更轻松地重试失败的测试等。
但是,在某些情况下,这种方法效果不佳。在一个案例中,用户流程涉及为每个大约 250 个测试文件转译数万个 TypeScript 文件,导致测试速度的巨大开销。在另一个案例中,远程设备池为每个测试配置了一个新设备,并进行所有相关的设置,从而影响了性能和成本。
在Vertizan,我们正在将我们基于 AI 和功能覆盖率驱动的 Vitaq 测试自动化工具与 WebdriverIO 和 Mocha 集成。为了使 Vitaq AI 能够工作,它需要能够选择接下来要运行的测试/操作,这需要在单个实例中提供所有测试。
因此,我们与 WebdriverIO 团队合作,实现了一种语法,允许用户指定哪些测试应分组在一起并在同一实例中执行。所有三种测试执行框架(Mocha、Jasmine、Cucumber)都支持此方法,并且默认情况下它们将按顺序运行测试。
为了利用此功能,WDIO 配置文件中测试用例的定义已扩展,现在它可以在测试用例数组中接受数组。内部数组中的所有文件都将分组在一起并在同一实例中运行。
因此,以下测试用例定义
"specs": [
[
"./test/specs/test_login.js",
"./test/specs/test_product_order.js",
"./test/specs/test_checkout.js"
],
"./test/specs/test_b*.js",
],
在针对前面描述的目录树运行时,将产生三个实例
- 一个实例将运行 test_login.js、test_product_order.js 和 test_checkout.js 的组。
- 另一个实例将运行 test_b1.js。
- 最后一个实例将运行 test_b2.js。
只有测试用例定义支持此语法。
编辑:此语法现已扩展为支持在套件中定义的测试用例,因此您现在也可以这样定义套件
"suites": {
end2end: [
[
"./test/specs/test_login.js",
"./test/specs/test_product_order.js",
"./test/specs/test_checkout.js"
]
],
allb: ["./test/specs/test_b*.js"]
},
在这种情况下,"end2end" 套件的所有测试都将在单个实例中运行。