停止活动的Testcafe运行

我尝试将停止功能添加到Testcafe运行中。我以以下方式启动Testcafe:

let testcafe = null;
let testcafeprom = null;

    testcafeprom = createTestCafe('localhost',1337,1338)
        .then(tc => {
            testcafe     = tc;
            const runner = testcafe.createRunner();
            return runner
                .src([__basedir + '/tests/temp.js'])
                .browsers(myBrowser)
                //.browsers('browserstack:Chrome')
                .screenshots(__basedir +'/allure/screenshots/',true)
                .reporter(['uistatusreporter',{name: 'allure',output: 'test/report.json'}])
                .run();
        })
        .then(failedCount => {
            testcafe.close();
            startReportGenerator();
            capcon.stopCapture(process.stdout);
            console.log("Testcafe Ende");


            if(failedCount>0){
                res.sendStatus(400);
                console.log('Tests failed: ' + failedCount);
                //res.statusCode = 400; //BadRequest 400
                /*
                res.json({
                    success: 'failed',fails: failedCount
                });
                */
            }else{
                //res.statusCode = 200; //BadRequest 400
                res.sendStatus(200);
                console.log('All success');
                /*
                res.json({
                    success: 'ok',fails: failedCount
                });
                */
            }
        })
        .catch(error => {
            testcafe.close();
            console.log('Tests failed: Testcafe Error');
            console.log(error);
            res.sendStatus(401);

        });

然后我添加了一个函数来停止运行:

router.get('/stopit',async (req,res) => {

    testcafeprom.cancel();
    res.sendStatus(200);

});

据我了解,createTestCafe将返回一个诺言,并且为了终止诺言,我将全部呼叫testcafeprom.cancel();testcafeprom.stop();

但是浏览器正在运行。简单的testcafe.close();将停止Testcafe完成。但是我想停止它而不是击落它。

有人建议停止它吗?

更新: 我还测试了使跑步者如愿以偿的方法:


    createTestCafe('localhost',1338)
        .then(tc => {
            testcafe     = tc;
            const runner = testcafe.createRunner();
            testcafeprom =  runner
                .src([__basedir + '/tests/temp.js'])
                .browsers(myBrowser)
                //.browsers('browserstack:Chrome')
                .screenshots(__basedir +'/allure/screenshots/',output: 'test/report.json'}])
                .run();

            return testcafeprom;

        })

也添加

await testcafeprom.cancel();

结果将与testCafe.close()完全相同,这意味着一切都被击落,而没有任何响应。我很困惑。

最后我尝试了:

let runner = null;
    createTestCafe('localhost',1338,void 0,true)
        .then(testcafe => {
            runner = testcafe.createRunner();
        })
        .then(() => {
            return runner
                .src([__basedir + '/tests/temp.js'])
                .browsers(myBrowser)
                //.browsers('browserstack:Chrome')
                .screenshots(__basedir +'/allure/screenshots/',output: 'test/report.json'}])
                .run()
                .then(failedCount => {
                    //testcafe.close();
                    startReportGenerator();
                    capcon.stopCapture(process.stdout);
                    console.log(`Finished. Count failed tests:${failedCount}`);
                    //process.exit(failedCount);
                    res.sendStatus(200);
                });
        })
        .catch(error => {
            startReportGenerator();
            capcon.stopCapture(process.stdout);
            console.log(error);
            //process.exit(1);
            res.sendStatus(401);
        });

但是这里是一样的。如果我调用await runner.stop(),则该命令似乎将终止整个过程,并且没有任何承诺可言。

这是如何停止正在运行的TestCafe实例的秘密,还是整个过程都被击垮的秘密?

xialz 回答:停止活动的Testcafe运行

由于我无法调试您的项目,因此很难确切地说出您为什么会遇到问题。但是,使用cancel停止测试执行是正确的。 cancel方法停止测试执行并关闭浏览器,但不会停止TestCafe。这意味着您可以再次使用run方法,它将开始执行测试并再次打开浏览器。

我创建了一个示例来证明这种方法有效。

测试代码:

fixture `fixture`
    .page `http://example.com`;

for (let i = 0; i < 50; i++) {
    test(`test A ${i}`,async t => {
        await t.click('h1');
    });
}

Testcafe起始代码:

const createTestCafe = require('testcafe');

(async () => {
    const testCafe = await createTestCafe();

    let timeout;

    const runner = testCafe.createRunner();

    const runPromise = runner
        .src('test.js')
        .browsers('chrome')
        .run();

    const cancelPromise = new Promise(resolve => {
        timeout = setTimeout(() => {
            runPromise.cancel();

            resolve('canceled');
        },20000);
    });

    let value = await Promise.race([runPromise,cancelPromise]);

    if (value === 'canceled')
        console.log('test execution was canceled')

    value = await runner.run();

    console.log(`${value} failed tests`);

    await testCafe.close();
})();
本文链接:https://www.f2er.com/3149496.html

大家都在问