Java 및 REST Assured를 사용한 API 테스트 - 모드 검증

내 글에서 나는 REST Assured를 이용하여 API 테스트를 진행하는 입문 과정을 소개했고 각종 테스트 방법을 만들어서 우리의 API 단점을 검증했다.
이 글에서 나는 모델 검증에 중점을 두고 토론하고 싶으니 우리 시작합시다!

JSON 모드


JSON 모드는 JSON 대상입니다. JSON 응답 부하의 예상 문법과 구조를 정의할 수 있습니다.JSON 모드에서는 JSON 응답의 구조, 필요한 필드, 필요한 데이터 유형 등을 설명할 수 있습니다.
예를 들어, 이전 테스트의 JSON 로드를 고려하면 다음과 같습니다.
{
    "id": 1,
    "artist": "The Beatles",
    "title": "Please Please Me",
    "year": "1963"
}
저는 이 JSON 대상에 대해 특정한 요구가 있습니다. 응답이 유효하다고 생각하기 전에 이 요구들을 검증하고 싶습니다.
  • 물품에는 신분증, 예술가, 직함과 연도
  • 이 포함되어야 한다
  • 네 필드 모두 필수
  • id의 데이터 유형은 integer이고 기타 필드는 string이어야 한다.
  • 이러한 규칙은 다음과 같이 JSON 모드로 정의할 수 있습니다.
    {
      "$schema": "http://json-schema.org/draft-04/schema#",
      "type": "object",
      "properties": {
        "id": {
          "type": "integer"
        },
        "artist": {
          "type": "string"
        },
        "title": {
          "type": "string"
        },
        "year": {
          "type": "string"
        }
      },
      "required": [
        "id",
        "artist",
        "title",
        "year"
      ]
    }
    
    이 대상은 필수 필드와 데이터 형식과 관련된 규칙을 봉인해 놓았다.
    JSON 모드를 사용하면 많은 일을 할 수 있다.모델을 정의할 때 사용하는'문법'은 https://json-schema.org을 유지하고 대량의 세부 사항은 here이다.
    이 모드를 JSON 파일에 넣으면, API 호출이 되돌아오는 JSON 부하를 검증하기 위해 자동 테스트에서 사용할 수 있습니다.우리 지금 시작합시다!

    자동 테스트 검증 모드 사용


    테스트 항목과 노드 설정을 얻을 수 있는 방법을 보여 드리는 데 계속 관심을 가져 주십시오.나는 모델 검증을 포함해서 이 프로젝트를 확장할 준비가 되어 있다.

    REST-Assured 모드 검증 종속성 추가


    우선, 우리는pom에 또 다른 안심할 수 있는 의존항을 추가해야 한다.JSON 모드의 xml 파일을 검증할 수 있습니다.
    <dependency>
        <groupId>io.rest-assured</groupId>
        <artifactId>json-schema-validator</artifactId>
        <version>4.3.0</version>
        <scope>test</scope>
    </dependency>
    

    프로젝트에 제이슨 스키마 파일 추가하기


    프로젝트에 JSON 모드 파일을 넣어야 합니다.나는 src/test/resourcesalbum_schema.json이라는 파일을 만들었는데 그 내용은 위에서 토론한 내용과 같다.
    {
      "$schema": "http://json-schema.org/draft-04/schema#",
      "type": "object",
      "properties": {
        "id": {
          "type": "integer"
        },
        "artist": {
          "type": "string"
        },
        "title": {
          "type": "string"
        },
        "year": {
          "type": "string"
        }
      },
      "required": [
        "id",
        "artist",
        "title",
        "year"
      ]
    }
    
    다른 한편, 저는 https://www.liquid-technologies.com/online-json-to-schema-converter을 사용하여 JSON 모드를 생성하여 실제 부하에서 JSON 모드를 추정했습니다.

    생성 모드 검증 테스트


    마지막으로 테스트!앞에서 말한 바와 같이 자동 테스트는 API 호출을 한 다음 JSON 응답이 예상 모드와 일치하는지 확인합니다.
    우리는 이렇게 했다.
    @Test
        public void checkAlbumSchema() {
            // @formatter:off
            given().
            when().
                get("albums/1").
            then().
                log().ifValidationFails().
                assertThat().
                statusCode(200).
            and().
                contentType(ContentType.JSON).
    
    
        body(matchesJsonSchemaInClasspath("album_schema.json"));
            // @formatter:on
        }
    
    json 서버 포트를 시작하고 테스트를 실행합니다.만약 설정이 정확하다면, 당신은 녹색 테스트를 진행해야 합니다!

    여느 때와 마찬가지로, 나는 이 테스트가 실패하는 것을 볼 때까지 믿지 않는다.필수 필드를 반환하지 않도록 끝점을 변경합니다.다음과 같이 music-db.json 파일을 업데이트하여 첫 번째 앨범에서 title을 삭제할 수 있습니다.

    테스트를 다시 실행합니다.이 테스트는 실패해야 하며 필요한 필드 "title"이 없음을 나타내는 메시지가 표시됩니다.

    오류에는 실제 결과도 포함되어 있으므로 ([title])이 누락되어 있음을 알 수 있습니다.계속해서 변경 사항을 music-db.json으로 복원하고 테스트가 다시 녹색으로 바뀌는지 확인하십시오.

    응답 배열 확인 중


    이전 테스트에서는 단일 포토 앨범 객체를 반환하는 API 호출을 검증했습니다. http://localhost:3000/albums/1.우리는 또 하나의 단점을 가지고 모든 앨범을 되돌려준다. http://localhost:3000/albums.이 테스트를 만듭니다.
    이 새로운 테스트는 이전 테스트와 동일한 패턴을 따릅니다.
  • API 호출
  • 응답 JSON이 예상 JSON 모드와 일치하는지 확인
  • 유일한 차이점은 우리가 서로 다른 예상 JSON 모델을 사용할 것이다.
    이번에, 우리는 모든 앨범이 하나의 그룹으로 되돌아오기를 희망하기 때문에, 우리는 하나의 대상을 되돌아오기를 원하지 않고, 하나의 대상 그룹으로 되돌아오기를 희망한다.JSON 모드에서 이 요구 사항을 처리하는 방법은 다음과 같습니다.
    "$schema": "http://json-schema.org/draft-04/schema#",
      "type": "array",
      "items": [
        {
          "type": "object",
          "properties": {
            "id": {
              "type": "integer"
            },
            "artist": {
              "type": "string"
            },
            "title": {
              "type": "string"
            },
            "year": {
              "type": "string"
            }
          },
          "required": [
            "id",
            "artist",
            "title",
            "year"
          ]
        }
      ]
    }
    
    모드의 두 번째 줄은 우리가 하나의 그룹을 기대하는 것을 보여 줍니다.
    이전과 마찬가지로 프로젝트의 JSON 파일에 패턴을 저장합니다.나는 나의 서류를 albums_schema.json이라고 명명하고 src/test/resources에 보존한다.
    새로운 모델이 창설됨에 따라 어려운 부분은 이미 완성되었다.이제 테스트 하나만 하면 됩니다.
    @Test
        public void checkAlbumsSchema() {
            // @formatter:off
            given().
            when().
                get("albums").
            then().
                log().ifValidationFails().
                assertThat().
                statusCode(200).
            and().
                contentType(ContentType.JSON).
                body(matchesJsonSchemaInClasspath("albums_schema.json"));
            // @formatter:on
        }
    
    테스트를 실행하고 녹색으로 확인합니다.
    우리는 지금 두 개의 GET 단점의 모드 응답을 검증하는 테스트가 있습니다!

    마무리


    이 예시들이 프로젝트에서 패턴 검증을 어떻게 사용하는지 이해할 수 있기를 바랍니다.여기서 진정한 기능은 JSON 파일 정의 모델을 사용하는 능력입니다.이를 해내면 REST Assured를 사용하여 검증을 테스트에 삽입하기 쉽다.
    너는 my Github project에서 이 블로그 글의 전체 코드를 찾을 수 있다.
    제 다음 글에서 유혹 보고서의 틀을 소개하고 싶습니다. 계속 주목해 주십시오!

    좋은 웹페이지 즐겨찾기