Étendre Firebase Test Lab avec Cloud Functions


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")