Catch up on everthing we announced at this year's Firebase Summit. Learn more

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