【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分 くらいまでテストのジョブの時間が短縮できました。
ヤッター!