🚀

Launchable Advent Calendar 13日目 - flavor

2022/12/13に公開

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

はじめに

今日は Day 12で紹介した launchable record session コマンドのオプションである --flavor オプションとその使い方について紹介します。(docs)

flavorは同じコード複数の環境でテストを実行している。そんなテスト環境をサポートするためのオプションになります。
このオプションを使って環境毎にテストセッションを発行し launchable record tests, launchable subset コマンドを実行する事で環境毎に適切なテストをPredictive Test Selection(PTS)で選択できるようになります。

Linux環境とWindows環境2つの環境でテストを行なっている場合。ChromeやFirefox、Edge複数のブラウザ環境でE2Eテストを行なっている場合。プログラミング言語のバージョン毎にテストを実行している場合。などが例として挙げられます。

flavorオプション

それでは --flavor オプションの使い方を説明します。
--flavor オプションは Key=Value 形式で指定し、複数の値を設定する事が出来ます。テストを行なっている環境に合わせて必要なKey/Valueを指定して下さい。

例としてLinux環境でfirefox向けのE2Eテストをしていると仮定し、platformにLinuxをbrowserにfirefoxを指定しました。

launchable record session --flavor platform=Linux --flavor browser=firefox

launchable subset, launchable record tests コマンドはテストセッションが発行されていない場合、内部で launchable record session コマンドを実行していると紹介しました。 (参考: Day 12)
テストセッションが発行されていない場合は launchable subset, launchable record tests コマンドにも --flavor オプションが提供されているのでそちらから設定することも可能です。

ただし、既にテストセッションが発行されている場合は --flavor オプションで値を設定しても無視されますので注意点して下さい。

GitHub Actionsでの例

例としてDay 12の設定を元に複数のJavaバージョンでテストを実行するよう変更します。

ci.yaml
  jobs:
   primary-node:
     runs-on: ubuntu-latest
-    outputs:
-      test_session:  ${{ steps.issue_test_session.outputs.test_session}}
     steps:
       - uses: actions/checkout@v3
         with:
...
         run: launchable verify
       - name: record build
         run: launchable record build --name ${GITHUB_RUN_ID}
-      - name: record session
-        id: issue_test_session
-        run: |
-          launchable record session --build ${GITHUB_RUN_ID} > test_session.txt
-          test_session=$(cat test_session.txt)
-          echo "test_session=$test_session" >> $GITHUB_OUTPUT
   worker-node:
     runs-on: ubuntu-latest
     needs: [primary-node]
+    strategy:
+      matrix:
+        java-version: ['8', '11', '17']
     steps:
       - uses: actions/checkout@v3
       - uses: actions/setup-python@v4
         with:
           python-version: "3.10"
-      - name: Set up JDK 1.8
+      - name: Set up JDK
         uses: actions/setup-java@v3
         with:
           distribution: 'adopt'
-          java-version: '8'
+          java-version: ${{ matrix.java-version }}
       - name: Install launchable command
         run: |
           pip install launchable
-      - name: Restore test session
-        run: echo -n '${{needs.primary-node.outputs.test_session}}' > test_session.txt
+      - name: record session
+        id: issue_test_session
+        run: launchable record session --build ${GITHUB_RUN_ID} --flavor java-version=${{ matrix.java-version }} > test_session.txt
       - name: subset
         run: launchable subset --session $(cat test_session.txt) --target 80% maven src/test/java > launchable-subset.txt
       - name: Run tests

サンプルPR

修正に問題が無ければ、このようにJavaのバージョン8,11,17でテストが実行されます。

Web Appからもテストセッションに指定したflavorを確認できます。

さいごに

本日は --flavor オプションと使い方について説明しました。
明日は launchable subset コマンドの --ignore-new-tests オプションについて紹介します。

Discussion