Pemicu Firebase Test Lab

Anda dapat memicu fungsi sebagai respons terhadap penyelesaian matriks uji di Firebase Test Lab. Misalnya, Anda dapat memberi tahu saluran Slack atau mengirim email jika pengujian gagal.

Untuk mengetahui contoh penggunaan lainnya, baca artikel Apa yang dapat saya lakukan dengan Cloud Function?.

Memicu fungsi pada penyelesaian TestMatrix

Buat fungsi baru yang akan dipicu saat TestMatrix selesai dengan pengendali peristiwa functions.testLab.testMatrix().onComplete():

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

Menangani status dan hasil pengujian

Setiap eksekusi fungsi Anda meneruskan TestMatrix yang menyertakan status akhir dan detail matriks untuk membantu memahami masalah.

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

Mengakses detail klien

Matriks uji dapat dibuat dari berbagai sumber atau alur kerja. Oleh sebab itu, sebaiknya Anda membuat fungsi yang dapat melakukan berbagai tindakan berdasarkan sumber atau konteks penting pengujian. Untuk membantu hal ini, gcloud memungkinkan Anda untuk menyampaikan informasi arbitrer saat memulai pengujian yang dapat diakses nanti di fungsi Anda. Contoh:

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

Contoh fungsi:

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