Extend Firebase Test Lab with Cloud FunctionsStay organized with collectionsSave and categorize content based on your preferences.
Import the required modules
To get started, import the modules required for handlingFirebase Test Labevents:
Node.js
// The Cloud Functions for Firebase SDK to set up triggers and logging.const{onTestMatrixCompleted}=require("firebase-functions/testLab");const{logger}=require("firebase-functions");
# The Cloud Functions for Firebase SDK to set up triggers and logging.fromfirebase_functionsimporttest_lab_fn,params# The requests library to send web requests to Slack.importrequests
To trigger aFirebase Test Labfunction, define a handler
for the test matrix completion event. In this example, the function
triggers on test completion, retrieves the test matrix data from
the CloudEvent object, and sends
the corresponding test results to a Slack channel:
Node.js
exports.posttestresultstoslack=onTestMatrixCompleted({secrets:["SLACK_WEBHOOK_URL"]},async(event)=>{// Obtain Test Matrix properties from the CloudEventconst{testMatrixId,state,outcomeSummary}=event.data;// Create the title of the messageconsttitle=`${getSlackmoji(state)}${getSlackmoji(outcomeSummary,)}${testMatrixId}`;// Create the details of the messageconstdetails=`Status: *${state}*${getSlackmoji(state,)}\nOutcome: *${outcomeSummary}*${getSlackmoji(outcomeSummary)}`;// Post the message to slackconstslackResponse=awaitpostToSlack(title,details);// Log the responselogger.log(slackResponse);});
@test_lab_fn.on_test_matrix_completed(secrets=["SLACK_WEBHOOK_URL"])defposttestresultstoslack(event:test_lab_fn.CloudEvent[test_lab_fn.TestMatrixCompletedData])->None:"""Posts a test matrix result to Slack."""# Obtain Test Matrix properties from the CloudEventtest_matrix_id=event.data.test_matrix_idstate=event.data.stateoutcome_summary=event.data.outcome_summary# Create the title of the messagetitle=f"{slackmoji(state)}{slackmoji(outcome_summary)}{test_matrix_id}"# Create the details of the messagedetails=(f"Status: *{state}*{slackmoji(state)}\n"f"Outcome: *{outcome_summary}*{slackmoji(outcome_summary)}")# Post the message to Slackresponse=post_to_slack(title,details)# Log the responseprint(response.status_code,response.text)
Test matrices may be created from different sources or workflows. It is
therefore often desirable to create functions that perform different actions
based on the source or other important context of the test. To help with this,gcloudallows you to pass arbitrary information when starting a test that can
be accessed later in your function. For example:
gcloud beta firebase test android run \
--app=path/to/app.apk \
--client-details testType=pr,link=<path/to/pull-request>
And then to access the information in your function:
[[["Easy to understand","easyToUnderstand","thumb-up"],["Solved my problem","solvedMyProblem","thumb-up"],["Other","otherUp","thumb-up"]],[["Missing the information I need","missingTheInformationINeed","thumb-down"],["Too complicated / too many steps","tooComplicatedTooManySteps","thumb-down"],["Out of date","outOfDate","thumb-down"],["Samples / code issue","samplesCodeIssue","thumb-down"],["Other","otherDown","thumb-down"]],["Last updated 2025-10-30 UTC."],[],[]]