Étendre Firebase Test Lab avec Cloud Functions


Déclencher une fonction à la fin de TestMatrix

Créez une fonction qui se déclenche à la fin d'une évaluation TestMatrix avec le gestionnaire d'événements functions.testLab.testMatrix().onComplete() :

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

Gérer les états et les résultats des tests

Chaque exécution de votre fonction reçoit une TestMatrix qui inclut l'état final de la matrice et des détails pour aider à comprendre les problèmes.

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

Accéder aux informations sur le client

Les matrices de test peuvent être créées à partir de différentes sources ou flux de travail. Il est donc souvent souhaitable de créer des fonctions qui effectuent différentes actions en fonction de la source ou d'un autre contexte important du test. Pour vous aider, gcloud vous permet de transmettre des informations arbitraires au démarrage d'un test, auxquelles vous pourrez accéder plus tard dans votre fonction. Exemple :

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

Exemple de fonction :

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