同時実行の負荷テストができるツールを探していて、最初、Cypressを使ってみようとしたところ、playwrightというE2Eテストツールが便利だという情報を得ました。
Cypressだと並列実行が有料なところ、無料で実行可能とのこと。
並列実行できるとテスト時間も短縮できてうれしいです。
Playwrightは、Microsoftが開発・メンテナンスしている比較的新しいテストツールです。
Playwright Testは、エンドツーエンドのテストのニーズに対応するために特別に作成されました。Playwrightは、Chromium、WebKit、Firefoxなど、最新のレンダリングエンジンをすべてサポートしています。Windows、Linux、macOS、ローカルまたはCIで、ヘッドレスで、またはGoogle Chrome for AndroidおよびMobile Safariのネイティブモバイルエミュレーションを使用してテストします。
(Playwright 公式ドキュメントを自動翻訳)
まず、インストールして起動する
1. Node.js をインストールします。(詳細は割愛)
2. Playwright用のディレクトリを作成します。
3. Playwright用のディレクトリ配下でインストールコマンドを実行します。
npm init playwright@latest
すると、以下を聞かれるので選択します。
- TypescriptかJavaScriptの選択
- テストフォルダの名前
- Github Action workflowを追加するか
- Playwrigh tbrowserをインストールするか
とりあえず、すべてデフォルトでインストールしました。
4. Playwrightを実行します。
npx playwright test
※UIありの場合は「npx playwright test --ui」
パラレルで実行したい
パラレルの指定は playwright.config.jsのこちらの記載です。
デフォルトでパラレルになっています。
以下のテストファイルを用意し、まずは、fullyParallel: false にして実行してみます。
実行結果は以下の通りとなりました。
workerは全て同じ「0」となっています。
次に fullyParallel: true にして実行してみました。
実行結果は以下の通りとなり、
workerがそれぞれ「0,1,2」でパラレルで実行されました。
実行時間も短くなっています。
fullyParallel: false の場合でも、テストファイル内でパラレルに設定することも可能です。
先ほどのファイルに以下の太字の記述を追記します。
test.describe.configure({ mode: 'parallel' });
test('test 1', async ({page}, testInfo) => {
console.log('test 1: worker is ' + testInfo.workerIndex)
await page.waitForTimeout(2000);
});
実行結果は以下の通りとなり、パラレルで実行されていることを確認できました。
ただ、Worker数は最大で50なので、50以上の同時実行は難しそうです。
ちなみに、Workerの指定は実行時にパラメータを渡します。
(例)Worker数を「4」に指定する場合「npx playwright test --workers 4」
Worker数のデフォルトは、搭載している CPU core の半分の数になります。
Windows の場合、コア数はタスクマネージャーの[パフォーマンス]タブで確認できます。
(↓の画像の場合は「2」)
同時実行50以下の負荷テストには使えそうですが、それ以上はもっと検討が必要そうです。
ただ、Workerを使ってテストの速度をUPできるのは便利です!