运行代码,例如登录,具体取决于执行哪个测试套件

时间:2018-10-31 15:16:31

标签: javascript selenium-webdriver

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可以在每个套件之前运行,并且我可以通过某种方式来访问要执行的套件的名称,因此我可以修改例如登录参数

我该如何实现?

1 个答案:

答案 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()
    }
}