API 테스트는 요즘 많은 주목을 받고 있습니다. UI가 관여하지 않기 때문에 테스트하기가 훨씬 쉽고 빠릅니다. 이 때문에 API 테스트는 시스템의 엔드 투 엔드 테스트를 수행하는 데 첫 번째 선택으로 여겨집니다. 자동화된 API 테스트를 CI/CD 파이프라인에 통합하면 팀은 빌드에 대한 빠른 피드백을 받을 수 있습니다.
이 블로그에서는 DELETE API 요청과 이를 Playwright Java를 사용하여 처리하는 방법에 대해 논의하고 배우며, 다음과 같은 내용을 다룹니다:
- DELETE 요청이란 무엇인가요?
- Playwright Java를 사용하여 DELETE API를 어떻게 테스트하나요?
시작하기
필수 조건, 설정 및 구성을 포함한 세부 정보를 배우기 위해 이전 튜토리얼 블로그를 확인하는 것이 좋습니다.
테스트 중인 애플리케이션
우리는 주문 관리 기능과 관련된 여러 API를 제공하는 무료 RESTful 전자상거래 API를 사용할 것입니다. 이를 통해 주문을 생성, 검색, 업데이트 및 삭제할 수 있습니다.
이 애플리케이션은 Docker 또는 NodeJS를 사용하여 로컬에서 설정할 수 있습니다.
DELETE 요청이란 무엇인가요?
DELETE API 요청은 서버에서 지정된 리소스를 삭제합니다. 일반적으로 DELETE 요청에는 응답 본문이 없습니다.
리소스는 URI로 지정되며, 서버는 이를 영구적으로 삭제합니다. DELETE 요청은 서버에서 데이터베이스의 데이터를 제거하는 것과 같은 부작용을 일으킬 수 있으므로 안전하거나 멱등한 것으로 간주되지 않습니다.
다음은 DELETE 요청의 몇 가지 제한 사항입니다:
- DELETE 요청을 사용하여 삭제된 데이터는 복구할 수 없으므로 신중하게 처리해야 합니다.
- 리소스를 데이터베이스에서 직접 삭제할 수 있기 때문에 안전한 방법으로 간주되지 않으며 시스템에 충돌을 일으킬 수 있습니다.
- 이것은 멱등한 방법이 아니며, 동일한 리소스에 대해 여러 번 호출하면 서로 다른 상태가 발생할 수 있습니다. 예를 들어, 첫 번째 호출에서 DELETE가 호출되면 리소스가 삭제되었다는 상태 코드 204를 반환하고, 동일한 리소스에 대해 DELETE가 다시 호출되면 이미 삭제된 리소스에 대해 404 NOT FOUND를 반환할 수 있습니다.
다음은 RESTful 전자상거래 프로젝트의 DELETE API 엔드포인트 예입니다.
DELETE /deleteOrder/{id}
: ID로 주문 삭제

이 API는 시스템에서 해당 주문을 삭제하기 위해 order_id
를 경로 매개변수로 제공해야 합니다. 이 DELETE API 요청에는 요청 본문을 제공할 필요가 없습니다. 그러나 보안 조치로서 주문을 삭제하기 위해 token
을 헤더
로 제공해야 합니다.
API가 실행되면 시스템에서 지정된 주문을 삭제하고 상태 코드 204를 반환합니다.
주문을 찾을 수 없거나, 토큰이 유효하지 않거나 제공되지 않은 경우, 다음과 같은 응답이 표시됩니다:
Status Code | Description |
---|---|
400 |
토큰 인증에 실패했습니다 |
404 |
주어진 |
403 | 요청에 토큰이 누락되었습니다 |
Playwright Java를 사용하여 DELETE API 테스트하는 방법
DELETE API 테스트는 애플리케이션의 안정성과 신뢰성을 보장하는 중요한 단계입니다. DELETE API의 올바른 구현은 의도하지 않은 데이터 손실 및 불일치를 확인하는 데 필수적입니다. DELETE API는 시스템에서 리소스를 제거하는 역할을 합니다.
Playwright Java를 사용하여 DELETE API를 테스트하는 이번 데모에서는 시스템에서 기존 주문을 삭제하기 위해 /deleteOrder/{id}
를 사용할 것입니다.
테스트 시나리오 1: 유효한 주문 삭제
- RESTful 전자상거래 서비스를 시작합니다.
- POST 요청을 사용하여 시스템에 몇 개의 주문을 생성합니다.
- DELETE 요청을 사용하여
order_id
“1”인 주문을 삭제합니다. - 응답에서 상태 코드 204가 반환되는지 확인합니다.


테스트 구현
테스트 시나리오를 구현하기 위해 다음 단계를 수행해야 합니다:
- 새 주문을 POST 요청을 사용하여 추가합니다.
- 토큰 생성을 위해
/auth
API를 호출합니다. - 토큰과 함께
/deleteOrder/
API 엔드포인트를 호출하여 주문을 삭제합니다. - 응답에서 상태 코드 204 가 반환되는지 확인합니다.
기존 테스트 클래스 HappyPathTests
.에 새로운 테스트 메서드 testShouldDeleteTheOrder()
,가 생성됩니다. 이 테스트 메서드는 DELETE API를 테스트하기 위해 위의 세 단계를 구현합니다.
public void testShouldDeleteTheOrder() {
final APIResponse authResponse = this.request.post("/auth", RequestOptions.create().setData(getCredentials()));
final JSONObject authResponseObject = new JSONObject(authResponse.text());
final String token = authResponseObject.get("token").toString();
final int orderId = 1;
final APIResponse response = this.request.delete("/deleteOrder/" + orderId, RequestOptions.create()
.setHeader("Authorization", token));
assertEquals(response.status(), 204);
}
먼저 POST /auth
API 엔드포인트를 호출하여 토큰을 생성합니다. 응답으로 받은 token
은 DELETE API 요청에서 사용하기 위해 token 변수에 저장됩니다.

다음으로, 이전 튜토리얼에서 논의된 testShouldCreateNewOrders()
메서드를 사용하여 새 주문이 생성됩니다. 이 튜토리얼에서는 Playwright Java를 사용하여 POST 요청을 테스트하는 방법에 대해 이야기했습니다.
주문이 생성된 후, 다음 단계는 특정 주문을 삭제할 유효한 order_id
와 함께 DELETE 요청을 호출하는 것입니다.

우리는 Playwright 프레임워크에서 제공하는 delete()
메서드를 사용하여 order_id
“1”의 주문을 삭제할 것입니다.
주문이 삭제된 후, 응답으로 상태 코드 204가 반환됩니다. 삭제 작업이 성공했는지 확인하기 위해 상태 코드에 대한 검증이 수행됩니다. 응답에 요청 본문이 반환되지 않으므로 이것만 확인할 수 있습니다.
테스트 실행
우리는 테스트 구현에서 논의한 단계의 순서대로 테스트를 실행하기 위해 testng-restfulecommerce-deleteorders.xml
라는 새로운 testng.xml 파일을 생성할 것입니다.
<suite name="Restful ECommerce Test Suite">
<test name="Testing Happy Path Scenarios of Creating and Updating Orders">
<classes>
<class name="io.github.mfaisalkhatri.api.restfulecommerce.HappyPathTests">
<methods>
<include name="testShouldCreateNewOrders"/>
<include name="testShouldDeleteTheOrder"/>
</methods>
</class>
</classes>
</test>
</suite>
먼저, testShouldCreateNewOrders()
테스트 메서드가 실행되어 새로운 주문이 생성됩니다. 다음으로, testShouldDeleteTheOrder()
테스트 메서드가 실행되어 주문 삭제 API를 테스트합니다.
IntelliJ IDE를 사용하여 수행된 테스트 실행의 다음 스크린샷은 테스트가 성공적으로 실행되었음을 보여줍니다.

이제 삭제된 order_id
를 사용하여 GET /getOrder
API 엔드포인트를 호출하는 새로운 테스트를 작성하여 주문이 올바르게 삭제되었는지 확인하겠습니다.
테스트 시나리오 2: 삭제된 주문 검색
- 유효한 주문을
order_id
“1”로 삭제합니다. - GET
/getOrder
API를 사용하여order_id
“1”인 주문을 검색해 보십시오. - 상태 코드 404가 반환되고 응답에 “주어진 매개변수로 주문을 찾을 수 없습니다!” 라는 메시지가 포함되어 있는지 확인합니다.
테스트 구현
기존 클래스 HappyPathTests
에 새로운 테스트 메서드인 testShouldNotRetrieveDeletedOrder()
를 만들어 봅시다.
public void testShouldNotRetrieveDeletedOrder() {
final int orderId = 1;
final APIResponse response = this.request.get("/getOrder", RequestOptions.create().setQueryParam("id", orderId));
assertEquals(response.status(), 404);
final JSONObject jsonObject = new JSONObject(response.text());
assertEquals(jsonObject.get("message"), "No Order found with the given parameters!");
}
이 시나리오의 테스트 구현은 매우 간단합니다. 우리는 order_id
“1”로 삭제된 주문을 가져오기 위해 GET /getOrder
API를 실행할 것입니다.
다음으로, GET API가 응답에서 상태 코드 404를 반환하고 메시지 “주어진 매개변수로 주문을 찾을 수 없습니다!”가 포함되어 있는지 확인하는 주장을 적용합니다.
이 테스트는 삭제 주문 API가 정상적으로 작동했으며 주문이 시스템에서 삭제되었음을 보장합니다.
테스트 실행
testng.xml
파일을 업데이트하여 삭제 테스트 후에 이 테스트 시나리오를 끝에 추가합시다.
<?xml version="1.0" encoding="UTF-8"?>
<!DOCTYPE suite SYSTEM "http://testng.org/testng-1.0.dtd">
<suite name="Restful ECommerce Test Suite">
<test name="Testing Happy Path Scenarios of Creating and Updating Orders">
<classes>
<class name="io.github.mfaisalkhatri.api.restfulecommerce.HappyPathTests">
<methods>
<include name="testShouldCreateNewOrders"/>
<include name="testShouldDeleteTheOrder"/>
<include name="testShouldNotRetrieveDeletedOrder"/>
</methods>
</class>
</classes>
</test>
</suite>
이제 세 가지 테스트가 순차적으로 실행되어야 합니다. 첫 번째는 주문을 생성하고, 두 번째는 order_id
“1”로 주문을 삭제하며, 마지막 테스트는 order_id
“1”로 주문을 가져와 상태 코드 404를 반환하는 GET API를 호출합니다.

위의 스크린샷은 세 가지 테스트가 모두 성공적으로 실행되었고, DELETE API가 기대대로 잘 작동했음을 보여줍니다.
요약
DELETE API 요청은 시스템에서 리소스를 삭제할 수 있게 해줍니다. 삭제는 중요한 CRUD 기능이므로 이를 테스트하고 시스템이 기대대로 작동하는지 확인하는 것이 중요합니다. 그러나 DELETE는 되돌릴 수 없는 과정이므로 항상 주의하여 사용해야 합니다.
제 경험에 따르면, DELETE 요청을 실행한 후 GET API를 호출하여 지정된 리소스가 시스템에서 성공적으로 삭제되었는지 확인하는 것이 좋은 접근 방식입니다.
행복한 테스트 되세요!
Source:
https://dzone.com/articles/test-delete-requests-for-api-testing-with-playwright-java