postgresql 如何在Playwright中隔离CRUD应用程序的测试

7xzttuei  于 2023-06-29  发布在  PostgreSQL
关注(0)|答案(1)|浏览(155)

Playwright的文档说每个测试都应该是独立的,这样测试就可以并行运行,直觉上我同意这一点,但我在实践层面上遇到了问题。我第一次尝试隔离我的测试是在每次测试后截断表(清除所有记录),然后更新和删除测试添加记录以处理。
截断表可以测试“there are no records”状态,并防止添加用户时失败,因为该用户已经在上一次运行或上一次浏览器添加。
然而,当并行运行时,这些测试会很难发生冲突,当我不通过将每个浏览器设置为依赖于前一个浏览器来“链接”项目时,它们甚至会发生冲突(可能我应该将所有内容都设置为不并行,但我还没有采取这一步)。
我很难理解“隔离”测试意味着什么。如果我为beforeEach编写了一个用户,然后另一个测试通过截断表来结束,那么当测试实际运行并且刚刚创建的记录已经被截断时,我的更新测试当然会失败。当您需要测试一个绝对干净的状态,但也需要处理现有记录时,如何真正隔离测试,我完全不知所措。其他人是如何做到这一点的?

eqqqjvef

eqqqjvef1#

串口模式

我将在该场景中使用串行模式,以将所有这些相互依赖的测试保存在同一个文件中,并按定义的顺序执行它们。
我认为没有像best practice这样的东西,而是good practices in an given context。最终,我们需要在特定背景下找到正确的平衡。
一般来说,我会争取独立测试,这样它们就不会影响其他测试,但是在这个场景中,将它们作为独立测试放在一个文件中是有意义的。
示例:

test.describe.serial('FeaturePage', () => {
      let page;
      let featurePage;
    
      test.beforeAll(async ({ browser }) => {
        page = await browser.newPage();
        featurePage = new FeaturePage(page);
      });
    
      test('Does thing A', ({ page }) => {
        await featurePage.doThingA();
      });
      
      test('Does thing B', ({ page }) => {
        await featurePage.doThingB();
      });
      
      test('Does thing C', ({ page }) => {
        await featurePage.doThingC();
      });
    })

相关问题