Activadores de Firebase Test Lab

Puedes activar una función en respuesta a la finalización de una matriz de pruebas en Firebase Test Lab. Por ejemplo, puedes notificar a un canal de Slack o enviar un correo electrónico si falla una prueba.

Para ver más ejemplos de casos prácticos, consulta ¿Qué puedo hacer con Cloud Functions?

Activa una función cuando finalice TestMatrix

Crea una función nueva que se active cuando una TestMatrix se complete con el controlador de eventos functions.testLab.testMatrix().onComplete():

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

Maneja estados y resultados de prueba

Cada ejecución de tu función recibe una TestMatrix que incluye el estado final de la matriz y detalles para ayudar a comprender los 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;
});

Accede a los detalles del cliente

Las matrices de pruebas se pueden crear a partir de diferentes fuentes o flujos de trabajo. Por lo tanto, a menudo se recomienda crear funciones que realicen acciones distintas basadas en la fuente o en otro contexto importante de la prueba. Para ayudarte con esto, cuando inicies una prueba, gcloud te permitirá pasar información arbitraria a la que puedas acceder más adelante en la función. Por ejemplo:

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

Función de ejemplo:

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