量角器-测试套件-未按顺序运行

时间:2019-02-25 15:50:17

标签: jasmine protractor

我正在使用量角器+茉莉花。

我有一个奇怪的问题。 我有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 :(得分:1)

只需将以下内容添加到您的df1 = pd.DataFrame({'hour': ['21:51','11:07:20', '08:33:16', '09:01']}) df1['Clean_hour'] = (df1.hour.apply(lambda x: pd.to_datetime(x).strftime('%H:%M:%S')) .apply(lambda x: pd.to_datetime(x))) print(df1,df1.dtypes) hour Clean_hour 0 21:51 21:51:00 1 11:07:20 11:07:20 2 08:33:16 08:33:16 3 09:01 09:01:00 hour object Clean_hour datetime64[ns] 中即可。

config

现在,测试将根据路径中的文件顺序运行。

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

配置中的

protractor config.js用于根据功能或其他功能对测试进行分组。

解决问题的最佳方法是将所有测试移到一个文件中,并在规范中包含两个Suites

结构: spec.js

describe

希望它对您有帮助

答案 1 :(得分:1)

经过一些调查,我能够重新创建您的问题,它似乎与Jasmine如何处理beforeAll挂钩有关。 herehere上有完整的讨论,但基本上(令人惊讶),您的测试文件中未在describe中声明的任何内容似乎都将在 ANY 测试之前执行已执行,包括 beforeAll钩子。这让我感到惊讶,因为我几乎可以肯定,我之前曾用Alls进行过描述,但没有任何问题,但是现在无法验证。

但是,如果您在自己的描述中声明了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
    });
})