在剧作家漫长的E2E交易流程中,哪些实践对您有效,使测试更加稳定?
在 Playwright 中,这对我有用:
定位器现在是 Playwright 自动等待和 重试能力
。由于
locator
自动等待,实时查找并作用于元素,它极大地提高了测试的稳定性。
await page.getByLabel('User Name').fill('John');
await page.getByLabel('Password').fill('secret-password');
await page.getByRole('button', { name: 'Sign in' }).click();
await expect(page.getByText('Welcome, John!')).toBeVisible();
通过使用网络优先断言,Playwright 将等待,直到满足预期条件。
await expect(page.getByText('welcome')).toBeVisible();
在竞争条件下,我们需要在操作后验证某些状态/值,但有多个事件可能同时触发。在这些情况下
Promise.all
可以非常方便地稳定处理它们。
await test.step(`Step name`, async () => {
const [newPage] = await Promise.all([
context.waitForEvent('page'),
page.click(welcomeLocator)
]);
}
在场景中,我们需要等待
other element
达到特定状态来表示整个页面/或其他元素的状态。例如,等待页面上作为最后一个元素加载的元素来验证页面是否已完全加载非常有帮助。
使用干净且独立的环境来运行测试确实很有帮助。由于此环境不与可能干扰执行的其他进程或活动共享,这确实有助于提高测试的稳定性。
使测试彼此完全独立,并且一项测试的失败不会影响任何其他测试,这确实有助于保持结果干净。它还有助于测试的并行化。
进行独立测试还有助于使每个测试的测试数据保持正确的预期状态,无论其他测试发生什么情况。 还为每个测试用例单独设计数据并在执行前刷新它,确保数据在测试执行前始终处于预期状态。
在 CI 管道中集成测试并定期运行它们,有助于及早发现任何问题。这有助于在影响生产之前发现稳定性问题。
针对片状测试实施重试机制,有助于有效处理测试的片状问题。
根据应用程序更改的需要审查和更新/修改/删除测试,使测试套件保持良好状态。这可以有效解决任何新引入的不稳定或故障。