我尝试将停止功能添加到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实例的秘密,还是整个过程都被击垮的秘密?