Memperluas Firebase Test Lab dengan Cloud Functions


Memicu fungsi pada saat 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

TestMatrix yang berisi status akhir matriks dan detail akan diteruskan ke setiap eksekusi fungsi Anda 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 melakukan tugas ini, gcloud memungkinkan Anda meneruskan 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 ...
});