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}`);
});
我有一个包含 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}`);
});