Join us for Firebase Summit on November 10, 2021. Tune in to learn how Firebase can help you accelerate app development, release with confidence, and scale with ease. Register

Firebase Test Lab のトリガー

Firebase Test Lab では、テスト マトリックスの完了に応じて関数をトリガーできます。 たとえば、テストが失敗した場合に、Slack チャンネルに通知したりメールを送信したりできます。

その他の使用例については、Cloud Functions で可能な処理をご覧ください。

TestMatrix の完了時に関数をトリガーする

イベント ハンドラ functions.testLab.testMatrix().onComplete() を使用して、TestMatrix が完了したときにトリガーされる新しい関数を作成します。

exports.sendEmailNotification = functions.testLab.testMatrix().onComplete((testMatrix) => {
  // ...
});

テストの状態と結果を処理する

関数が実行されるたびに TestMatrix が渡されます。これにはマトリックスの最終状態と詳細情報が含まれるため、問題の理解に役立ちます。

exports.handleTestMatrixCompletion = functions.testLab.testMatrix().onComplete(testMatrix => {
  const matrixId = testMatrix.testMatrixId;
  switch (testMatrix.state) {
    case 'FINISHED':
      console.log(`TestMatrix ${matrixId} finished with outcome: ${testMatrix.outcomeSummary}`);
      break;
    case 'INVALID':
      console.log(`TestMatrix ${matrixId} was marked as invalid: ${testMatrix.invalidMatrixDetails}`);
      break;
    default:
      console.log(`TestMatrix ${matrixId} completed with state ${testMatrix.state}`);
  }
  return null;
});

クライアントの詳細にアクセスする

テスト マトリックスはさまざまなソースやワークフローから作成される場合があります。そのため、テストのソースやその他の重要なコンテキストに基づいてさまざまなアクションを実行する関数を作成することが望ましい場合がよくあります。これを実現するため、gcloud ではテストの開始時に任意の情報を渡すことができ、後で関数内でこの情報にアクセスすることができます。例:

gcloud beta firebase test android run \
    --app=path/to/app.apk \
    --client-details testType=pr,link=https://path/to/pull-request

関数の例:

exports.notifyOnPullRequestFailure = functions.testLab.testMatrix().onComplete(testMatrix => {
  if (testMatrix.clientInfo.details['testType'] != 'pr') {
    // Not a pull request
    return null;
  }

  if (testMatrix.state == 'FINISHED' && testMatrix.outcomeSummary == 'SUCCESS') {
    // No failure
    return null;
  }

  const link = testMatrix.clientInfo.details['link'];
  let message = `Test Lab validation for pull request ${link} failed. `;

  if (!!testMatrix.resultStorage.resultsUrl) {
    message += `Test results available at ${testMatrix.resultStorage.resultsUrl}. `;
  }

  // Send notification here ...
});