15分トーク

PHPUnit のカバレッジ取得を 20 倍高速化した話 PHPerKaigi 2020

宮田 淳平 miyajan
弊社のあるチームでは、CI で実行される PHPUnit のカバレッジ取得が 6 時間もかかっていました。
試行錯誤の結果、これを 18 分まで高速化することができました。

PHPUnit は、カバレッジ取得を有効にすると、有効にしていないときと比較して大幅に遅くなりがちです。
遅くなる理由の一つは、xdebug によるカバレッジ情報の取得が遅いことです。
また、別の理由として、グローバルな状態に依存したコードをテストするため、
PHPUnit の process isolation オプションを有効にして毎回プロセス起動を行ってしまうことがあります。

これを解決するために、以下の改善策を行いました。

・xdebug の代わりに pcov を使用する
・並列実行する
・process isolation オプションを無効にし、backup globals や backup static attributes を有効にする

このときの調査や改善活動で得た知見についてお話いたします。
4
phperkaigi-2019 sponsors phperkaigi-2019 potential-sponsors
仮採択 情熱加点 非採択
仮採択 他を採択済 非採択