如何按特定顺序运行Nightwatch测试?

时间:2015-09-21 20:26:54

标签: javascript selenium automated-tests qa nightwatch.js

我有几个测试UI的测试,也可以用来创建数据。

一组单独的测试依赖于这些数据,这意味着它们必须在第一组运行后才能运行。

我知道运行一组它们,或者使用标签运行它们,但我如何按特定顺序运行它们?

3 个答案:

答案 0 :(得分:10)

Nightwatch将按顺序在特定文件中运行每个测试,因此一个(天真)解决方案是按照您希望它们运行的​​顺序将每个测试放在同一个文件中。

如果您对单个文件进行了太多测试,这将变得难以处理。为了解决这个问题,您可以利用Nightwatch按字母顺序运行每个测试文件。一种方法是在每个测试文件前面加上一个数字,表示您希望它们运行的​​顺序。例如,如果您有两个测试文件,ifbefore.js,那么希望after.js首先运行,您只需将文件名更改为before.js01before.js即可。这将使Nightwatch按您想要的顺序读取文件。

答案 1 :(得分:1)

这不是一个很好的答案,但它确实有效:对测试文件进行数字排序。

0001_first_test_I_want_to_run.js
0002_second_test_I_want_to_run.js
...
9999_last_test_I-want_to_run.js

答案 2 :(得分:0)

为了控制顺序(以及使用通用模块进行身份验证),我使用了一个“主”测试模块并按照我想要的顺序导入了测试:

在 main.test.js 中

// import test modules
const first = require('./first.test.js');
const second = require('./second.test.js');
module.exports = {
    before(){
         // login, etc.
    },
    'first': (browser) => {
         first.run(browser);
    },
    'second': (browser) => {
         second.run(browser);
    },
}

在 first.test.js

var tests = {
    'google': (browser) => {
        browser.url('https://google.com';
    },
    'cnn': (browser) => {
        browser.url('https://cnn.com';
    }
};

module.exports = {
    // allow nightwatch to run test module only inside _main
    '@disabled': true,
    'run': (browser) => {
        // call all functions inside tests
        Object.values(tests)
            .filter(f => typeof f === 'function')
            .forEach(f => f(browser));
    }
};