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 или отправить электронное письмо, если тест не прошел.

Для более случаев примера использования см Что я могу сделать с облачными функциями? .

Запускать функцию по завершении TestMatrix

Создать новую функцию , которая вызывается когда TestMatrix завершается с обработчика событий functions.testLab.testMatrix().onComplete() :

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