単一インスタンスでの実行のためのスペックのグループ化
これまで、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チームと協力して、ユーザーが同じインスタンスで実行するためにどのテストをグループ化する必要があるかを指定できる構文を実装しました。このアプローチでは、3つのテスト実行フレームワーク(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",
],
上記のディレクトリツリーに対して実行すると、3つのインスタンスが生成されます
- 1つのインスタンスは、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」スイートのすべてのテストが単一のインスタンスで実行されます。