Testing TestCafe:跨不同浏览器的并发测试问题

Testing TestCafe:跨不同浏览器的并发测试问题,testing,automation,e2e-testing,testcafe,browser-automation,Testing,Automation,E2e Testing,Testcafe,Browser Automation,我有一个带有4个测试的装置,我想用2个不同的浏览器来测试这个装置。所以我运行下面的命令: testcafe -c 1 chrome,firefox testsfolder/ 我使用t.fixtureCtx设置这4个测试的值,因为我需要将一个测试的值引用到另一个测试。我曾期望它能分别启动Chrome和FF的一个实例,并独立运行整个测试(浏览器) 然而,我面临的问题是,测试并没有停留在他们的车道上。换句话说,Firefox在其测试2中使用Chrome在测试1中设置的值 我总是可以用两个单独的命令分

我有一个带有4个测试的装置,我想用2个不同的浏览器来测试这个装置。所以我运行下面的命令:

testcafe -c 1 chrome,firefox testsfolder/
我使用
t.fixtureCtx
设置这4个测试的值,因为我需要将一个测试的值引用到另一个测试。我曾期望它能分别启动Chrome和FF的一个实例,并独立运行整个测试(浏览器)

然而,我面临的问题是,测试并没有停留在他们的车道上。换句话说,Firefox在其测试2中使用Chrome在测试1中设置的值

我总是可以用两个单独的命令分别运行这些测试,但是我想用一个命令在多个浏览器上测试它。我在这里遗漏了什么吗?

在服务器端运行fixture测试之前创建一次,并在多个浏览器之间共享。这种行为是故意的

我建议您根据浏览器名称将共享值保存为对象

例如:

const logTimestamp = t => {
    if (!t.fixtureCtx.sharedData)
        t.fixtureCtx.sharedData = {};

    const browser = t.browser.name;

    if (!t.fixtureCtx.sharedData[browser]) {
        t.fixtureCtx.sharedData[browser] = { timestamp: new Date().getTime() };
    }
};

fixture`Fixture 1`
    .page`about:blank`;

test('Test 1', async t => {    
    await t.wait(1000);
    logTimestamp(t);
    
    console.log(`Test 1, browser: ${t.browser.name},  timestamp: ${t.fixtureCtx.sharedData[t.browser.name].timestamp}`);
});

test('Test 2', async t => {    
    await t.wait(1000);
    
    console.log(`Test 2, browser: ${t.browser.name},  timestamp: ${t.fixtureCtx.sharedData[t.browser.name].timestamp}`);
});