TestCafe: проблемы с параллельными тестами в разных браузерах - PullRequest
2 голосов
/ 22 января 2020

У меня есть Fixture с 4 тестами, я хочу протестировать этот Fixture 2 в разных браузерах. Поэтому я запускаю следующую команду:

testcafe -c 1 chrome,firefox testsfolder/

Я использую t.fixtureCtx для установки значений в этих 4 тестах, потому что мне нужно передать значения из одного теста в другой. Я ожидал, что он будет раскручивать один экземпляр Chrome и FF и запускать весь тест независимо друг от друга (браузер).

Однако проблема, с которой я сталкиваюсь, заключается в том, что тесты не остаются в их переулок. Другими словами, значения, установленные Chrome в Test # 1 , используются Firefox в его Test # 2 .

Я всегда могу запустить эти тесты отдельно в двух отдельных командах, однако я хотел проверить это на нескольких браузерах в одной команде. Я что-то здесь упускаю?

1 Ответ

4 голосов
/ 23 января 2020

Объект t.fixtureCtx создается один раз перед выполнением тестов фикстуры на стороне сервера и используется несколькими браузерами. Такое поведение является заданным.

Я предлагаю вам сохранить общие значения как объект в соответствии с именем браузера.

Например:

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