test runnerとは?
test runnerは、テストを見つけ、実行し、どれが合格しどれが失敗したかをレポートするツールです。
テストを書くのは仕事の半分にすぎません。何かがそれを実行しなければなりません。test runnerがその何かです。テストファイルを発見し、各テストのセットアップとティアダウンを行い、それらを(しばしば並列で)実行し、アサーションを収集し、レポートを生成します。Pytest、Jest、Vitest、Go testはすべてtest runnerです。
test runnerがすること
- 名前やパターンでテストファイルを発見する。
- 各テストの前後でセットアップとティアダウンを実行する。
- テストを、しばしば並列で実行する。
- 結果を収集し、合否のレポートを出力する。
- CIが消費できる機械可読な出力を生成する。
runnerとframeworkとアサーションライブラリ
これらは重なり合い、用語も曖昧です。test frameworkはテストを書くための構造(describe、it)を提供し、アサーションライブラリはチェック(expect)を提供し、runnerがそれらを実行します。多くのツールは三つをまとめていますが、混ぜ合わせられるものもあります。
簡単な例
runnerを起動するとスイートを発見して実行し、その後、結果とCIが対応できる終了コードを出力します。
A test runner in action
$ npx vitest run
PASS src/cart.test.ts (12 tests)
FAIL src/checkout.test.ts (1 failed)終了コードとレポート
runnerは終了コードで成否を示します。合格はゼロ、失敗は非ゼロで、これがCIが続行すべきか判断する方法です。ほとんどのrunnerは、CIがテストごとの結果を表示するために使うJUnit XMLのような構造化レポートも生成できます。
CIにおけるtest runner
CIではrunnerはローカルと同じように起動されますが、その終了コードがパイプラインのゲートになり、レポートがダッシュボードを支えます。shardingと並列workerをサポートするrunnerは、大きなスイートを高速runnerに広げられます。その組み合わせがCIのフィードバックを高速に保ちます。
重要なポイント
- test runnerはテストを発見し、実行し、レポートします。
- その終了コードがCIパイプラインのゲートになり、レポートがダッシュボードを支えます。
- 並列とshardingのサポートにより、高速runnerをまたいでスケールできます。
関連ガイド
What Is a Test Report?Test reports explained: the structured summary of a test run, what they contain, common formats, an example,…
What Is a JUnit XML Report?JUnit XML reports explained: the de facto test-result format CI tools understand, its structure, why it is fr…
What Is Test Parallelization?Test parallelization explained: running tests concurrently to cut wall-clock time, the isolation requirement,…
What Is a Test Harness?Test harnesses explained: the supporting setup that lets tests run, its parts, how it differs from a test run…