【问题标题】:How can I test two different test groups concurrently?如何同时测试两个不同的测试组?
【发布时间】:2019-08-12 11:40:36
【问题描述】:

我正在尝试同时运行我的测试,但包含登录的测试除外。

我尝试将测试分为两组(登录和未登录)。这两组并行运行。没有登录的测试彼此同时运行,但登录的测试一个接一个地运行。问题是 runner 只运行没有登录两次的测试。我在https://github.com/DevExpress/testcafe/issues/116 中看到了 .serial 功能讨论,我认为这在这种情况下会有很大帮助。

const createTestCafe = require('testcafe');
const config = require('./config');
const testArrayBuilder = require('./Tests/helpers/testArrayBuilder');
let testSteps = require('./Tests/helpers/testSteps');

let testcafe;

const store = process['argv'][2],
      name = process['argv'][3],
      env = process['argv'][4];

const testsFile = require(`./Tests/${store}/tests.json`);
const output = 'logs/test-results-' + store + '-' + env + '-' + name + '.json';

createTestCafe('localhost', 0)
    .then(tc => {
        testcafe = tc;

        const tests = getTests();

        const runner = testcafe.createRunner();

        if (name !== 'all') {
            runner.filter(testName => {
                return testName === name;
            });
        }

        runner.reporter(['spec', {
            name: 'json-custom',
            output: output
        }]);

        return Promise.all(tests.map(obj => {
            if(obj.login === true) {
                //Don't change number value for this one,
                //because login tests won't run properly.
                return runTests(runner, obj.tests, 1);
            } else{
                return runTests(runner, obj.tests, 1);
            }
        }));
    })
    .then(() => {
        testSteps.mergeWithReporter(output);
        testcafe.close();
    });

const runTests = (runner, tests, windows) => {
    return runner
        .src(tests)
        .browsers(config.browsers)
        .concurrency(windows)
        .screenshots('logs/screenshots/', true)
        .run({
            skipJsErrors: true,
            quarantineMode: true,
            selectorTimeout: 20000,
            assertionTimeout: 20000,
            pageLoadTimeout: 20000,
            speed: 0.5,
            stopOnFirstFail: false
        });
}

const getTests = () => {
    const testsWithoutLogin = testArrayBuilder(testsFile[env], false);

    switch (store) {
        case 'shop1': 
            const testsWithLogin = testArrayBuilder(testsFile[env], true);
            return [{login: true ,tests: testsWithLogin}, {login: false, tests: testsWithoutLogin}];

        case 'shop2': 
            return [{login: false ,tests: testsWithoutLogin}];
    }
}

请注意,如果我在 runTests() 中编写 createRunner() 部分,reporter 将被覆盖。

【问题讨论】:

    标签: testing automated-tests e2e-testing testcafe web-testing


    【解决方案1】:

    我认为这里的问题是您在Promise.race 函数中使用相同的运行器进行并行测试执行。我建议您为两个测试集使用不同的运行器。

    【讨论】:

    • 所以我应该创建不同的跑步者,然后合并他们的记者?因为我需要将测试信息存储在一个记者中,我认为有办法避免这种情况。
    • 当然,我不详细了解你的任务,但我认为最好为每个跑步者单独报告,然后将它们合并。如果您不想合并它们,可以使用以下命令将控制台输出重定向到文件:node index.js > report.txt。但是,在这种情况下,您的报告将被两个跑步者的输出混合在一起。请参阅要点以了解我的意思gist.github.com/AlexKamaev/a7e9f320a6e8b902f598554f26bd17b7
    • 感谢您的帮助。我最终将两个自定义报告合并在一起。
    猜你喜欢
    • 1970-01-01
    • 2018-05-05
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多