Closed7

GitHub Actions 上で Playwright のテストを並列実行したい

Keita HinoKeita Hino

Playwright はテスト実行時に使用する worker 数を増やすことで、テストの並列実行ができるっぽいので試してみる。

Keita HinoKeita Hino

デフォルトの worker 数を確認する

実行する環境によって変わるらしく、搭載している CPU core の半分の数になるみたい。

Defaults to half of the number of logical CPU cores. Learn more about parallelism and sharding with Playwright Test.

https://playwright.dev/docs/api/class-testconfig#test-config-workers

試しに自分の環境で確認してみる。(macOS)

$ sysctl -n hw.physicalcpu
10

10 core だった👀

worker 数はテストを実行すると確認できるので見てみる。

Running xxx tests using 5 workers
...

5 workers になっているので、確かに CPU core の半分の数が設定されてる。

Keita HinoKeita Hino

GitHub Actions 上で実行した時のデフォルトの worker 数を確認する

まずは GitHub Actions で実行した時のデフォルトの worker 数の確認から。

これは Playwright の設定ファイルに記載されてた。

playwright.config.ts
import type { PlaywrightTestConfig } from '@playwright/test';
import { devices } from '@playwright/test';

const config: PlaywrightTestConfig = {
  ...
  // ここで設定されてる
  workers: process.env.CI ? 1 : undefined,
   ...
};

export default config;

どうやら、CI 上だと問答無用で 1 になるっぽい。

Keita HinoKeita Hino

GitHub Actions の CPU core 数を確認する

現在使用しているジョブの実行環境は ubuntu-latest
下記のドキュメントを見る限り、2 core っぽい。
https://docs.github.com/ja/actions/using-github-hosted-runners/about-github-hosted-runners#supported-runners-and-hardware-resources

雑に CPU core 数を確認するコマンドをワークフローに追加して実行してみる。

...
- name: echo CPU core
  run: cat /proc/cpuinfo | grep processor | wc -l
...

確かに 2 core だった。

Keita HinoKeita Hino

GitHub Actions の core をフルに使ってみる

GitHub Actions 上のジョブは 2core ということが分かったので、Playwright の worker 数もそれに合わせてみる。

playwright.config.ts
import type { PlaywrightTestConfig } from '@playwright/test';
import { devices } from '@playwright/test';

const config: PlaywrightTestConfig = {
  ...
+ workers: process.env.CI ? 2 : undefined,
  ...
};

export default config;

この状態で GitHub Actions 上でテストを実行してみると...

Running xxx tests using 2 workers

worker 数が2になっているのでうまく設定できてそう。
ただ、テストの実行時間はあまり変わってない...🤔

Keita HinoKeita Hino

GitHub Actions で使用する runner の CPU core 数は増やせる?

一応増やすことはできるっぽい。
https://docs.github.com/ja/billing/managing-billing-for-github-actions/about-billing-for-github-actions#per-minute-rates

ただ、

注: 2 コアを超える Windows ランナーおよび Ubuntu ランナーには、エンタイトルメント (分) を使用できません。 これらのランナーは、パブリック リポジトリを含め、常に課金されます。 詳しくは、「GitHub Actions の課金について」を参照してください。

https://docs.github.com/ja/billing/managing-billing-for-github-actions/about-billing-for-github-actions#included-storage-and-minutes

とある通り、プランの利用枠は使えないみたい。
今回も抑えつつ、できればCIの時間を短縮したい...くらいの温度感だったので、この方法は見送る。

このスクラップは2023/07/18にクローズされました