我个人认为playwright
这是一种进入系统/端到端测试方向的工具。因此,我使用playwright
+jest
来构建用户旅程并将它们集成到 CI/CD 流程中。
由于playwright
创建了自己的测试运行器,具有拍摄视频和跟踪故障等有用功能,因此jest
从@playwright/test
. 在他们的主页上playwright
建议使用测试装置,所以我绝对想将它们包含在开关中。
下面我以亚马逊为例。
使用playwright
+jest
我做的第一件事是为环境的通用设置创建一个函数:
function setupSuite({ browserOptions, userConfig }){
// create playwright browser and use browserOptions as overrides
// create page from browser
// register self-implemented trace and screenshot reporters to page
// go to baseUrl of current environment (e.g. local, branch etc..)
// click on cookie banner, since it's blocking the UI
// create a user based on userConfig (e.g. user has amazon prime user? payment options? etc.)
// return { browser, page, user, ... }
}
当然还有一个再次清理所有内容的功能:
function teardownSuite(suite){
// close browser
// delete user
// etc..
}
然后我会为每个用户旅程使用一个文件。在亚马逊的情况下,用户旅程可能是订单的成功处理:
describe("Successful Order", () => {
let suite
beforeAll(async () => {
const userConfig = { isPrime: false, paymentOptions: [ "paypal", "visa" ] }
suite = await setupBrowser({ userConfig })
// I actually extracted that logic in a function to be able to use it in other tests too,
// but just want to make clear whats happening here
const { page, user } = suite
await page.fill(".login-username-input", user.username)
await page.fill(".login-password-input", user.password)
await page.click(".login-submit-button")
})
afterAll(() => teardownSuite(suite))
test("search for toothbrush with suggestions", async () => {
const { page } = suite
await page.fill(".search-input", "tooth")
await page.click("text='toothbrush")
// hit enter
// do some assertions to check if the search was really successful
})
test("click on first item and add to chart", async () => {
// page actions and assertions
})
test("go back, click on second item and add to chart", async () => {
// page actions and assertions
})
test("go to chart and pay", async () => {
// page actions and assertions
})
test("check order confirmation mail", async () => {
// page actions and assertions
})
})
如您所见,我将测试分成逻辑部分以使其更具可读性,并查看它在哪个步骤(test
块)失败。
将其迁移到@playwright/test
+ 固定装置的最佳方法是什么?
- 您将如何迁移
setupSuite
/teardownSuite
?是的,您可以使用夹具,但setupSuite
需要像 userConfig 这样的参数。是否可以有参数化的夹具? - 您将如何使用固定装置构建测试?例如,如果您想模拟完整的用户旅程,那么测试将变得比仅测试登录更大。然后,一个测试块将有很多行,而无法构造它们。
- 是否可以设置一个页面以便在所有测试中共享?
beforeAll
钩子不接收任何页面,并且每个块test
总是接收自己的页面。test
这意味着块之间没有连接。如果您手动创建一个页面beforeAll
并在每次测试中使用相同的页面实例,这可能是一种不好的做法,视频和跟踪可能不起作用..那么这里可以做什么? - 用户旅程之类的测试真的很糟糕吗?我觉得它们不能与
playwright
文档中提到的夹具方法很好地结合起来。playwright
感觉非常data-driven
适合end-to-end
测试 IMO的夹具。