Déclencheurs Firebase Test Lab

Vous pouvez déclencher une fonction en réponse à l'achèvement d'une matrice de test dans Firebase Test Lab. Par exemple, vous pouvez notifier une chaîne Slack ou envoyer un e-mail en cas d'échec d'un test.

Pour les cas plus d'utilisation exemple, voir Que puis - je faire avec les fonctions Cloud? .

Déclencher une fonction à la fin de TestMatrix

Créer une nouvelle fonction qui se déclenche lorsqu'un finalise de 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 est passée une TestMatrix qui comprend l'état final de la matrice et les 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 détails du client

Les matrices de test peuvent être créées à partir de différentes sources ou workflows. 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 aider à cela, gcloud permet de transmettre des informations arbitraires lors du démarrage d' un test qui peut être consulté plus tard dans votre fonction. Par 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 ...
});