환경
- Java
- IntelliJ
환경 설정
Spring Test 준비하기
- https://start.spring.io/에서 아래와 같이 설정
Rest Assured Gradle 설정
plugins {
id 'java'
id 'org.springframework.boot' version '3.2.2'
id 'io.spring.dependency-management' version '1.1.4'
}
group = 'me.twpower'
version = '0.0.1-SNAPSHOT'
java {
sourceCompatibility = '21'
}
configurations {
compileOnly {
extendsFrom annotationProcessor
}
}
repositories {
mavenCentral()
}
dependencies {
implementation 'org.springframework.boot:spring-boot-starter-data-jdbc'
implementation 'org.springframework.boot:spring-boot-starter-data-jpa'
implementation 'org.springframework.boot:spring-boot-starter-jdbc'
implementation 'org.springframework.boot:spring-boot-starter-security'
implementation 'org.springframework.boot:spring-boot-starter-web'
compileOnly 'org.projectlombok:lombok'
runtimeOnly 'com.h2database:h2'
annotationProcessor 'org.projectlombok:lombok'
testImplementation 'org.springframework.boot:spring-boot-starter-test'
testImplementation 'org.springframework.security:spring-security-test'
testImplementation 'io.rest-assured:rest-assured:5.4.0' // 추가됨
}
tasks.named('test') {
useJUnitPlatform()
}
코드
given()
: 요청하기 전에 필요한 헤더나 파라미터와 같은 부분을 세팅when()
: 실제로 요청하기위해 URI나 Method를 입력then()
: 검증하기 위한 부분header
,pathParam
,queryParam
,body
,log
그리고extract
메소드 사용 방법도 아래에 추가
package me.twpower.restassuredpractice;
import io.restassured.RestAssured;
import io.restassured.response.ExtractableResponse;
import io.restassured.response.Response;
import org.junit.jupiter.api.Assertions;
import org.junit.jupiter.api.BeforeAll;
import org.junit.jupiter.api.Test;
import org.springframework.boot.test.context.SpringBootTest;
import static io.restassured.RestAssured.*;
import static org.hamcrest.Matchers.equalTo;
@SpringBootTest
public class RestAssuredPracticeTest {
@BeforeAll
static void beforeAll(){
// Setting BaseURI
RestAssured.baseURI = "http://echo.jsontest.com/";
}
@Test
void restAssuredPracticeTest() {
// JSON Example
// Request Method: GET
// Call http://echo.jsontest.com/key1/value1/key2/value2/key3/3?queryParameterKey=queryParameterValue
/*
{
"key1": "value1",
"key2": "value2",
"key3": "3"
}
*/
// given(): Start building the request part of the test io.restassured.specification.
// when(): Start building the DSL expression by sending a request without any parameters or headers etc.
// then(): Returns a validatable response that's lets you validate the response.
// given() and when() returns RequestSpecification object
ExtractableResponse<Response> extractableResponse = given().log().all().
header("Content-Type", "application/json"). // Specify the headers that'll be sent with the request.
pathParam("pathParameter", 3). // Specify a path parameter.
queryParam("queryParameterKey", "queryParameterValue"). // Specify a query parameter that'll be sent with the request.
//body(). // Specify request body.
when().
get("/key1/value1/key2/value2/key3/{pathParameter}").
then().
body("key1", equalTo("value1")).
extract();
Assertions.assertEquals(200, extractableResponse.statusCode());
Assertions.assertEquals("value1", extractableResponse.jsonPath().getString("key1"));
}
}
결과
- 성공
- 실패
java.lang.AssertionError: 1 expectation failed.
JSON path key1 doesn't match.
Expected: value2
Actual: value1