Я добился чего-то похожего, создав собственный репортер.Мой репортер загружает результаты спецификаций (он блокирует) в таблицу DynamoDB после завершения каждой спецификации и загружает результаты набора (описывают блоки) после завершения всех тестов.Все загрузки происходят асинхронно, но в onComplete все асинхронные действия загрузки ожидаются.
Очевидно, что я использую подход async / await, в отличие от SELENIUM_PROMISE_MANAGER, который вы видите.Я бы рекомендовал сделать это изменение.
DBReporter.js
function dbReporter() {
this.jasmineStarted = function (options) {};
this.specStarted = function (result) {};
this.specDone = async function (result) {
if (result.status == 'pending') {
}
else if (result.status == 'passed') {
}
else if (result.status == 'failed') {
//Put your testrail interaction code here
}
testResultsUploadQueue.push(result);
};
this.suiteStarted = function (result) {};
this.suiteDone = function (result) {}
this.jasmineDone = async function (result) {}
}
module.exports = dbReporter;
conf.js
onPrepare: async () => {
//require the dpReporter file
let dbReporter = require('../src/functions/db-reporter');
//Declare a global variable that will contain all the asynchronous upload actions (promises)
global.testResultsUploadQueue = [];
//initialize the dbreporer
await jasmine.getEnv().addReporter(new dbReporter());
}),
onComplete: async() => {
//Wait for all uploads to resolve before completing
let testRulesUploadValue = await Promise.all(testResultsUploadQueue);
console.log(` ${testRulesUploadValue.length} result files uploaded to dynamoDB`);
}
Никаких изменений не требуется в ваших спецификациях
Ограничения
- У меня было много проблем с обработкой асинхронных действий с репортером,Именно поэтому я решил использовать подход очереди.Я не мог понять, как обойти это, но этот подход работает.
- Ваши действия TestRail должны возвращать обещание
Важно понимать порядок выполнения ловушек вчтобы понять решение.
--- beforeLaunch
--- onPrepare
--- jasmineStarted (set in jasmine reporter)
--- beforeAll
--- suiteStarted (set in jasmine reporter)
--- specStarted (set in jasmine reporter)
--- beforeEach
+++ afterEach
+++ specDone (set in jasmine reporter)
+++ suiteDone (set in jasmine reporter)
+++ afterAll
+++ jasmineDone (set in jasmine reporter)
+++ onComplete
+++ afterLaunch