テスト自動化ツールで負荷テストしたい

四角ズボン
2025-01-09
2025-01-09

同時実行の負荷テストができるツールを探していて、最初、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のこちらの記載です。

スクリーンショット 2024-12-13 141325
デフォルトでパラレルになっています。

以下のテストファイルを用意し、まずは、fullyParallel: false にして実行してみます。

const { test, expect } = require('@playwright/test');

test.describe.configure({ mode: 'parallel' });

test('test 1', async ({page}, testInfo) => {
  console.log('test 1: worker is ' + testInfo.workerIndex)
  await page.waitForTimeout(2000);
});

test('test 2', async ({page}, testInfo) => {
  console.log('test 2: worker is ' + testInfo.workerIndex)
  await page.waitForTimeout(2000);
});

test('test 3', async ({page}, testInfo) => {
  console.log('test 3: worker is ' + testInfo.workerIndex)
  await page.waitForTimeout(2000);
});

実行結果は以下の通りとなりました。

スクリーンショット 2024-12-12 162537_1

workerは全て同じ「0」となっています。

次に fullyParallel: true にして実行してみました。
実行結果は以下の通りとなり、

スクリーンショット 2024-12-12 162537_2

workerがそれぞれ「0,1,2」でパラレルで実行されました。
実行時間も短くなっています。

fullyParallel: false の場合でも、テストファイル内でパラレルに設定することも可能です。
先ほどのファイルに以下の太字の記述を追記します。

const { test, expect } = require('@playwright/test');

test.describe.configure({ mode: 'parallel' });

test('test 1', async ({page}, testInfo) => {
  console.log('test 1: worker is ' + testInfo.workerIndex)
  await page.waitForTimeout(2000);
});

実行結果は以下の通りとなり、パラレルで実行されていることを確認できました。

スクリーンショット 2024-12-13 142213

ただ、Worker数は最大で50なので、50以上の同時実行は難しそうです。
ちなみに、Workerの指定は実行時にパラメータを渡します。
(例)Worker数を「4」に指定する場合「npx playwright test --workers 4」

 Worker数のデフォルトは、搭載している CPU core の半分の数になります。
Windows の場合、コア数はタスクマネージャーの[パフォーマンス]タブで確認できます。
 (↓の画像の場合は「2」)

8f9b22b2-b9a5-412c-ada1-43dd12bf4214

同時実行50以下の負荷テストには使えそうですが、それ以上はもっと検討が必要そうです。
ただ、Workerを使ってテストの速度をUPできるのは便利です!