Жасмин получить текущий результат теста - PullRequest
0 голосов
/ 08 февраля 2019

Я использую Jasmine - 3.3.1, с комбинацией ProtractorJS.

Мое требование - сохранять результаты для каждой спецификации (или описывать / тестировать) и обновлять результаты в системе Testrail с помощью afterEach ().метод.Я хочу сохранить результаты в переменной "testResult".

Пробовал различными методами - custom_reports.js и т. Д., Но не смог получить то, что мне было нужно.

Фрагмент кода:

var testResult;

describe('1st scenario', function () { 
    it('1st Test', function () {
        expect(true).toBe(true);
        testResult=5;
    }); 
 });

describe('2nd scenario', function () { 
    it('2nd Test', function () {
        expect(true).toBe(true);
        testResult=1;
    }); 
 });


afterEach(function () {
    helper.updateResults("Section Name", testcaseID, testResult);
});

1 Ответ

0 голосов
/ 08 февраля 2019

Я добился чего-то похожего, создав собственный репортер.Мой репортер загружает результаты спецификаций (он блокирует) в таблицу 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`);
}

Никаких изменений не требуется в ваших спецификациях

Ограничения

  1. У меня было много проблем с обработкой асинхронных действий с репортером,Именно поэтому я решил использовать подход очереди.Я не мог понять, как обойти это, но этот подход работает.
  2. Ваши действия 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
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...