여러분, 안녕하세요!
나는 항상 UI 및 API 테스트 범위라는 두 가지 목적을 가진 테스트 자동화 프레임워크를 회의적으로 보았습니다. 일반적으로 서로 다른 테스트 실행(또는 이벤트 프로젝트)에서 서로 다른 테스트 계층을 실행하게 됩니다.
최근에 저는 Playwright 가 API 테스트 측면에서 제공하는 것을 살펴보고 이를 제 Cypress 경험과 비교했습니다. 그래서 여러분과 공유해야 할 내용은 다음과 같습니다.
Cypress는 얼마 전에 API 테스트를 가능하게 만들었습니다. 예제를 포함한 API 테스트 측면에서 이 도구가 얼마나 훌륭한지에 대한 기사를 학습 포털에서 찾을 수 있습니다.
테스트를 실행하려면 프로젝트 종속성을 설치해야 합니다. 맞나요? Cypress 에는 전자 브라우저가 함께 제공되며 API 테스트만 독점적으로 실행하려는 경우 설치하는 것이 상당히 중복되고 시간이 많이 걸릴 수 있습니다. 예를 들어 UI 및 API 테스트 실행을 위해 CI에서 별도의 작업이 있다고 가정해 보겠습니다. 일반적으로 그렇습니다).
안 좋아 보이는데요? ☝️
또한 API 테스트를 실행하면 어쨌든 브라우저가 시작됩니다.
Cypress를 사용한 간단한 API 테스트는 다음과 같습니다.
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) }) })
정말 간단하고 간단해 보이죠? 여기에서 이것이 일반적인 Cypress 구문 이라고 말하는 것이 중요합니다. 즉, 모든 출력을 변수에 쓰는 대신( 일부 조정으로 가능 하더라도) 체인을 연결하는 것입니다.
Cypress 와 마찬가지로 Playwright 는 테스트 자동화 프레임워크입니다. 브라우저 자동화 도구만 단독으로 사용하거나 전체 프레임워크 (테스트 실행기, 어설션 라이브러리, 브라우저 자동화 도구, HTTP 클라이언트, 리포터 등)를 사용할 수 있습니다.
여기서 차이점은 Playwright 에는 기본적으로 브라우저가 제공되지 않는다는 것입니다. 원하는 경우 별도의 명령을 사용하여 브라우저를 설치해야 합니다.
API 테스트를 독점적으로 실행한다는 점에서 브라우저나 다른 데스크톱 앱을 실행하지 않고 컴퓨터의 런타임 및 리소스를 일부 절약하므로 여기에서는 큰 차이가 있습니다.
Playwright를 사용한 간단한 API 테스트는 다음과 같습니다.
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), }) })
객체를 주장하는 Jest와 유사한 구문을 강조하고 싶습니다.
expect(await response.json()).toEqual({ token: expect.any(String), })
이 구문을 사용하면 단 한 번의 expect
호출로 객체의 전체 구조를 확인할 수 있습니다 ☝️
API 테스트는 실행하는 데 너무 많은 것이 필요하지 않기 때문에 작고 가벼워야 합니다.
위의 내용을 요약하자면…
✅ 극작가는 13배 빠른 설치 속도로 승리를 거두었습니다.
ℹ️ 종속성이 사전 설치된 이미지를 사용 하거나 CI 스토리지 에 캐시하면 CI 에서 Cypress 설치 시간을 줄일 수 있습니다.
✅ Playwright는 API 테스트를 실행하는 데 브라우저가 필요하지 않기 때문에 승리하므로 곧바로 요점을 설명합니다.
ℹ️ API 테스트에서 브라우저를 "실행하지 않을" 방법은 없습니다. 브라우저는 프레임워크 논리의 일부이기 때문입니다.
Cypress 나 Playwright 모두 객관적인 이점이 없기 때문에 여기서 승자를 선택할 수 없습니다.
둘 다 약간의 차이가 있지만 매우 간단한 구문을 가지고 있습니다. 여기서 마음에 드는 것을 선택하는 것은 테스터의 결정이라고 말하고 싶습니다.
API 테스트 자동화에 Playwright를 사용하는 것은 성능상 충분히 안전하다고 확실히 말할 수 있습니다. 이 프레임워크를 사용하여 이미 UI 테스트를 수행했다면 이는 공정한 솔루션이 될 것입니다.
UI 테스트에 Cypress를 사용하고 API 계층을 다루려는 사람들을 위한 조언 - 다른 것을 사용하는 것이 더 좋습니다( Jest + Axios , 거기에서 예제를 볼 수 있습니다).