我正在使用量角器+茉莉花。
我有一个奇怪的问题。 我有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);
});
}
};
答案 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挂钩有关。 here和here上有完整的讨论,但基本上(令人惊讶),您的测试文件中未在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
});
})