REST Assured API 테스트 튜토리얼

⚡ 스마트 요약

REST Assured는 다음과 같은 기업으로 자리매김합니다. JavaREST API 자동화 테스트를 간소화하는 오픈 소스 라이브러리입니다. 이 프레임워크를 통해 품질 엔지니어는 깔끔한 BDD 스타일 구문과 원활한 Maven 통합을 사용하여 복잡한 JSON 응답, 헤더, 상태 코드 및 응답 시간을 검증할 수 있습니다.

  • ⚙️ Foundation 설정 : 구성 Java, EclipseREST Assured 테스트 스크립트를 처음 작성하기 전에 Maven 종속성을 먼저 확인하십시오.
  • 📐 구문 마스터리: Given-When-Then 패턴을 적용하여 API 요청을 읽기 쉽고 비즈니스 친화적인 형식으로 표현하세요.
  • 🔍 세부적인 유효성 검사: Extrac응답 본문, 상태 코드, 헤더, 콘텐츠 유형 및 타이밍을 유려한 체인을 통해 전달합니다.
  • 🧩 경로 탐색: XPath와 유사한 점 표기법을 사용하여 중첩된 JSON 값을 탐색합니다. Selenium 정확한 주장을 위해서.
  • 🛡️ CI/CD 통합: REST Assured를 다음과 결합하세요 TestNG or JUnit API 검사를 자동화된 빌드 파이프라인에 직접 포함시키기 위해서입니다.

REST Assured 튜토리얼

안심이란 무엇입니까?

안심 Java 라이브러리를 사용하여 REST API를 테스트할 수 있으며 Maven과 잘 통합됩니다. 매우 효율적인 매칭 기술을 갖추고 있어 예상 결과를 단언하는 것도 매우 간단합니다. Rest Assured에는 JSON 구조가 아무리 복잡하더라도 요청 및 응답의 거의 모든 부분에서 데이터를 가져오는 방법이 있습니다.

테스트 커뮤니티에 API 자동화 테스트는 여전히 새롭고 틈새 시장입니다. JSON의 복잡성으로 인해 API 테스트는 미개척 분야입니다. 하지만 그렇다고 해서 테스트 프로세스에서 덜 중요한 것은 아닙니다. Rest Assured.io 프레임워크는 핵심 자바 기본을 사용하여 매우 간단하게 만들었기 때문에 배우기에 매우 바람직한 것입니다.

왜 Rest-Assured가 필요한가요?

당신이 그것을 펼친다고 상상해 보세요 Google 지도 보기에서 가고 싶은 곳을 찾아보세요. 주변 식당, 주요 여행사에서 제공하는 교통편 정보 등 다양한 선택지가 바로 눈앞에 펼쳐집니다. 하지만 우리는 모두 이것이 완벽한 해결책은 아니라는 것을 알고 있습니다. Google 제품인데, 그렇다면 어떻게 Google 그것들을 표시할 수 있을까요? 이는 해당 제공업체의 공개 API를 사용합니다. 이제 UI가 구축되거나 개발되기 전이라도 이러한 설정을 테스트해야 한다면 API 테스트는 매우 중요해집니다. 다양한 데이터 조합으로 반복적으로 테스트해야 하므로 자동화에 매우 적합한 사례입니다.

이전에는 팀들이 다음과 같은 동적 언어를 사용했습니다. Groovy 이를 달성하기 위해 루비를 사용했지만, 쉽지 않았습니다. 따라서 API 테스트는 기능 테스터들 사이에서 널리 활용되지 않았습니다.

하지만 Rest Assured를 사용하면 기본적인 지식만 있다면 API 자동화 테스트와 사용자 친화적인 맞춤 설정을 통한 간단한 HTTPS 요청 전송이 간편해집니다. JavaRest Assured는 API 테스트 및 통합 테스트를 이해하는 데 도움이 됩니다. Rest Assured를 사용하면 백엔드에 대한 강력한 신뢰도를 확보할 수 있으므로 프런트엔드 테스터는 UI 및 클라이언트 측 작업에 집중할 수 있습니다. Rest Assured는 오픈 소스이며, 지속적인 메서드 및 라이브러리 추가를 통해 API 자동화에 탁월한 선택지가 되었습니다.

REST Assured vs Postman: 주요 차이점

REST Assured와 Postman REST API를 검증하는 데 사용되는 도구들은 다양하지만, 각각 테스트 라이프사이클의 서로 다른 단계에 적합합니다. 적절한 도구를 선택하는 것은 팀의 역량, 프로젝트 범위, 그리고 통합 요구 사항에 따라 달라집니다.

아래 안심하세요 Postman
타입 Java 코드 기반 자동화를 위한 라이브러리 스크립팅을 지원하는 GUI 기반 API 클라이언트
최상의 사용 사례 지속적 통합 파이프라인 및 회귀 테스트 스위트 수동 탐색 및 빠른 API 확인
기술 요구 사항 핵심 Java 필요한 지식 최소한의 코딩; 사용 Java스크립트 조각
통계 보고서 와 통합 TestNG, JUnit그리고 얼루어 Newman CLI를 통한 내장 실행 요약

많은 팀이 사용합니다 Postman 초기 프로토타입용ping API 연결이 완료되면 자동 회귀 테스트를 위해 REST Assured로 전환하십시오.tract가 안정화됩니다.

Rest Assured.io를 설정하는 방법 Eclipse

REST Assured를 설정하려면 세 가지 핵심 요소가 필요합니다. JavaIDE와 Maven이 필요합니다. 나중에 빌드 오류가 발생하는 것을 방지하려면 아래 단계를 따르십시오.

1 단계) 설치 Java. 이것을 참고하세요 안내

2단계) 시작하려면 IDE를 다운로드하세요.

3단계) ​​Maven을 설치하고 Eclipse를 설정합니다. 참조 여기에서 확인하세요.

안심하고 설정하세요

  1. 사용하는 IDE에서 Maven 프로젝트를 생성하세요. 저희는 IntelliJ를 사용하지만, 다른 IDE를 사용하더라도 비슷한 구조를 얻을 수 있을 것입니다.
  2. POM.xml 파일을 엽니다.

REST Assured Maven 설정을 위한 프로젝트 구조

REST Assured Maven 워크스페이스의 프로젝트 구조

Rest Assured.io를 위해: Java 버전 <9 사용자:

POM.xml에 아래 종속성을 추가합니다.

<dependency>
<groupId>io.rest-assured</groupId>
<artifactId>json-path</artifactId>
<version>4.2.0</version>
<scope>test</scope>
</dependency>


<dependency>
<groupId>io.rest-assured</groupId>
<artifactId>xml-path</artifactId>
<version>4.2.0</version>
<scope>test</scope>
</dependency>


<dependency>
<groupId>io.rest-assured</groupId>
<artifactId>json-schema-validator</artifactId>
<version>4.2.0</version>
<scope>test</scope>
</dependency>

Rest Assured.io를 위해: Java 버전 9 이상 사용자:

<dependency>
<groupId>io.rest-assured</groupId>
<artifactId>rest-assured-all</artifactId>
<version>4.2.0</version>
<scope>test</scope>
</dependency>

문제 해결 :

오류가 발생하거나 필요한 파일이 제대로 다운로드되었는지 확실하지 않은 경우 다음 단계를 따르세요.

  1. 모든 종속성을 가져오려면 Maven 빌드를 수행하십시오. Maven 설정에 대한 도움말은 다음에서 찾을 수 있습니다. Guru99.
  2. 오류가 계속 발생하면 Maven clean을 실행한 다음 Maven install을 실행하십시오. 그러면 빌드가 오류 없이 완료될 것입니다.
  3. 아래 import 문을 추가하세요 Java 클래스를 확인하고 컴파일 오류가 없는지 확인하십시오.
import io.restassured.RestAssured.*;
import io.restassured.matcher.RestAssuredMatchers.*;
import org.hamcrest.Matchers.*;

첫 번째 간단한 Rest Assured 스크립트

필요한 라이브러리들이 준비되었으니 이제 첫 번째 스크립트를 작성할 수 있습니다. 이 프레임워크는 행동 주도 개발(BDD) 방식을 따르기 때문에 마치 영어처럼 읽기 쉽습니다.

구문 :

Rest Assured.io의 구문은 BDD와 매우 유사하고 이해하기 쉽기 때문에 프레임워크에서 가장 읽기 쉬운 부분입니다.

Given().
        param("x", "y").
        header("z", "w").
when().
Method().
Then().
        statusCode(XXX).
        body("x", "y", equalTo("z"));

설명 :

Code 설명
주어진() 'Given' 키워드를 사용하면 배경을 설정할 수 있습니다. 여기에는 요청 헤더, 쿼리 및 경로 매개변수, 본문, 쿠키를 전달할 수 있습니다. 이러한 항목이 요청에 필요하지 않은 경우 이 부분은 선택 사항입니다.
언제() 'when' 키워드는 시나리오의 전제를 나타냅니다. 예를 들어, 무언가를 얻거나 게시하거나 넣을 때 다른 작업을 수행합니다.
방법() 이 부분을 CRUD 작업(get/post/put/delete) 중 하나로 대체하십시오.
그 다음에() 어설션 및 매처 조건을 여기에 작성하세요.

이제 기본적인 설정과 구문에 대한 배경 지식을 갖추었으니, 간단한 테스트 코드를 하나 만들어 보겠습니다. 구조가 다소 생소하게 느껴지더라도 괜찮습니다. 코드를 계속 작성하고 각 줄을 해석하다 보면 금방 익숙해질 것입니다.

무엇을 가져올 건가요?

브라우저를 열고 – https://demo.guru99.com/V4/sinkministatement.php?CUSTOMER_ID=68195&PASSWORD=1234!&Account_No=1. 아래와 같은 내용이 표시되는지 확인하세요.

Rest Assured 스크립트 API 응답 예시

REST Assured에서 캡처한 API 응답 샘플

요청에 대한 응답을 받으려고 할 때 브라우저에서 오류가 발생하는 경우:

  1. HTTPS 또는 HTTP를 사용했는지 확인하십시오. 브라우저 설정에 안전하지 않은 웹사이트 차단 기능이 있을 수 있습니다.
  2. 프록시 또는 방화벽이 브라우저에서 웹사이트를 여는 것을 차단하고 있는지 확인하십시오.

*주의 사항 - 여기서는 헤더도, 본문도, 쿠키도 사용하지 않았습니다. URL그리고 기존 콘텐츠를 게시하거나 업데이트하는 것이 아니라 API에서 콘텐츠를 가져오는 것입니다. 따라서 이는 GET 호출입니다. 첫 번째 테스트를 더 잘 이해하려면 이 점을 기억하세요.

테스트 목적:

스크립트의 목표는 Rest Assured를 통해 브라우저에서 받은 것과 동일한 출력을 IDE 콘솔에 인쇄하는 것입니다.

아래 단계에 따라 이를 코딩해 보겠습니다.

응답 본문 받기

단계 1) “myFirstRestAssuredClass”라는 이름의 클래스를 생성하세요.

단계 2) “getResponseBody”라는 메서드를 생성하세요.

단계 3) 이전에 배웠던 given, when, then의 구조와 유사하게 아래 코드를 입력하세요.

주어진(). -> 헤더가 필요하지 않으며 쿼리나 경로 매개변수도 없습니다.

when(). -> 특정 조건 설정 없음.

얻다('https://demo.guru99.com/V4/sinkministatement.php?CUSTOMER_ID=68195&PASSWORD=1234!&Account_No=1'). -> 오직 URL 공급되어야 합니다.

then(). -> 특별한 어설션이 필요하지 않습니다.

log().all() -> 모든 응답을 가져온 후 응답, 헤더 및 요청이 반환하는 모든 내용을 로그에 기록합니다.

public static void getResponseBody(){
   given().when().get("https://demo.guru99.com/V4/sinkministatement.php?CUSTOMER_ID=68195&PASSWORD=1234!&Account_No=1").then().log()
  .all();

}

이제 다음 사항에 주목하세요. URL 사용된 코드가 길고 가독성이 떨어집니다. 자세히 살펴보면 3개의 쿼리 매개변수가 사용되고 있음을 알 수 있습니다.

  1. 고객 ID
  2. 비밀번호
  3. 계정 없음

Rest Assured를 사용하면 쿼리, 경로, 헤더 매개변수 등 모든 부분을 개별적으로 전달할 수 있어 코드 가독성과 유지보수성을 향상시킬 수 있습니다. 또한 필요에 따라 외부 파일의 데이터를 매개변수화할 수도 있습니다.

쿼리 매개변수를 사용하기 위해 구문 정의로 돌아가서 모든 매개변수가 주어진 일부로 전달되는지 확인합니다.

public static void getResponseBody(){

   given().queryParam("CUSTOMER_ID","68195")
           .queryParam("PASSWORD","1234!")
           .queryParam("Account_No","1")
           .when().get("https://demo.guru99.com/V4/sinkministatement.php").then().log()
           .body();
}

**참고로, "모두" 대신 "본문"을 사용했습니다. 이는 설명을 돕기 위함입니다.**trac답변 본문만 해당됩니다.

출력:

응답 상태 코드 가져오기

다음으로 스크립트로 작성할 방법은 상태 코드를 가져와서 유효성 검사를 수행하는 것입니다.

단계 1) getResponseStatus()라는 메서드를 생성하세요.

단계 2) 위에서 사용한 것과 동일한 요청 구조를 사용하세요. 복사해서 붙여넣으세요.

단계 3) 로그를 남기는 대신 'getStatus'를 사용하세요.CodeRest Assured의 내장 메서드로 상태 코드 값을 가져옵니다.

단계 4) 상태 코드가 200임을 확인하려면 `assertThat().status` 키워드를 사용하십시오.Code(예상되는Code).

**메모 - URL 편의상 사용되는 변수입니다. URL 전체 API 요청을 담고 있습니다. URL.

public static void getResponseStatus(){
   int statusCode= given().queryParam("CUSTOMER_ID","68195")
           .queryParam("PASSWORD","1234!")
           .queryParam("Account_No","1") .when().get("https://demo.guru99.com/V4/sinkministatement.php").getStatusCode();
   System.out.println("The response status is "+statusCode);

   given().when().get(url).then().assertThat().statusCode(200);
}

출력:

비즈니스 필요

자동화의 기본 규칙 중 하나는 필수 조건이 모두 충족되는 경우에만 테스트가 진행되도록 체크포인트를 넣어야 한다는 것입니다. API 테스트에서 가장 기본적인 검증은 요청의 상태 코드가 2XX 형식인지 확인하는 것입니다.

지금까지의 전체 코드는 다음과 같습니다.

import java.util.ArrayList;
import static io.restassured.RestAssured.*;
import static java.util.concurrent.TimeUnit.MILLISECONDS;

public class myFirstRestAssuredClass {

   final static String url="https://demo.guru99.com/V4/sinkministatement.php?CUSTOMER_ID=68195&PASSWORD=1234!&Account_No=1";

   public static void main(String args[]) {

      getResponseBody();
     getResponseStatus();

; }

   //This will fetch the response body as is and log it. given and when are optional here
   public static void getResponseBody(){
       given().when().get(url).then().log()
      .all();

  given().queryParam("CUSTOMER_ID","68195")
               .queryParam("PASSWORD","1234!")
               .queryParam("Account_No","1") .when().get("https://demo.guru99.com/V4/sinkministatement.php").then().log().body();
   }

public static void getResponseStatus(){
   int statusCode= given().queryParam("CUSTOMER_ID","68195")
           .queryParam("PASSWORD","1234!")
           .queryParam("Account_No","1")
           .when().get("https://demo.guru99.com/V4/sinkministatement.php").getStatusCode();
   System.out.println("The response status is "+statusCode);

   given().when().get(url).then().assertThat().statusCode(200);
}

}

* 참고 :

  1. 이 시나리오에서는 200이 성공 응답입니다. 하지만 요청에 실패 응답이 필요한 경우도 있는데, 그럴 때는 4XX 또는 5XX 오류 코드를 사용할 수 있습니다. 유효하지 않은 매개변수를 입력하여 상태 코드를 변경해 보고 결과를 확인해 보세요.
  2. 조건을 주장하면 오류가 없는 한 콘솔에 인쇄되지 않습니다.

응답의 다른 부분을 가져오는 스크립트

REST Assured는 응답 본문과 상태 코드 외에도 헤더, 응답 시간 및 콘텐츠 유형을 연결 가능한 예제를 통해 노출합니다.tractor 메서드. 키워드 'ex'tract'는 이러한 특정 부품을 가져오는 데 필수적입니다.

헤더

Rest Assured는 매우 간단한 언어이며 헤더를 가져오는 것도 마찬가지로 간단합니다. 메소드 이름은 headers()입니다. 이전과 마찬가지로 동일한 작업을 수행하기 위한 독립 실행형 메서드를 만듭니다.

public static void getResponseHeaders(){
   System.out.println("The headers in the response "+
                   get(url).then().extract()
           .headers());
}

여기서는 'given().when()'이 생략되었고, 코드 줄은 get()부터 시작한다는 점에 유의하십시오. 이는 요청을 보내고 응답을 받기 전에 사전 조건이나 검증이 이루어지지 않기 때문입니다. 이러한 경우에는 'given().when()'을 사용하는 것이 선택 사항입니다.

출력 :

비즈니스 요구 사항:

후속 요청을 위해서는 인증 토큰이나 세션 쿠키를 사용해야 하는 경우가 종종 있으며, 이러한 정보는 대부분 응답 헤더에 포함되어 반환됩니다.

평균응답시간

백엔드 또는 기타 다운스트림 시스템에서 응답을 가져오는 데 필요한 시간을 얻기 위해 Rest Assured는 응답을 반환하는 데 걸리는 시간을 가져오는 적절한 timeUnit과 함께 'timeIn'이라는 메서드를 제공합니다.

public static void getResponseTime(){
  System.out.println("The time taken to fetch the response "+get(url)
         .timeIn(TimeUnit.MILLISECONDS) + " milliseconds");
}

출력:

비즈니스 요구 사항:

API 테스트에서 매우 중요한 요소 중 하나는 응답 시간입니다. 응답 시간은 애플리케이션 성능을 측정하는 지표입니다. API 호출에 걸리는 시간은 인터넷 속도, 당시 API 성능, 서버 부하 및 기타 여러 요인에 따라 달라질 수 있습니다.

콘텐츠 형식

"contentType()" 메서드를 사용하면 반환된 응답의 콘텐츠 유형을 가져올 수 있습니다.

public static void getResponseContentType(){
   System.out.println("The content type of response "+
           get(url).then().extract()
              .contentType());
}

산출

비즈니스 요구 사항:

때로는 콘텐츠 유형을 확인하는 것이 중요합니다. 이는 출처가 다른 공격으로부터 발생하는 보안 취약점을 방지하고, 전달된 콘텐츠가 API 표준을 준수하는지 확인하는 데 필수적입니다.

개별 JSON 요소 가져오기

주어진 답변을 바탕으로 총액을 계산해야 합니다. 각 금액을 가져와서 모두 더하세요.

단계 :

단계 1) 금액 필드는 "statements"라는 키를 가진 배열 안에 있으며, 이 배열은 다시 "result"라는 키를 가진 목록 안에 있습니다.

단계 2) Rest Assured는 "경로"를 사용하여 API의 값에 접근하는 메커니즘을 제공합니다.

단계 3) 금액에 접근하는 경로는 "result.statements.AMOUNT"입니다. XPath와 비슷하게 생각하시면 됩니다. Selenium.

단계 4) 컬렉션에 있는 모든 금액을 가져온 다음, 모든 값을 순회하여 합계를 계산합니다.

public static void getSpecificPartOfResponseBody(){

ArrayList<String> amounts = when().get(url).then().extract().path("result.statements.AMOUNT") ;
int sumOfAll=0;
for(String a:amounts){

    System.out.println("The amount value fetched is "+a);
    sumOfAll=sumOfAll+Integer.valueOf(a);
}
System.out.println("The total amount is "+sumOfAll);

}

참고: 금액 값은 문자열 데이터 유형이므로 합산을 위해 정수로 변환합니다.

출력:

REST Assured Test Automation을 위한 최고의 사례

기본 사항을 이해하고 나면, 체계적인 패턴을 적용하여 API 표면이 확장되더라도 테스트 스위트의 안정성을 유지할 수 있습니다. 아래의 방법들은 팀이 불안정한 테스트와 유지보수 부담을 줄이는 데 도움이 됩니다.

  1. 기지를 중앙집중화하세요 URL: 기본 URI와 인증 토큰을 단일 구성 클래스 또는 속성 파일에 저장하십시오. 이렇게 하면 중복을 방지하고 환경 전환을 간소화할 수 있습니다.
  2. 사용 요청 및 응답 명세: 재사용 가능한 RequestSpecBuilder 및 ResponseSpecBuilder 객체를 구축하세요. 이러한 객체는 여러 테스트에서 공통 헤더 또는 어설션을 공유할 때 반복적인 코드 작성을 줄여줍니다.
  3. JSON 스키마 유효성 검사: REST Assured를 json-schema-validator 모듈과 결합하여 유효성을 검사합니다.trac무결성. 스키마 검사는 하위 소비자에게 도달하기 전에 호환성을 깨뜨리는 변경 사항을 포착합니다.
  4. 테스트 데이터 외부화: 페이로드를 JSON 파일에 저장하거나 데이터 제공업체를 이용하세요. TestNG하드코딩된 데이터는 빠르게 효력을 잃습니다.
  5. 독립적인 테스트를 실행하세요: 각 테스트는 자체적으로 데이터를 설정하고 해제해야 합니다. 순서에 따라 결과가 달라지는 테스트 스위트는 병렬 CI 실행에서 예측할 수 없는 오류를 발생시킬 수 있습니다.
  6. 선택적으로 로그를 캡처합니다. 안정적인 테스트 환경에서는 `log().ifError()`를 사용하고, 디버깅 중에는 `log().all()`을 사용하세요. 자세한 로그는 CI 파이프라인 속도를 저하시키고 실제 문제를 가릴 수 있습니다.
  7. CI/CD에 연결하세요: Maven Surefire 또는 Failsafe를 통해 REST Assured 스위트를 트리거합니다. JenkinsGitHub Actions 또는 GitLab을 사용하세요. 모든 커밋에 대해 스모크 체크를 실행하고 밤새도록 전체 회귀 테스트를 실행하세요.

이러한 습관을 일찍부터 들이면 API 자동화는 취약한 병목 현상이 아니라 장기적인 자산이 됩니다.

자주 묻는 질문

네. ChatGPT나 GitHub Copilot 같은 최신 AI 비서는 API 명세에서 REST Assured 테스트 스캐폴드를 생성할 수 있습니다. 하지만 엔지니어는 생성된 코드를 병합하기 전에 어설션, 데이터 처리, 예외 상황 등을 검토해야 합니다.

AI 기반 도구는 응답 패턴을 분석하고 자체 복구 기능을 갖춘 로케이터 또는 어설션을 제안합니다. 또한 스키마 변경 사항을 표시하고, 리팩토링을 권장하며, 테스트 데이터를 자동으로 업데이트하여 API가 자주 변경될 때 수동 유지 관리 작업을 줄여줍니다.

REST Assured는 Java CI 파이프라인에서 코드 기반 자동화를 위해 개발된 라이브러리입니다. Postman 이 프로그램은 수동 탐색 및 빠른 스크립팅을 위한 GUI 클라이언트입니다. 팀은 테스트 수명 주기 전반에 걸쳐 이 두 가지 방법을 모두 활용하는 경우가 많습니다.

REST Assured는 REST 및 JSON에 최적화되어 있습니다. SOAP의 경우 원시 XML 페이로드를 전송할 수 있지만, 전용 도구(예: )를 사용해야 합니다. SoapUI WSDL 구문 분석 및 SOAP 관련 어설션에 대한 더욱 풍부한 지원을 제공합니다.

REST Assured는 다음과 자연스럽게 어울립니다. TestNG JUnit 어설션, 라이프사이클 후크 및 보고 기능을 제공합니다. Allure, Extent Reports 및 Maven Surefire는 여기에 시각화 및 CI 통합 기능을 추가합니다.

이 게시물을 요약하면 다음과 같습니다.