REST API Test (feat. RestAssured)

YEON·2022년 5월 13일
0

TDD,ATDD,DDD 미션

목록 보기
2/3

📝 RESTAssured Java 라이브러리를 사용하여 REST 어플리케이션의 HTTP Endpoint에 초첨을 맞춘 Rest API 테스트 코드 작성 에 관하여 학습하고 인수 테스트를 작성해보았다.


REST API Test

REST API 를 테스트하기 위해서는 많은 툴, 라이브러리가 존재한다.
Ex) SoapUI, SwaggerUI, RestAssured, PostMan
그 중, RestAssured에 대해 알아보고, RestAssured를 사용하여 테스트 코드를 작성해보았다.


RestAssured

Rest AssuredREST 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 에 대한 검증이 가능하다.




REST API 인수 테스트 예시

RestAssured 를 사용하여 작성한 회원가입(REST API) 인수 테스트 예시이다.

//given

.given() 뒤에 .log().all() 을 통해서 HTTP Request의 Log를 콘솔창에 띄운다.
.body() 를 통해서 멤버의 회원가입 API에 필요한 변수를 넣어준다.
.contentType() 는 현재 전송하는 데이터가 어떤 타입(ex.JSON)인지에 대한 의미이고,
.accept() 는 해당 형태 타입의 요청만 받아들인다는 의미이다.

(+ 만약 body()에 .json 형태가 아닌 String 타입의 파라미터를 사용한다면 .accept(MediaType.APPLICATION_JSON_VALUE) 했을 때 오류가 발생할 수 있다.)

//when

.when() 뒤에 .get(), .post() 등 필요로 되는 HTTP Method 형식을 맞춰주고, 요청할 uri를 파라미터로 넣어준다.

//then

.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

profile
- 👩🏻‍💻

0개의 댓글