TL; DR:我想在取决于要运行哪个测试套件的测试套件之前运行代码,例如以特定用户身份登录。
我的wdio.conf.js
的一部分看起来像这样:
exports.config = {
specs: [
'./spec/**/*.spec.js'
],
suites: {
allExceptAandB: [
'./spec/**/!(A|B).spec.js'
],
A: [
'./spec/A.spec.js'
],
B: [
'./spec/B.spec.js'
]
},
[...]
}
使用命令行参数--suite A
运行测试时,仅运行A.spec.js
,因此符合预期(至少是我的期望)。
我现在想做的是根据实际运行的套件在实际测试之前运行一些代码,例如login(usernameA, passwordA)
或login(usernameB, passwordB)
。
如果我使用
before: function(capabilities, specs) {
login(username, password)
}
在我的wdio.conf.js
中,这部分似乎是在每个规范之前执行的,并使用
beforeSuite: function(suite) {
console.log(suite)
}
告诉我它也在每个规格之前执行,并打印
{ type: 'beforeSuite',
title: '<2nd level describe title>',
fullName: '<top level describe title> <2nd level describe title>',
file: 'pathTo/spec/some.spec.js' }
我希望
before
将在任何测试套件开始之前运行beforeSuite
可以在每个套件之前运行,并且我可以通过某种方式来访问要执行的套件的名称,因此我可以修改例如登录参数我该如何实现?
答案 0 :(得分:1)
由于缺乏其他解决方案,我在wdio.conf.js
中提出了一个“肮脏的hack”,它可以读取命令行参数,从而确定正在运行哪个套件
before: function (capabilities, suite, specs) {
let suiteNameCliParamIndex = process.argv.indexOf("--suite") + 1
let suiteName = process.argv[suiteNameCliParamIndex]
if(suiteName === 'thisSuite') {
doThisStuff()
} else {
doOtherStuff()
}
}