如何将不同的测试数据传递给 Playwright 测试运行器中的测试?

如何将不同的测试数据传递给 Playwright 测试运行器中的测试?就像从 csv 文件发送测试数据一样?

stack overflow How to pass different test data to a test in Playwright test runner?
原文答案

答案:

作者头像

您可以使用像 this 这样的 csv-parser 并循环数据以自动创建新测试。如果您不需要自动创建测试,您也可以直接在测试中使用它来加载外部数据。等待/订阅 this 问题也可能有意义,它为 Playwright 测试添加了 test.each 支持。

作者头像
function PreformMultipleTestsWithData(data) {
    for(let i=0; i<data.length; i++) {
        console.log(`xyz${data[i]}`);
        test(`Testing data ${data[i]}`, async({page}, testInfo) => {
            expect(data[i]).toBe(2);
        })
    }
}
PreformMultipleTestsWithData([1,2,3]);

将异步问题放在一边,这是UI和测试结果正确反映了3个测试已被预先形成。

更新:根据 https://github.com/microsoft/playwright/issues/9916 ,我们不能将异步问题放在一边。

换句话说,以下是行不通的

function async PreformMultipleTestsWithData() {
    let data = await getData();
    console.log("Data is present:", JSON.stringify(data))
    for(let i=0; i<data.length; i++) {
        console.log(`xyz${data[i]}`);
        test(`Testing data ${data[i]}`, async({page}, testInfo) => {
            expect(data[i]).toBe(2);
        })
    }
}
PreformMultipleTestsWithData();

但这将起作用:

function async PreformMultipleTestsWithData() {
    let data = getData();
    console.log("Data is present:", JSON.stringify(data))
    for(let i=0; i<data.length; i++) {
        console.log(`xyz${data[i]}`);
        test(`Testing data ${data[i]}`, async({page}, testInfo) => {
            expect(data[i]).toBe(2);
        })
    }
}
PreformMultipleTestsWithData();