Javascript 2名带promise.race的testcafe runner,但如何将它们一起运行?

Javascript 2名带promise.race的testcafe runner,但如何将它们一起运行?,javascript,promise,automated-tests,e2e-testing,testcafe,Javascript,Promise,Automated Tests,E2e Testing,Testcafe,我在testcafe中有2个runner.js,我想一起运行这2个runner,我应该如何做 runner1.js const createTestCafe = require('testcafe'); let testcafe = null; createTestCafe() .then(tc => { testcafe = tc; const runner = testcafe.createRunner(); let id; const de

我在testcafe中有2个runner.js,我想一起运行这2个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和不同的时间

 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。现在我想从命令行或其他运行程序一起运行这两个运行程序。我该怎么做?

我看到你已经在帖子中问了类似的问题,所以请不要重复问题

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

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实例。这足以创造几个跑步者。 请参阅以下介绍如何取消正在运行的任务的文章:


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

谢谢!我理解了取消任务的概念,感谢你给我指出了这篇文章。我还有一个问题,不是在两个独立的跑步者中做报告,而是有一个逻辑为多个跑步者只编写一份报告吗?目前,不可能从多个跑步者中编写一份报告。我认为,您可以合并运行脚本中的所有报告文件。@Airich如何合并运行脚本中的所有报告?这取决于您的报告格式。您可以根据需要读取报告文件并将其内容写入单个文件,也可以使用任何第三方工具。下面是json报告的一个示例:`/。。。等待testCafe.close();const report1=require('./report1.json');const report2=require('./report2.json');常数fs=要求('fs');writeFileSync('report.json',json.stringify({report1,report2},null,2));})();`