Java 및 REST Assured를 사용한 API 테스트 - 모드 검증
16671 단어 codequalitytestingtutorialjava
이 글에서 나는 모델 검증에 중점을 두고 토론하고 싶으니 우리 시작합시다!
JSON 모드
JSON 모드는 JSON 대상입니다. JSON 응답 부하의 예상 문법과 구조를 정의할 수 있습니다.JSON 모드에서는 JSON 응답의 구조, 필요한 필드, 필요한 데이터 유형 등을 설명할 수 있습니다.
예를 들어, 이전 테스트의 JSON 로드를 고려하면 다음과 같습니다.
{
"id": 1,
"artist": "The Beatles",
"title": "Please Please Me",
"year": "1963"
}
저는 이 JSON 대상에 대해 특정한 요구가 있습니다. 응답이 유효하다고 생각하기 전에 이 요구들을 검증하고 싶습니다.
{
"id": 1,
"artist": "The Beatles",
"title": "Please Please Me",
"year": "1963"
}
id
의 데이터 유형은 integer
이고 기타 필드는 string
이어야 한다.{
"$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/resources
에 album_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.이 테스트를 만듭니다.
이 새로운 테스트는 이전 테스트와 동일한 패턴을 따릅니다.
<dependency>
<groupId>io.rest-assured</groupId>
<artifactId>json-schema-validator</artifactId>
<version>4.3.0</version>
<scope>test</scope>
</dependency>
{
"$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"
]
}
@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
}
이전 테스트에서는 단일 포토 앨범 객체를 반환하는 API 호출을 검증했습니다. http://localhost:3000/albums/1.우리는 또 하나의 단점을 가지고 모든 앨범을 되돌려준다. http://localhost:3000/albums.이 테스트를 만듭니다.
이 새로운 테스트는 이전 테스트와 동일한 패턴을 따릅니다.
이번에, 우리는 모든 앨범이 하나의 그룹으로 되돌아오기를 희망하기 때문에, 우리는 하나의 대상을 되돌아오기를 원하지 않고, 하나의 대상 그룹으로 되돌아오기를 희망한다.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에서 이 블로그 글의 전체 코드를 찾을 수 있다.
제 다음 글에서 유혹 보고서의 틀을 소개하고 싶습니다. 계속 주목해 주십시오!
Reference
이 문제에 관하여(Java 및 REST Assured를 사용한 API 테스트 - 모드 검증), 우리는 이곳에서 더 많은 자료를 발견하고 링크를 클릭하여 보았다
https://dev.to/leading-edje/api-testing-with-java-and-rest-assured-schema-validation-28f2
텍스트를 자유롭게 공유하거나 복사할 수 있습니다.하지만 이 문서의 URL은 참조 URL로 남겨 두십시오.
우수한 개발자 콘텐츠 발견에 전념
(Collection and Share based on the CC Protocol.)
Reference
이 문제에 관하여(Java 및 REST Assured를 사용한 API 테스트 - 모드 검증), 우리는 이곳에서 더 많은 자료를 발견하고 링크를 클릭하여 보았다 https://dev.to/leading-edje/api-testing-with-java-and-rest-assured-schema-validation-28f2텍스트를 자유롭게 공유하거나 복사할 수 있습니다.하지만 이 문서의 URL은 참조 URL로 남겨 두십시오.
우수한 개발자 콘텐츠 발견에 전념 (Collection and Share based on the CC Protocol.)