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

TestCafe: Issues with concurrent tests across diffferent browsers

我有一个包含 4 个测试的 Fixture,我想测试这个 Fixture 2 个不同的浏览器。所以我 运行 下面的命令:

testcafe -c 1 chrome,firefox testsfolder/

我正在使用 t.fixtureCtx 来设置这 4 个测试的值,因为我需要将一个测试的值引用到另一个测试。我期待它会启动一个实例 Chrome 和 FF 和 运行 整个测试彼此独立(浏览器)。

但是,我面临的问题是测试不会停留在他们的车道上。换句话说,由 Chrome 在 Test#1 中设置的值被 Firefox 在其 Test#2.

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

t.fixtureCtx object在服务器端测试运行之前创建一次,并在多个浏览器之间共享。此行为是设计使然。

我建议你根据浏览器名称将共享值保存为一个对象。

例如:

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}`);
});