Extiende Firebase Test Lab con Cloud Functions


Activa una función cuando finalice una matriz de pruebas

Crea una función nueva que se active cuando una matriz de prueba 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 ...
});