Importer les modules requis
Pour commencer, importez les modules requis pour gérer les événements Firebase Test Lab:
Node.js
// The Cloud Functions for Firebase SDK to set up triggers and logging.
const {onTestMatrixCompleted} = require("firebase-functions/v2/testLab");
const {logger} = require("firebase-functions");
Python
# The Cloud Functions for Firebase SDK to set up triggers and logging.
from firebase_functions import test_lab_fn, params
# The requests library to send web requests to Slack.
import requests
Déclencher une fonction à la fin de TestMatrix
Pour déclencher une fonction Firebase Test Lab, définissez un gestionnaire pour l'événement de fin de la matrice de test. Dans cet exemple, la fonction se déclenche à la fin du test, récupère les données de la matrice de test à partir de l'objet CloudEvent et envoie les résultats de test correspondants à un canal Slack:
Node.js
exports.posttestresultstoslack = onTestMatrixCompleted(
{secrets: ["SLACK_WEBHOOK_URL"]},
async (event) => {
// Obtain Test Matrix properties from the CloudEvent
const {testMatrixId, state, outcomeSummary} = event.data;
// Create the title of the message
const title = `${getSlackmoji(state)} ${getSlackmoji(
outcomeSummary,
)} ${testMatrixId}`;
// Create the details of the message
const details = `Status: *${state}* ${getSlackmoji(
state,
)}\nOutcome: *${outcomeSummary}* ${getSlackmoji(outcomeSummary)}
`;
// Post the message to slack
const slackResponse = await postToSlack(title, details);
// Log the response
logger.log(slackResponse);
});
Python
@test_lab_fn.on_test_matrix_completed(secrets=["SLACK_WEBHOOK_URL"])
def posttestresultstoslack(
event: test_lab_fn.CloudEvent[test_lab_fn.TestMatrixCompletedData]) -> None:
"""Posts a test matrix result to Slack."""
# Obtain Test Matrix properties from the CloudEvent
test_matrix_id = event.data.test_matrix_id
state = event.data.state
outcome_summary = event.data.outcome_summary
# Create the title of the message
title = f"{slackmoji(state)} {slackmoji(outcome_summary)} {test_matrix_id}"
# Create the details of the message
details = (f"Status: *{state}* {slackmoji(state)}\n"
f"Outcome: *{outcome_summary}* {slackmoji(outcome_summary)}")
# Post the message to Slack
response = post_to_slack(title, details)
# Log the response
print(response.status_code, response.text)
Accéder aux informations sur le client
Les matrices de test peuvent être créées à partir de différentes sources ou de différents 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 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=<path/to/pull-request>
Pour accéder aux informations de votre fonction:
Node.js
const testType = event.data.clientInfo.details.testType;
const link = event.data.clientInfo.details.link;
Python
test_type: str | None = event.data.client_info.details.get("testType")
link: str | None = event.data.client_info.details.get("link")