Cloud Functions로 Firebase Test Lab 확장


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 ...
});