Skip to main content

テストシャーディング

概要

Bitriseは、プロジェクトの種類や、Bitriseにシャーディング最適化計算を提供してほしいかどうかによって、すぐに使用できる使いやすいテストシャーディング最適化機能を提供します。

テストシャーディングとは、大量の自動テストを小さな断片 (シャード) に分割し、異なるランナーで並行して実行できるようにするプロセスです。これにより、開発者に変更に関するフィードバックを提供するのにかかる時間が大幅に短縮され、開発者は集中力を維持して迅速に反復できるようになります

Bitriseは、プロジェクトの種類や、Bitriseにシャーディング最適化の計算を任せたいかどうかに応じて、すぐに使用できる使いやすいテストシャーディング最適化機能を提供しています。

表1 Bitriseへのテストシャーディングの実装

プロジェクトタイプ

独自のシャード最適化計算によるシャーディング

Bitriseが提供するシャード最適化計算によるシャーディング

iOS

並列処理

並列処理+ Xcodeテストシャード計算ステップ

アンドロイド

並列処理

並列処理+グラドルランナーステップ


独自のテスト分割計算によるシャーディング

シャーディングに最適なテストスプリットを計算する手段がすでにある場合は、以下を使用してテストシャーディングを設定できます。 並列処理 パイプラインの機能。

Parellelismは同じワークフローを別々の仮想マシンで並行して実行します。必要なコピー数は、以下を設定して手動で設定します parallel ワークフローのプロパティ:

...
workflows:
  test-without-building:
    depends_on: [build-for-testing]
    parallel: 5
...

各コピーには、次の 2 つの新しい環境変数が割り当てられます。

  • $BITRISE_IO_PARALLEL_INDEX: ワークフローの各コピーの 0 から始まるインデックス。

  • $BITRISE_IO_PARALLEL_TOTAL: コピーの合計数。

これらの環境変数を活用してテストシャーディングを実行できます。たとえば、Jest

jest --shard=$((BITRISE_IO_PARALLEL_INDEX + 1))/$BITRISE_IO_PARALLEL_TOTAL

または糸を使って:

yarn test --ci --silent --shard=$((BITRISE_IO_PARALLEL_INDEX + 1))/$BITRISE_IO_PARALLEL_TOTAL

並列処理の設定方法の詳細については、以下のガイドをご覧ください。 パイプラインの並列処理

テストスプリットを計算するBitriseステップによるシャーディング

Bitriseが提供する最適化アルゴリズムに基づいてテストを自動的にシャードするパイプラインを作成できます。これは iOS プロジェクトと Android プロジェクトの両方でサポートされています

次のことを行う必要があります。

  • アプリのビルドとテストの両方を行うパイプラインを作成します。

  • シャード計算を実行するステップを、アプリを構築するワークフローに追加します。 Xcode テストシャード計算 iOS プロジェクトのステップと グラドルランナー Android プロジェクト用のステップ。

  • テストワークフローの複数のコピーが並行して実行されるように並列処理を設定します。

iOS

アンドロイド

共有テストバンドル

この例では、アプリを一度ビルドし、共有テストバンドルを使用してテストワークフローでテストを実行するという設定があることを前提としています。の使用をお勧めします Xcode テスト (ビルドなし) テストを実行する手順。このような設定には、以下のワークフローレシピが参考になります。 (iOS) 複数のシミュレータでテストを並行して実行する

iOS の場合は、 Xcode テストシャード計算 テストを指定された数のシャードに分割する手順は、 Bitrise.io にデプロイしてください シャーディングの結果をパイプラインの他のワークフローと共有し、並列処理を設定する手順:

  1. 作成 環境変数 これには必要な数のシャードが含まれます。例えば、 NUMBER_OF_SHARDS

  2. を追加 Xcode テストシャード計算 Xcode アプリを構築するワークフローにステップアップします。

  3. ステップをクリックしてオプションメニューを開き、 [構成] タブ。

  4. の中に プロダクトパス 入力、新しい環境変数を追加します。

    shard-calculate-product-path.png
  5. を追加 Bitrise.io にデプロイしてください 同じワークフローにステップアップ。

  6. 見つけて パイプライン:中間ファイル共有 入力グループ。

  7. の中に パイプラインステージ間で共有するファイル 入力して、2 つの環境変数を追加します。

    • BITRISE_TEST_SHARDS_PATH

    • BITRISE_TEST_BUNDLE_PATH

    これらは自動的に生成された出力変数です。

    shards-deploy-to-bitrise.png
  8. [開く] パイプライン パイプラインで、テストを実行するワークフローを見つけ、歯車アイコンをクリックしてワークフローの編集メニューを開きます。

  9. [構成] タブを開き、 パイプライン条件 セクション。

  10. を追加 NUMBER_OF_SHARDS への環境変数 パラレルコピー 入力。

    shards-pipeline.png

    並列処理の設定方法の詳細については、以下を参照してください。 並列処理の設定

Android の場合、Gradle ではシャーディング計算をそのまま使用できます。これは以下と連携して機能します。 並列処理

  1. パイプラインを開き、 パイプラインの状態 セクションで、必要なシャードの数を追加してください パラレルコピー 入力。

    並列処理の設定方法の詳細については、以下を参照してください。 並列処理の設定

  2. を追加 グラドルランナー ワークフローへのステップ。

  3. ステップオプションを開き、 [構成] タブ。

  4. の中に コンフィグ 入力グループ、検索 実行する Gradle タスク 次のタスクを入力して追加します。

    connectedAndroidTest \
      -Pandroid.testInstrumentationRunnerArguments.numShards=$BITRISE_IO_PARALLEL_TOTAL \
      -Pandroid.testInstrumentationRunnerArguments.shardIndex=$BITRISE_IO_PARALLEL_INDEX

    ザル $BITRISE_IO_PARALLEL_TOTAL$BITRISE_IO_PARALLEL_INDEX 環境変数は、各シャードに適用するテストを Gradle に指示します。

    gradle-runner.png