Xin chào tất cả mọi người!
Tôi luôn hoài nghi về các khung tự động hóa thử nghiệm với mục đích kép - phạm vi thử nghiệm UI & API. Thông thường, bạn sẽ chạy các lớp thử nghiệm khác nhau trong các lần chạy thử nghiệm (hoặc dự án sự kiện) khác nhau, vì mỗi lớp có thể có riêng
Gần đây, tôi đã xem Playwright cung cấp những gì về mặt thử nghiệm API và so sánh nó với trải nghiệm Cypress của tôi, vì vậy đây là những gì tôi muốn chia sẻ với các bạn…
Cypress đã thực hiện thử nghiệm API cách đây không lâu. Bạn có thể tìm thấy một bài viết trên cổng tìm hiểu về mức độ tuyệt vời của công cụ này trong việc kiểm tra API kèm theo các ví dụ.
Để chạy thử nghiệm, bạn cần cài đặt các phần phụ thuộc của dự án, đúng không? Chà, Cypress đi kèm với một trình duyệt điện tử và việc cài đặt có thể khá dư thừa (và tốn thời gian) nếu bạn chỉ muốn chạy thử nghiệm API (giả sử, bạn có các công việc riêng biệt trong CI cho các lần chạy thử nghiệm UI & API, thường là vậy).
Trông không ổn lắm phải không? ☝️
Ngoài ra, khi bạn chạy thử nghiệm API - nó vẫn khởi chạy trình duyệt.
Một thử nghiệm API đơn giản với Cypress sẽ như thế này:
it('Sign in with valid credentials', () => { cy.request('POST', '/auth', { login: Cypress.env('username'), password: Cypress.env('password'), }).should(response => { expect(response.body.token).to.be.a('string') expect(response.status).to.eq(200) }) })
Trông khá đẹp
Giống như Cypress , Playwright là một khung tự động hóa thử nghiệm - bạn chỉ có thể sử dụng riêng một công cụ tự động hóa trình duyệt hoặc toàn bộ khung (trình chạy thử nghiệm, thư viện xác nhận, công cụ tự động hóa trình duyệt, ứng dụng khách HTTP, trình báo cáo, v.v.).
Sự khác biệt ở đây là Playwright không có sẵn bất kỳ trình duyệt nào - bạn phải cài đặt chúng bằng một lệnh riêng (nếu muốn).
Điều này tạo ra sự khác biệt lớn ở đây, vì khi chỉ chạy thử nghiệm API , nó sẽ không chạy bất kỳ trình duyệt hoặc bất kỳ ứng dụng máy tính để bàn nào khác và tiết kiệm một số thời gian và tài nguyên chạy trên máy của bạn.
Một thử nghiệm API đơn giản với Playwright sẽ như thế này:
import {test, expect} from '@playwright/test' test('Sign in with valid credentials', async ({request}) => { const response = await request.post('/auth', { data: { login: process.env.USERNAME, password: process.env.PASSWORD, }, }) expect(response.status()).toEqual(200) expect(await response.json()).toEqual({ token: expect.any(String), }) })
Tôi muốn nêu bật một cú pháp giống như Jest để xác nhận các đối tượng:
expect(await response.json()).toEqual({ token: expect.any(String), })
Cú pháp này cho phép bạn xác minh toàn bộ cấu trúc của đối tượng chỉ bằng một lệnh gọi expect
☝️
Các thử nghiệm API được cho là nhỏ và nhẹ vì chúng không yêu cầu chạy quá nhiều.
Hãy tóm tắt các tài liệu trên…
✅ Nhà viết kịch giành chiến thắng với khả năng cài đặt sạch sẽ nhanh hơn 13 lần ngay từ đầu.
ℹ️ Bạn có thể giảm thời gian cài đặt Cypress trong CI nếu sử dụng hình ảnh có phần phụ thuộc được cài đặt sẵn hoặc lưu chúng vào bộ lưu trữ CI của bạn.
✅ Nhà viết kịch chiến thắng vì không yêu cầu trình duyệt chạy thử nghiệm API mà đi thẳng vào vấn đề.
ℹ️ Không có cách nào để “không chạy” trình duyệt trong các thử nghiệm API, vì đó là một phần logic của khung.
Không thể chọn người chiến thắng ở đây vì không có lợi thế khách quan nào cho cả Cypress và Playwright .
Cả hai đều có cú pháp khá đơn giản với một số khác biệt nhỏ. Tôi muốn nói rằng việc chọn những gì họ thích ở đây là quyết định của người thử nghiệm.
Tôi chắc chắn có thể nói rằng nó đủ an toàn để sử dụng Playwright để tự động hóa thử nghiệm API do hiệu suất của nó. Đó sẽ là một giải pháp công bằng nếu bạn đã thực hiện các bài kiểm tra giao diện người dùng với khung này.
Lời khuyên của tôi dành cho những người sử dụng Cypress để kiểm tra giao diện người dùng và muốn bao phủ lớp API - tốt hơn hãy sử dụng thứ khác ( Jest + Axios , bạn có thể xem ví dụ ở đó ).