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

Gatilhos do Firebase Test Lab

É possível acionar uma função em resposta à conclusão de uma matriz de teste no Firebase Test Lab. Por exemplo, você pode notificar um canal do Slack ou enviar um e-mail se um teste falhar.

Para ver mais exemplos de casos de uso, consulte O que posso fazer com o Cloud Functions?.

Acionar uma função na conclusão de TestMatrix

Crie uma nova função que será acionada quando um TestMatrix for concluído com o manipulador de eventos functions.testLab.testMatrix().onComplete():

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

Processar estados e resultados do teste

Cada execução da sua função passa por um TestMatrix que inclui o estado final da matriz e detalhes para ajudar a entender os problemas.

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

Acessar detalhes do cliente

As matrizes de teste podem ser criadas de diferentes origens ou fluxos de trabalho. Portanto, é sempre recomendável criar funções que executem diferentes ações com base na fonte ou em outro contexto importante do teste. Para ajudar com isso, o gcloud permite que você transmita informações arbitrárias ao iniciar um teste que podem ser acessadas posteriormente na sua função. Exemplo:

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

Exemplo de função:

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