Java 및 REST Assured를 사용한 API 테스트 - 시작

개술


REST Assured는 API 엔드포인트의 자동화 테스트에 도움이 되는 오픈 소스 Java 라이브러리입니다.이 글은 로컬 기기에서 기본적인 안심 테스트를 시작하고 운행하는 데 필요한 절차를 소개하고 싶습니다.
REST Assured에 대한 자세한 내용을 알기 전에 API 자동 테스트란 무엇입니까?
테스트 피라미드는 테스트 유형을 직관적으로 묘사하고 각 테스트 유형이 얼마나 많이 만들어지는지에 대한 일반적인 지도 원칙을 제시했다.대량의 유닛 테스트와 소량의 엔드-투-엔드 UI 테스트가 필요합니다.

피라미드의 중간은 API 테스트입니다.API 테스트는 사용자 인터페이스(UI)를 제외한 API 레벨에서 응용 프로그램을 검증합니다.이 때문에 API 테스트는 일반적으로 UI 테스트보다 더 빠르고 취약하지 않습니다.
과거에 나는 PostmanKarate 등의 도구를 사용하여 자동화 API 테스트를 한 적이 있다.나는 최근에 REST Assured를 탐색하기 시작했고, 나에게 또 다른 API 테스트 도구를 제공했다.

오이와 API 테스트


Gherkin은 일반적으로 최종 사용자의 각도에서 응용 프로그램의 행동을 설명하는 데 사용되며, Cucumber 등 도구와 함께 자동화 테스트를 만드는 데 사용될 수 있다.오이는 익숙한 give/When/Then 문법을 사용한다.
REST Assured는 동일한 키워드를 사용하여 구축 테스트에 공통 참조 포인트를 제공하는 매끄러운 API를 사용합니다.이것은 너의 테스트를 더욱 읽을 수 있고 이해하기 쉽게 할 것이다.

안녕 세상


그렇다면 안심 테스트는 어떤 것일까?우리 기초부터 시작합시다.
    @Test
    public void checkEmployeeStatus() {
        // @formatter:off
        given().
        when().
                get("http://dummy.restapiexample.com/api/v1/employees").
        then().
                assertThat().
                statusCode(200);
        // @formatter:on
    }
이 예는 아마도 자명한 것일 것이다.상태 확인 코드가 200인 GET 요청을 보냈을 뿐입니다.
이제 기계에서 이 간단한 예시를 실행하려면 무엇을 해야 하는지 보여 드리겠습니다.

운영 체제 및 IDE


결국 REST Assured 라이브러리를 활용하기 위해 Java 클래스를 구축할 뿐입니다.MacOS, Linux 또는 Windows에서 테스트를 실행할 수 있습니다.설치해야 합니다Java JDK.
IDE의 경우 원하는 모든 것을 사용할 수 있습니다.내가 사용하는 것은 Community Edition of IntelliJ IDEA이지만, 물론 이러한 개념은 Eclipse와 같은 IDE, 심지어 간단한 텍스트 편집기에도 응용될 것이다.이 연습에서는 IntelliJ IDEA를 참조합니다.

프로젝트 만들기


아이디어를 열고 새로운 Maven 프로젝트를 만듭니다.우리의 간단한 예시를 운행하기 위해서 우리는 몇 가지 일을 해야 한다.
  • REST Assured 및 TestNG 종속성을 포함하도록 pom 파일을 업데이트합니다.
  • <dependencies>
            <dependency>
                <groupId>io.rest-assured</groupId>
                <artifactId>rest-assured</artifactId>
                <version>4.2.0</version>
                <scope>test</scope>
            </dependency>
            <dependency>
                <groupId>org.testng</groupId>
                <artifactId>testng</artifactId>
                <version>7.3.0</version>
                <scope>test</scope>
            </dependency>
        </dependencies>
    
  • src/test/java에 Java 클래스를 만듭니다.
  • import org.testng.annotations.Test;
    
    import static io.restassured.RestAssured.given;
    
    public class HelloWorld {
    
        @Test
        public void checkEmployeeStatus() {
            // @formatter:off
            given().
            when().
                    get("http://dummy.restapiexample.com/api/v1/employees").
            then().
                    assertThat().
                    statusCode(200);
            // @formatter:on
        }
    }
    
    테스트 방법을 마우스 오른쪽 버튼으로 클릭하고 테스트를 실행합니다.

    TestNG 오류 "TestNG는 기본적으로 안전하지 않은 Url에서 DTD를 불러오는 것을 사용하지 않습니다"가 발생하면 메시지의 설명에 따라 실행하고 실행 설정에서 인자[-Dtestng.dtd.http=true]를 사용합니다.
    당신이 성공적인 테스트를 볼 수 있기를 바랍니다.

    테스트 실패


    이 테스트가 정말 우리가 상상했던 대로인가요?우리는 그것을 실패하게 함으로써 답을 찾아낼 것이다.단점을 잘못된 내용으로 변경합니다. 예를 들어 http://dummy.restapiexample.com/api/v1/employees-invalid테스트를 다시 실행합니다.실패하고 메시지가 표시될 것입니다. Expected status code <200> but was <404>이것은 우리의 테스트가 우리가 예상한 대로 진행되었음을 나타낸다. 또한 우리가 무효한 단점을 가진 404를 얻었다는 것을 나타낸다.계속하고 올바른 URL로 돌아가서 통과 여부를 다시 확인합니다.
    이제 404가 예상되었는지 확인하기 위해 다른 노드의 무효한 테스트를 만듭니다.
    @Test
        public void checkInvalidUrlReturns404() {
            // @formatter:off
            given().
            when().
                    get("http://dummy.restapiexample.com/api/v1/employees-invalid").
            then().
                    assertThat().
                    statusCode(404);
            // @formatter:on
        }
    
    이 테스트를 실행하고 녹색인지 확인하십시오.

    종료점에서 반환된 데이터 보기


    현재 우리는 몇 가지 기본적인 테스트가 실행 중이다.유효한 단점을 사용하는 첫 번째 테스트로 돌아갑시다.이 단점에서 어떤 데이터를 되돌려줍니까?
    우리의 현재 테스트는 어떤 내용도 검증하지 않았고, 데이터를 되돌려 주는 로그도 표시하지 않았다.테스트에 log().body()를 추가하여 다음과 같이 변경합니다.
    @Test
        public void checkEmployeeStatus() {
            // @formatter:off
            given().
            when().
                    get("http://dummy.restapiexample.com/api/v1/employees").
            then().
                    assertThat().
                    statusCode(200).
                    log().body();
            // @formatter:on
        }
    
    테스트를 실행합니다.JSON 응답은 콘솔 로그에 표시되어야 합니다.

    이것은 매우 멋있지만, 현실 세계에서, 당신은 로그인에 실패하고 싶을 수도 있습니다.이것은log().ifValidationFails()을 통해 실현할 수 있다.테스트가 실패할 때만 기록하도록 테스트를 계속하고 업데이트합니다.상태 코드를 확인하기 전에 다음과 같이 ifValidationFails 변경 사항을 적용해야 합니다.
     @Test
        public void checkEmployeeStatus() {
            // @formatter:off
            given().
            when().
                    get("http://dummy.restapiexample.com/api/v1/employees").
            then().
                    assertThat().
                    log().ifValidationFails().
                    statusCode(200);
            // @formatter:on
        }
    
    물론, 로그를 얻었는지 확인하고, 로그가 예상대로 작동하는지 확인해야 합니다.

    코드 포맷


    REST-Assured 문이 @formatter:off@formatter:on 태그에 포함되어 있음을 알 수 있습니다.내가 이렇게 하는 것은 오이 라인 아래에서 축소하는 것을 좋아하기 때문이다. (주어진 시간/그리고/그리고). 그러나 IDEA code reformat 기능은 이 표준에 부합되지 않는다.IDEAcode reformat에서 밀어맞춤 형식을 삭제하므로 서식 적용 프로그램을 닫았습니다.
    이렇게 하려면 IDEA의 코드 스타일 기본 설정에서 주석에서 포맷 프로그램 태그를 활성화해야 합니다.

    마무리


    그래서'안심'의 힘을 맛볼 수 있었으면 좋겠어요.제 글에서 유효 부하 검증, JSON 모드 검증, 발표와 삭제 등 더 높은 안심 주제를 소개하겠습니다.
    너는 my Github project에서 이 블로그 글의 전체 코드를 찾을 수 있다.
    테스트 유쾌!

    좋은 웹페이지 즐겨찾기