📝 RESTAssured Java 라이브러리를 사용하여 REST 어플리케이션의 HTTP Endpoint에 초첨을 맞춘 Rest API 테스트 코드 작성 에 관하여 학습하고 인수 테스트를 작성해보았다.
REST API 를 테스트하기 위해서는 많은 툴, 라이브러리가 존재한다.
Ex) SoapUI, SwaggerUI, RestAssured, PostMan
그 중, RestAssured에 대해 알아보고, RestAssured를 사용하여 테스트 코드를 작성해보았다.
Rest Assured 는 REST API 자동화 테스트를 위한 Java 라이브러리이다.
Rest Assured를 사용한 REST API 테스트는 Black box 테스트로, 어플리케이션에 Request를 보내고, 받은 Response를 미리 결정된 결과와 비교한다.
REST 어플리케이션의 HTTP Endpoint에 초첨을 맞춘 테스트 도구인 만큼, 컨트롤러단 뿐아니라 서비스단 등 다른 계층의 로직을 한번에 테스트 할 수 있는 장점이 있다.
Junit 기반의 REST API 테스트 툴로 Junit 의 테스트 기능을 활용하면 되고, 테스트는 JSON 및 HTTP를 기반으로 한다.
BDD 형식의 (given/when/then) 방식을 채택하여 가독성이 좋아 코드 작성, 분석하기가 편하다.
OAuth, 인증서, 선점 기본 인증과 같은 다양한 인증 체계를 지원하여 Token 에 대한 검증이 가능하다.
RestAssured 를 사용하여 작성한 회원가입(REST API) 인수 테스트 예시이다.
.given()
뒤에 .log().all()
을 통해서 HTTP Request의 Log를 콘솔창에 띄운다.
.body()
를 통해서 멤버의 회원가입 API에 필요한 변수를 넣어준다.
.contentType()
는 현재 전송하는 데이터가 어떤 타입(ex.JSON)인지에 대한 의미이고,
.accept()
는 해당 형태 타입의 요청만 받아들인다는 의미이다.
(+ 만약 body()에 .json 형태가 아닌 String 타입의 파라미터를 사용한다면 .accept(MediaType.APPLICATION_JSON_VALUE) 했을 때 오류가 발생할 수 있다.)
.when()
뒤에 .get()
, .post()
등 필요로 되는 HTTP Method 형식을 맞춰주고, 요청할 uri를 파라미터로 넣어준다.
.then()
뒤에 응답으로 오는 모든 것들을 출력하기 위해 .log().all()
을 해주고 .extract()
를 통해서 HTTP Request를 보낸다.
@DisplayName("회원을 등록/생성 한다.")
@Test
void joinMember() {
// when
ExtractableResponse<Response> createResponse = 회원_등록_요청(EMAIL, PASSWORD);
// then
회원_등록_성공(createResponse);
}
public static ExtractableResponse<Response> 회원_등록_요청(String email, String password) {
MemberRequest memberRequest = new MemberRequest(email, password);
return RestAssured
.given().log().all()
.contentType(MediaType.APPLICATION_JSON_VALUE)
.body(memberRequest)
.when().post("/members")
.then().log().all()
.extract();
}
public static void 회원_등록_성공(ExtractableResponse<Response> response) {
assertThat(response.statusCode()).isEqualTo(HttpStatus.CREATED.value());
}
[참조]
https://beenlife.tistory.com/34
https://ko.lambdageeks.com/api-testing-automation-restassured/
https://velog.io/@jjy5349/RestAssured%EB%A5%BC-%EC%9D%B4%EC%9A%A9%ED%95%9C-%ED%85%8C%EC%8A%A4%ED%8A%B8-%EC%BD%94%EB%93%9C-%EC%9E%91%EC%84%B1%ED%95%98%EA%B8%B0