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, Ruby와 같은 동적 언어를 사용했는데 이는 어려웠습니다. 따라서 기능 테스트에서는 API 테스트를 탐색하지 않았습니다.
하지만 Rest Assured를 사용하면 API의 자동화 테스트, 사용자 친화적인 사용자 정의로 간단한 https 요청을 보내는 것은 Java에 대한 기본 지식이 있다면 간단합니다. API 테스트와 통합 테스트를 이해해야 하지만, 그 자동화 이후 Rest Assured는 백엔드에 매우 좋은 확신을 주는 반면 프런트엔드 테스트는 UI와 클라이언트 측 작업에만 집중할 수 있습니다. Rest Assured는 많은 추가 메서드와 라이브러리가 추가된 오픈 소스이므로 API 자동화에 좋은 선택이 되었습니다.
Rest Assured.io를 설정하는 방법 Eclipse
1 단계) 설치 Java. 이것을 참고하세요 안내
2단계) 시작하려면 IDE를 다운로드하세요. 식
3단계) Maven을 설치하고 Eclipse를 설정합니다. 참조 LINK.
안심하고 설정하세요
- IDE에서 Maven 프로젝트를 만듭니다. 우리는 Intellij를 사용하고 있지만 사용 중인 모든 IDE에서 유사한 구조를 얻게 될 것입니다.
- POM.xml을 엽니다.
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를 위해 : For Java 버전 9+ 사용자:
<dependency> <groupId>io.rest-assured</groupId> <artifactId>rest-assured-all</artifactId> <version>4.2.0</version> <scope>test</scope> </dependency>
문제 해결 :
오류가 표시되고 종속성이 제대로 다운로드되었는지 확실하지 않은 경우,
- 모든 종속성을 가져오려면 Maven 빌드를 수행하세요. 다시 guru99에서 Maven 설정에 대한 도움말을 찾을 수 있습니다.
- 그래도 오류가 표시되면 Maven Clean을 수행한 후 Maven 설치를 수행하면 오류 없이 빌드되어야 합니다.
- Java 클래스에 아래 줄을 추가하면 컴파일 오류가 없는지 확인할 수 있습니다.
import io.restassured.RestAssured.*; import io.restassured.matcher.RestAssuredMatchers.*; import org.hamcrest.Matchers.*;
첫 번째 간단한 Rest Assured 스크립트
구문 :
Rest Assured.io의 구문은 BDD와 매우 비슷하고 이해하기 쉽기 때문에 가장 아름다운 부분입니다.
Given(). param("x", "y"). header("z", "w"). when(). Method(). Then(). statusCode(XXX). body("x, ”y", equalTo("z"));
설명 :
암호 | 설명 |
---|---|
주어진() | 'Given' 키워드를 사용하면 배경을 설정할 수 있습니다. 여기에서는 요청 헤더, 쿼리 및 경로 매개변수, 본문, 쿠키를 전달합니다. 요청에 해당 항목이 필요하지 않은 경우 선택 사항입니다. |
언제() | '언제' 키워드는 시나리오의 전제를 나타냅니다. 예를 들어, '언제' 무엇인가를 얻거나/게시하거나/넣을 때, 다른 일을 하십시오. |
방법() | 이것을 CRUD 작업(get/post/put/delete) 중 하나로 대체하세요. |
그 다음에() | Assert 및 Matcher 조건이 여기에 표시됩니다. |
이제 구문에 대한 설정과 배경 지식을 갖추었으므로 첫 번째 간단한 테스트를 만들어 보겠습니다. 지금까지 구조가 새로운 것처럼 보이더라도 괜찮습니다. 코드를 작성하면서 각 줄을 더 자세히 해석하면 익숙해질 것입니다.
무엇을 가져올 건가요?
브라우저를 열고 – http://demo.guru99.com/V4/sinkministatement.php?CUSTOMER_ID=68195&PASSWORD=1234!&Account_No=1
. 아래와 같은 내용이 표시되는지 확인하세요.
요청에 대한 응답을 얻으려고 할 때 브라우저에서 오류가 발생하는 경우
- Https 또는 Http를 사용했는지 확인하세요. 브라우저에 안전하지 않은 웹사이트를 열지 않도록 설정되어 있을 수 있습니다.
- 브라우저가 웹사이트를 열지 못하도록 차단하는 프록시나 방화벽이 있는지 확인하세요.
*주의 사항 – 여기에 헤더, 본문, 쿠키를 사용하지 않았습니다. 이는 URL이었고 API에서 콘텐츠를 가져오고 기존 콘텐츠를 게시하거나 업데이트하지 않으므로 GET 호출이 됩니다. 첫 번째 테스트를 더 잘 이해하려면 이것을 기억하세요.
테스트 목적:
스크립트의 목표는 Rest Assured를 통해 브라우저에서 받은 것과 동일한 출력을 IDE 콘솔에 인쇄하는 것입니다.
아래 단계에 따라 이를 코딩해 보겠습니다.
응답 본문 받기
단계 1) "myFirstRestAssuredClass"라는 클래스를 만듭니다.
단계 2) "getResponseBody"라는 메서드를 만듭니다.
단계 3) 주어진 앞에서 배운 구조와 유사하게, when, then, 아래 코드를 입력하세요.
주어진(). -> 헤더가 필요하지 않으며 쿼리나 경로 매개변수도 없습니다.
언제(). -> 특정 조건 설정 없음
얻다('http://demo.guru99.com/V4/sinkministatement.php?CUSTOMER_ID=68195&PASSWORD=1234!&Account_No=1
'). ->URL만 제공하면 됩니다.
그 다음에(). -> 특별한 주장이 필요하지 않습니다.
통나무(). all() -> 모든 응답을 가져오면 응답, 헤더, 기본적으로 요청이 반환하는 모든 것을 기록합니다.
public static void getResponseBody(){ given().when().get("http://demo.guru99.com/V4/sinkministatement.php?CUSTOMER_ID=68195&PASSWORD=1234!&Account_No=1").then().log() .all(); }
이제 사용된 URL이 길고 읽기 어렵다는 점에 유의하십시오. 자세히 살펴보면 3개의 쿼리 매개변수가 사용되고 있음을 알 수 있습니다.
- 고객 ID
- 비밀번호
- 계정 없음
Rest Assured는 모든 부분(쿼리, 경로, 헤더 매개변수)을 별도로 전달하는 데 도움이 되어 코드를 더 읽기 쉽고 유지 관리하기 쉽게 만듭니다. 또한 필요에 따라 외부 파일에서 데이터를 매개변수화할 수 있습니다.
쿼리 매개변수를 사용하기 위해 구문 정의로 돌아가서 모든 매개변수가 주어진 일부로 전달되는지 확인합니다.
public static void getResponseBody(){ given().queryParam("CUSTOMER_ID","68195") .queryParam("PASSWORD","1234!") .queryParam("Account_No","1") .when().get("http://demo.guru99.com/V4/sinkministatement.php").then().log() .body(); }
**“all” 대신 “body”를 사용했습니다. 이는 응답의 본문만 추출하는 데 도움이 됩니다.
출력:
응답 상태 코드 가져오기
우리가 스크립팅하는 다음 방법은 상태 코드를 가져오고 이를 검증하기 위한 어설션을 추가하는 것입니다.
단계 1) getResponseStatus()라는 메서드를 만듭니다.
단계 2) 위에서 사용한 것과 동일한 요청 구조를 사용하세요. 복사해서 붙여넣으세요.
단계 3) 이를 기록하는 대신 Rest Assured의 'getStatusCode' 내장 메소드를 사용하여 상태 코드 값을 가져옵니다.
단계 4) 귀하의 상태 코드가 200임을 주장하기 위해 우리는 키워드 AssertThat().statusCode(expectedCode)를 사용합니다.
**참고 – URL은 단순화를 위해 사용되는 변수입니다. URL은 전체 API 요청 URL을 보유합니다.
public static void getResponseStatus(){ int statusCode= given().queryParam("CUSTOMER_ID","68195") .queryParam("PASSWORD","1234!") .queryParam("Account_No","1") .when().get("http://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="http://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("http://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("http://demo.guru99.com/V4/sinkministatement.php").getStatusCode(); System.out.println("The response status is "+statusCode); given().when().get(url).then().assertThat().statusCode(200); } }
* 참고 :
- 200은 이 시나리오에 대한 성공적인 응답입니다. 때때로 요청도 실패해야 하는 경우가 있는데, 그런 경우에는 4XX 또는 5XX를 사용할 수 있습니다. 잘못된 매개변수를 제공하여 상태 코드를 변경해 보고 확인하세요.
- 조건을 주장하면 오류가 없는 한 콘솔에 인쇄되지 않습니다.
응답의 다른 부분을 가져오는 스크립트
응답 본문 및 응답 상태 코드 가져오기는 위 세그먼트에서 이미 다뤘습니다. 응답의 다른 부분을 가져오려면 'extract' 키워드가 매우 중요하다는 점에 유의할 가치가 있습니다.
헤더
Rest Assured는 매우 간단한 언어이며 헤더를 가져오는 것도 마찬가지로 간단합니다. 메소드 이름은 headers()입니다. 이전과 마찬가지로 동일한 작업을 수행하기 위한 독립 실행형 메서드를 만듭니다.
public static void getResponseHeaders(){ System.out.println("The headers in the response "+ get(url).then().extract() .headers()); }
여기서는 'given().when()'을 건너뛰고 코드 줄이 get()에서 시작한다는 점에 유의하세요. 이는 요청을 누르고 응답을 받기 위해 여기에 만들어진 전제 조건이나 확인이 없기 때문입니다. 그러한 경우 동일한 것을 사용하는 것은 선택 사항입니다.
출력 :
비즈니스 요구 사항:
꽤 많은 경우, 후속 요청에 대한 인증 토큰이나 세션 쿠키를 사용해야 하며, 대부분 이러한 세부 정보는 응답 헤더로 반환됩니다.
평균응답시간
백엔드 또는 기타 다운스트림 시스템에서 응답을 가져오는 데 필요한 시간을 얻기 위해 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 성능, 서버 로드 및 시간에 영향을 미치는 기타 요인에 따라 다소 시간이 걸릴 수 있습니다.
콘텐츠 형식
"contentType()" 메소드를 사용하여 반환된 응답의 content-Type을 얻을 수 있습니다.
public static void getResponseContentType(){ System.out.println("The content type of response "+ get(url).then().extract() .contentType()); }
산출
비즈니스 요구 사항:
때때로 원본 간 위협에 대한 보안 격차가 없는지 확인하거나 전달된 콘텐츠가 API 표준에 맞는지 확인하기 위해 콘텐츠 유형을 가져오는 것이 필수적입니다.
개별 JSON 요소 가져오기
주어진 응답에서 총액을 계산하라는 메시지가 표시되며, 모든 금액을 가져와서 합산해야 합니다.
단계 :
단계 1) 금액 필드는 "결과" 키가 있는 목록에 있는 키 "문"이 있는 배열 내에 있습니다.
단계 2) 안심하세요. "경로"를 사용하여 API의 값에 도달하는 메커니즘을 제공합니다.
단계 3) amount에 도달하는 경로는 "result.statements.AMOUNT"입니다. 셀레늄의 Xpath와 비슷하다고 생각하세요.
단계 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는 자동화를 가능하게 하는 Java 라이브러리 그룹입니다. 나머지 API 테스트
- 안심하세요 Java기반, 핵심 지식 Java 그걸 배우면 충분해
- 복잡한 JSON 구조에서 요청 및 응답 값을 가져오는 데 도움이 됩니다.
- 이 어플리케이션에는 XNUMXµm 및 XNUMXµm 파장에서 최대 XNUMXW의 평균 출력을 제공하는 API 요청은 다양한 헤더, 쿼리, 경로 매개변수 및 설정할 세션이나 쿠키를 사용하여 사용자 정의할 수 있습니다.
- Assert 문과 조건을 설정하는 데 도움이 됩니다.
- Rest Assured는 응답이 JSON 유형인 경우 매우 유용하지만 콘텐츠 유형 ID가 HTML 또는 일반 텍스트인 경우 메서드가 원활하게 작동하지 않을 수 있습니다.