ひでメモ

プログラムについて勉強したことを書きます。たぶん。

【Laravel】CI での自動テストを並列化したらジョブの時間が短縮した

概要

CI での PHPUnit で行う自動テストで並列化オプションを有効にしたらテストが早く終わるようになりました。
ローカルではもちろん使っていたんですが CI でも有効したらいいじゃんと気づいたので有効しました。

並列化オプション

parallelオプションでテストを並列化できます。内部的には Paratest を使っているようです。

php artisan test --parallel

ドキュメントにも書いてますね。
readouble.com

注意点というほどでもないのですが、PHPUnit のオプションを使う場合はparallelオプションの後に付けないと怒られてしまいました。
artisan testとしてのオプションを先に受け取って、その後に PHPUnit のオプションという仕様のようです。

php artisan test --parallel --no-coverage -c ./phpunit.xml

並列数

並列数はprocessesオプションで指定できますが、今回は特に指定しませんでした。

php artisan test --parallel --processes=4

デフォルトは使用できる論理コア数とのことでした。

GitHub - paratestphp/paratest: Parallel testing for PHPUnit

The default is auto, which means the number of logical CPU cores is set as number of processes.

他の処理はしておらず使用できるコアはできるだけ使ってほしいのでデフォルトです。
多すぎてもあんまり意味がないと思うのでとりあえず論理コア数で十分かと考えました。
あれ? CI サーバは他のジョブも並列で走るから全部使うのはあんまりよくないのかな…?
ここらへんは運用しながら調整かと思っています。

結果

CIサーバの混み具合にもよるのですがざっくり 5分 => 3分 くらいまでテストのジョブの時間が短縮できました。
ヤッター!