TEST

[TEST] RestAssured: API를 테스트해보자!

깃짱 2023. 6. 5. 17:22
반응형

💋 RestAssured란?

 

  • RestAssured는 자바를 기반으로한 API 테스트 프레임워크
  • RESTful API를 테스트하기 위한 라이브러리 중 하나로, API 요청과 응답에 대한 테스트가 가능하다.
  • RestAssured는 테스트할 API의 요청과 응답을 쉽게 파싱하고 검증할 수 있는 다양한 메서드와 기능을 제공한다.

 

 

✔ RestAssured에서 사용되는 메서드

given() : 요청을 설정하는 메서드

  • 요청 URI, 헤더, 쿠키, 요청 바디 등을 설정

when() : 요청을 수행하는 메서드

  • 요청 메서드(GET, POST, PUT, DELETE 등)를 설정

then() : 응답을 검증하는 메서드

  • 응답 코드, 헤더, 바디 등을 검증

extract() : 응답에서 값을 추출하는 메서드로, JSON 응답에서 JSON 객체, 배열, 문자열 등을 추출할 수 있다.

 

✔ RestAssured를 사용한 테스트 코드 예시

 

    public static ExtractableResponse<Response> 제품_추가_요청(final ProductRequest request) {
        return RestAssured.given()
                .log().all()
                .contentType(JSON)
                .body(request)

                .when()
                .post("/products")

                .then()
                .log().all()
                .extract();
    }

 

    public static ExtractableResponse<Response> 카트에_아이템_추가_요청(final Member member, final CartItemCreateRequest request) {
        return RestAssured.given()
                .log().all()
                .contentType(JSON)
                .body(request)
                .auth().preemptive()
                .basic(member.getEmail(), member.getPassword())

                .when()
                .post("/cart-items")

                .then()
                .log().all()
                .extract();
    }

 

위에서 설명한 것처럼 extract()를 통해서 반환 받은 정보를 통해서 다양한 테스트를 할 수 있다.

아래처럼 테스트하게 되면 인수테스트라고 볼 수 있다.

 

    @Test
    void 멤버의_주문_목록을_조회할_수_있다() {
        final Member savedMember = memberRepository.addMember(MEMBER_GITCHAN, JOIN_EVENT_POINT);
        final Long product1Id = 제품_추가하고_아이디_반환(PRODUCT_REQUEST_CAMERA_EOS_M200);
        final Long product2Id = 제품_추가하고_아이디_반환(PRODUCT_REQUEST_AIRPOD);
        final Long cartItem1Id = 카트에_아이템_추가하고_아이디_반환(savedMember, new CartItemCreateRequest(product1Id, 1));
        final Long cartItem2Id = 카트에_아이템_추가하고_아이디_반환(savedMember, new CartItemCreateRequest(product2Id, 2));

        final int originalPrice = 1_543_490;
        final int usedPoint = 1000;
        final long orderHistoryId = 카트_아이템_주문하고_주문_히스토리_아이디_반환(
                savedMember,
                new PayRequest(List.of(cartItem1Id, cartItem2Id), originalPrice, usedPoint)
        );

        final ExtractableResponse<Response> response = 멤버의_주문_목록_조회_요청(savedMember);

        assertAll(
                () -> assertThat(response.statusCode()).isEqualTo(OK.value()),
                () -> assertThat(response.jsonPath().getList("orderId", Long.class).get(0)).isEqualTo(orderHistoryId),
                () -> assertThat(response.jsonPath().getList("orderPrice", Integer.class).get(0)).isEqualTo(originalPrice - usedPoint),
                () -> assertThat(response.jsonPath().getList("totalAmount", Integer.class).get(0)).isEqualTo(2),
                () -> assertThat(response.jsonPath().getList("previewName", String.class).get(0)).isNotBlank()
        );
    }

 

 

인수테스트에 대해서 자세히 알고 싶다면, 이 포스팅을 참고하면 좋을 것 같다!

반응형