javascript - 2 testcafe runner with promise.race 但如何一起运行这些?

标签 javascript promise automated-tests e2e-testing testcafe

我在 testcafe 中有 2 个 runner.js,我想同时运行这两个 runner,我应该怎么做?

runner1.js

const createTestCafe = require('testcafe');
let testcafe = null;

createTestCafe()
.then(tc => {
    testcafe     = tc;
    const runner = testcafe.createRunner();

    let id;
    const deadlinePromise = new Promise((resolve,reject) => {
        id=setTimeout(() => {
       clearTimeout(id);
       reject('testcase couldnt meet the actual preferred time');
        },215000)
     });

const runPromise=runner
    .src(test1.ts)  
    .browsers('chrome:headless')
    .reporter('html-testrail')
    .run({skipJsErrors:true})             


race =Promise.race([runPromise,deadlinePromise])
race.then((res) => console.log(res))      

})

       .catch(failedCount => {
           console.log('Tests1 failed: ' + failedCount);
            testcafe.close();
        })

runner2.js -- 相似但不同的 src 和 deadlinePromise 中的不同时间

 const createTestCafe = require('testcafe');
  let testcafe = null;

createTestCafe()
.then(tc => {
    testcafe     = tc;
    const runner = testcafe.createRunner();

    let id;
    const deadlinePromise = new Promise((resolve,reject) => {
        id=setTimeout(() => {
       clearTimeout(id);
       reject('testcase couldnt meet the actual preferred time');
        },150000)
     });

const runPromise=runner
    .src(test2.ts)  
    .browsers('chrome:headless')
    .reporter('html-testrail')
    .run({skipJsErrors:true})             


race =Promise.race([runPromise,deadlinePromise])
race.then((res) => console.log(res))      

})

       .catch(failedCount => {
           console.log('Tests1 failed: ' + failedCount);
            testcafe.close();
        }) 

所以基本上两个运行者都包含 promise.race。现在我想从命令行或另一个运行者一起运行这两个运行者。我该怎么做?

最佳答案

我看到您已经在 master runner in testcafe for several other runners? 中问过类似的问题线程,所以请不要重复问题。

我准备了一个示例来演示所需的行为。见以下代码:

const createTestCafe = require('testcafe');

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

    let timeout1, timeout2;

    const runner1RunPromise = testCafe
        .createRunner()
        .src('test1.js')
        .reporter([{ name: 'spec', output: 'report1.txt' }])
        .browsers('chrome')
        .run();

    const deadline1Promise = new Promise((resolve, reject) => {
        timeout1 = setTimeout(() => {
            runner1RunPromise.cancel();

            console.log('runner 1 canceled');

            resolve();
        }, 5000);
    });


    const runner2RunPromise = testCafe
        .createRunner()
        .src('test2.js')
        .reporter([{ name: 'spec', output: 'report2.txt' }])
        .browsers('firefox')
        .run();

    const deadline2Promise = new Promise((resolve, reject) => {
        timeout2 = setTimeout(() => {
            runner2RunPromise.cancel();

            console.log('runner 2 canceled');

            resolve();
        }, 40000);
    });

    const race1 = Promise.race([runner1RunPromise.then(() => clearTimeout(timeout1)), deadline1Promise]).then(() => { console.log('race 1 finished') });
    const race2 = Promise.race([runner2RunPromise.then(() => clearTimeout(timeout2)), deadline2Promise]).then(() => { console.log('race 2 finished') });

    await Promise.all([race1, race2]);

    console.log('finished');

    await testCafe.close();
})();

请注意,您不需要创建多个 testcafe 实例。创建多个运行者就足够了。 请参阅以下描述如何取消正在运行的任务的文章:https://devexpress.github.io/testcafe/documentation/using-testcafe/programming-interface/runner.html#cancelling-test-tasks

因此,您可以在超时时取消测试执行或等待所有测试完成。

关于javascript - 2 testcafe runner with promise.race 但如何一起运行这些?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/58292652/

相关文章:

javascript - 我如何从这个 jsFiddle 动态添加一个延迟到 promise 中?

javascript - Promise.all() 中的 Promise 有时返回未定义/crawler-request 包nodejs

javascript - 如何返回真正有效的 thenable 对象

testing - 更改 Katalon Studio 测试用例执行后显示的默认消息

url - cy.url() 和/或 cy.location ('href' ) 不返回字符串

javascript - 1 分钟倒计时 Javascript

javascript - Bootstrap 后如何激活新的 Angular Controller

java - 不使用 XPath 从 webtable 内的元素获取文本(Selenium Web 驱动程序 + Java)

javascript - Vue.JS中获取firebase firestore后如何生成数据

javascript - CSS/JavaScript 绝对定位与固定定位