🚀

Launchable Advent Calendar 22日目 - test grouping

2022/12/22に公開

Launchableの各機能の利用方法を紹介する Launchable Advent Calendar 22日目です。

はじめに

本日は launchable split-subset--split-by-groups の紹介と使い方について紹介します。(docs)
ひとつのレポジトリの中に複数のパッケージ/プロジェクトがある場合、Predictive Test Selection(PTS)を利用するとそれぞれのパッケージ/プロジェクトのテストが混ざった状態で出力されます。
そうすると対象のパッケージのテストが含まれていないにも関わらず、何が含まれるか予測できないのでテスト前にビルドをしておくなど無駄な時間がかかってしまう場合があります。

それを解消するのが、事前に指定したグループごとにPTSの結果を出力できるようにする launchable split-subset コマンドの --split-by-group オプションになります。

--split-by-groups オプション

まず事前準備として、どのようにグループ分けするかをテスト結果のレポート時に --group オプションで指定します。

Konboi/launchable-java-exampleを使って実行してみます。
ここでは AddTest, SubTestsimple グループ, MulTest, DivTestcomplex グループとします。

$ launchable record build --name try-grouping
Launchable recorded 0 commits from repository /Users/yabuki-ryosuke/src/github.com/Konboi/launchable-java-example
Launchable recorded build try-grouping to workspace konboi/advent-calendar-2022 with commits from 1 repository:

| Name   | Path   | HEAD Commit                              |
|--------|--------|------------------------------------------|
| .      | .      | 5ed0278f4d8a4b908efcecaf08bad27bc63e762b |
$ mvn test
$ launchable record tests --group simple maven target/surefire-reports/TEST-example.AddTest.xml target/surefire-reports/TEST-example.SubTest.xml
Launchable recorded tests for build try-grouping (test session 1625957) to workspace konboi/advent-calendar-2022 from 2 files:

|   Files found |   Tests found |   Tests passed |   Tests failed |   Total duration (min) |
|---------------|---------------|----------------|----------------|------------------------|
|             2 |             2 |              2 |              0 |                 0.0006 |

Visit https://app.launchableinc.com/organizations/konboi/workspaces/advent-calendar-2022/test-sessions/1625957 to view uploaded test results (or run `launchable inspect tests --test-session-id 1625957`)

$ launchable record tests --group complex maven target/surefire-reports/TEST-example.MulTest.xml target/surefire-reports/TEST-example.DivTest.xml
Launchable recorded tests for build try-grouping (test session 1625957) to workspace konboi/advent-calendar-2022 from 2 files:

|   Files found |   Tests found |   Tests passed |   Tests failed |   Total duration (min) |
|---------------|---------------|----------------|----------------|------------------------|
|             2 |             2 |              2 |              0 |                      0 |

Visit https://app.launchableinc.com/organizations/konboi/workspaces/advent-calendar-2022/test-sessions/1625957 to view uploaded test results (or run `launchable inspect tests --test-session-id 1625957`)

これで準備が整いました。
それでは --split-by-groups オプションを使ってみます。分かりやすいようにsubsetは --target 100% で実行します。

問題なく実行できると subset-groups.txt ファイルと subset-<GROUP NAME>.txt というファイルが作成されます。
(<GROUP NAME> には launchable record tests コマンドの --group オプションで指定したグループ名が入ります。)

$ launchable record build --name try-split-group
Launchable recorded 0 commits from repository /Users/yabuki-ryosuke/src/github.com/Konboi/launchable-java-example
Launchable recorded build try-split-group to workspace konboi/advent-calendar-2022 with commits from 1 repository:

| Name   | Path   | HEAD Commit                              |
|--------|--------|------------------------------------------|
| .      | .      | 5ed0278f4d8a4b908efcecaf08bad27bc63e762b |

$ launchable subset --split --target 100% maven src/test/java > launchable-subset-id.txt
Launchable created subset 401701 for build try-split-group (test session 1625958) in workspace konboi/advent-calendar-2022

|           |   Candidates |   Estimated duration (%) |   Estimated duration (min) |
|-----------|--------------|--------------------------|----------------------------|
| Subset    |            4 |                      100 |                       0.08 |
| Remainder |            0 |                        0 |                       0    |
|           |              |                          |                            |
| Total     |            4 |                      100 |                       0.08 |

Run `launchable inspect subset --subset-id 401701` to view full subset details

$ launchable split-subset --subset-id $(cat launchable-subset-id.txt) --split-by-groups maven
$ ls subset*
subset-complex.txt subset-groups.txt  subset-simple.txt

生成されたファイルの中身を確認してみます。

subset-groups.txt ファイルにはPTSによって選ばれたテストのグループ名が入っています。今回は simple グループと complex グループに入っているテストが選ばれたので2つのグループ名が入っています。

$ cat subset-groups.txt
complex
simple

subset-simple.txt ファイルと subset-complex.txt ファイルにはそれぞれのグループでPTSによって選ばれたテストが入っています。

$ cat subset-simple.txt
example.AddTest
example.SubTest

$ cat subset-complex.txt
example.MulTest
example.DivTest

これでPTSによって選ばれたグループ(パッケージやプロジェクト)一覧が分かるのでより効率良くテストおよびテストの事前準備ができます。

ちなみに --split-by-groups オプションは Day 15で紹介したZero Input Subsettingと組み合わせても利用できます。

さいごに

今日は launchable split-subset コマンドの --split-by-groups オプションとその使い方について紹介しました。
明日はカスタムプラグインについて紹介します。

Discussion