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 测试实验室触发器

您可以触发一个函数,以响应 Firebase 测试实验室中完成测试矩阵的操作。 例如,如果测试失败,您可以通知 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 ...
});