Транспортир - Test Suites - Не работает в последовательности - PullRequest
0 голосов
/ 25 февраля 2019

Я использую транспортир + жасмин.

У меня странная проблема.У меня есть 2 набора тестов (или Spec.js).Я хочу запускать их один за другим (строго).Однако транспортир запускает Spec1, связанный с BeforeAll ().И быстро перейти к Spec2, связанной с BeforeAll ().

В Spec1 есть одна функция входа в систему, а иногда вход в систему занимает 40 секунд.Это причина?

И, после входа в систему из Spec1, транспортир переходит в Spec2 и начинает выполнять «BeforeAll».А позже возвращается к «описанию», связанному со Spec1.

Пожалуйста, имейте в виду эти большие файлы, так как они имеют решающее значение для отладки.

Если я запускаю эти две спецификации по отдельности, т.е.не в последовательности, все было хорошо.

Spec1.js

beforeAll(function () { 
    originalTimeout = jasmine.DEFAULT_TIMEOUT_INTERVAL;
    jasmine.DEFAULT_TIMEOUT_INTERVAL = globalconstants.wait10Mints;
    browser.waitForAngularEnabled(false);
    browser.get(env.appUrl);
    browser.getTitle().then(function (title) {
        expect(title, "Browser title is not the expected. But " + browser.getTitle()).toBe("Valueone");
    });
    browser.waitForAngularEnabled(true);
    loginPage.login();

    commonPage.navigateToUsers();
    usersPage.deleteUsers(name); 
});

describe('Create Users', function () {
it("Create user", function () {
something 
});

it("Create user", function () {
something 
});
});

Spec2.js

beforeAll(function () { 
    originalTimeout = jasmine.DEFAULT_TIMEOUT_INTERVAL;
    jasmine.DEFAULT_TIMEOUT_INTERVAL = globalconstants.wait10Mints;
    browser.waitForAngularEnabled(false);
    browser.get(env.appUrl);
    browser.getTitle().then(function (title) {
        expect(title, "Browser title is not the expected. But " + browser.getTitle()).toBe("Valueone");
    });
    browser.waitForAngularEnabled(true);
    loginPage.login();

    commonPage.navigateToAccounts();
    accountsPage.deleteAccounts(number); 
});

describe('Create Accounts', function () {
it("Create Savings", function () {
something 
});

it("Create current account", function () {
something 
});

});

Conf.js

var env = require('./Utils/env.js');
var HTMLReport = require('protractor-html-reporter-2');
var JasmineReporters = require('jasmine-reporters');

exports.config =
    {

        baseUrl: 'http://localhost:9999',
        directConnect: true,
        framework: 'jasmine2',

        suites: {
            1sp: './mysuites/1Spec.js',
            2sp: './mySuites/2Spec.js',
        },

        capabilities: {
            'browserName': env.browserName,
            'platform': env.osName,

            //Closes any existing browsers
              'shardTestFiles': false,
              'maxInstances': 1
        },

        params: {
            tempVar: false
        },

        onPrepare: async () => {
            global.result = false;

            var fs = require('fs-extra');
            fs.emptyDir('./Reports/Screenshots/', function (err) {
                console.log(err);
            });
            jasmine.getEnv().addReporter({
                specDone: function (result) {
                    if (result.status == 'failed') {
                        browser.getCapabilities().then(function (caps) {
                            browser.takeScreenshot().then(function (png) {
                                var stream = fs.createWriteStream('./Reports/Screenshots/' + env.browserName + '-' + result.fullName + '.png');
                                stream.write(new Buffer(png, 'base64'));
                                stream.end();
                            });
                        });
                    }
                }
            });

            var width = 1600;
            var height = 1200;
            browser.driver.manage().window().setSize(width, height);

            //Html reporter
            jasmine.getEnv().addReporter(new JasmineReporters.JUnitXmlReporter({
                consolidateAll: true,
                savePath: './Reports',
                filePrefix: 'xmlresults'
            }));
        },

        onComplete: async () => {

            var capsPromise = browser.getCapabilities();
            capsPromise.then(function (caps) {
                testConfig = {
                    reportTitle: 'UI Test Execution Report',
                    outputPath: './Reports',
                    outputFilename: 'UI Test Results',
                    screenshotPath: './screenshots',
                    testBrowser: 'FireFox',
                    modifiedSuiteName: false,
                    screenshotsOnlyOnFailure: true,
                    testPlatform: env.osName
                };
                new HTMLReport().from('./Reports/xmlresults.xml', testConfig);
            });
        }
    };

Ответы [ 2 ]

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

После некоторого расследования я смог воссоздать вашу проблему, и это, похоже, связано с тем, как Жасмин обрабатывает beforeAll перехватывает.Доступно полное обсуждение здесь и здесь , но в основном (и удивительно) кажется, что все в вашем тестовом файле, не объявленном в описании, будет выполнено до ЛЮБОГО тесты выполнены, включая beforeAll hooks .Это удивляет меня, так как я почти уверен, что использовал beforeAlls снаружи, описывал раньше без проблем, но не могу проверить это прямо сейчас.

Однако, если вы объявите свой крюк beforeAll в своем описании, он будет подняти все еще выполняйте перед вашими тестами точно так же, как вы ожидаете, что он будет вести себя сейчас.

Можете ли вы попробовать переместить ваши блоки beforeAll в пределах вашего описания, как показано ниже:

Spec1.js

describe('Create Accounts', function () {
   beforeAll(function () { 
       originalTimeout = jasmine.DEFAULT_TIMEOUT_INTERVAL;
       jasmine.DEFAULT_TIMEOUT_INTERVAL = globalconstants.wait10Mints;
       browser.waitForAngularEnabled(false);
       browser.get(env.appUrl);
       browser.getTitle().then(function (title) {
           expect(title, "Browser title is not the expected. But " + browser.getTitle()).toBe("Valueone");
       });
       browser.waitForAngularEnabled(true);
       loginPage.login();

       commonPage.navigateToAccounts();
       accountsPage.deleteAccounts(number); 
   });

   it("Create Savings", function () {
       something 
   });

   it("Create current account", function () {
      something 
   });

});

Spec2.js

describe('Create Users', function () {
    beforeAll(function () {
        originalTimeout = jasmine.DEFAULT_TIMEOUT_INTERVAL;
        jasmine.DEFAULT_TIMEOUT_INTERVAL = globalconstants.wait10Mints;
        browser.waitForAngularEnabled(false);
        browser.get(env.appUrl);
        browser.getTitle().then(function (title) {
            expect(title, "Browser title is not the expected. But " + browser.getTitle()).toBe("Valueone");
        });
        browser.waitForAngularEnabled(true);
        loginPage.login();

        commonPage.navigateToUsers();
        usersPage.deleteUsers(name);
    });

    it("Create user", function () {
        something
    });

    it("Create user", function () {
        something
    });
})
0 голосов
/ 26 февраля 2019

Просто добавьте нижеследующее в ваш config.

specs: ['src/**/*spec.js'], // This should be the relative path to you spec.js

Теперь тест выполняется на основе порядка файлов в вашем пути.

Для запускаtest: protractor config.js

Suites в вашей конфигурации используется для группировки вашего теста на основе функциональности или чего-то еще.

Лучший способ решить эту проблему - переместить весь ваш тест водин файл и два describe в вашей спецификации.

структура: spec.js

`describe()`
{
beforeall() \\ Spec1.js
it()
it()
}
describe(){
beforeAll()\\spec2.js
it()
it()
}

Надеюсь, это поможет вам

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...