Launchable Advent Calendar 22日目 - test grouping
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
, SubTest
を simple
グループ, MulTest
, DivTest
を complex
グループとします。
$ 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