REST Assured
REST Assured๋ฅผ ์ฌ์ฉํ๋ฉด ์๋ฐ ์ ํ๋ฆฌ์ผ์ด์ ์์ ์ธ์ ํ ์คํธ๋ฅผ ์ํ ์ฝ๋๋ฅผ ์์ฑํ ์ ์๋ค. ํ์ฌ ์กฐ์ง์ ํ ์คํธ ์ปค๋ฒ๋ฆฌ์ง๋ฅผ ์ฒดํฌํ์ง ์๊ณ ๋น์ฆ๋์ค ๋ ์ด์ด๋ฅผ ์์ฃผ๋ก ํ ์คํธ ์ฝ๋๋ฅผ ์์ฑํ๊ธฐ๋ก ํ์๋ค. ์จํ๋ ๋ฏธ์ค ํํ์ B2B ์๋ฃจ์ ์ด ์๋ SaaS ์๋น์ค๋ฅผ ์ค๋นํ๋ฉด์ ํ ์คํธ ์๋ํ๋ฅผ ์ํด ๋ง์ ๊ณ ๋ฏผ์ ํ๊ณ ์๋ค. ์ผ๋จ Playwright์ Allure Report๋ฅผ ์ฌ์ฉํ๊ณ ์ ์ค๋น์ค์ด๋ผ ์ด์ ๋ง์ถฐ ์๋น์ค ๊ฐ๋ฐ ์ Allure Report์ ํตํฉํ ์ ์๋ JUnit5 + Rest Assured๋ก ํ ์คํธ ์ฝ๋๋ฅผ ์์ฑํ๋ ค๊ณ ํ๋ค.
Gradle Dependencies
Rest Assured ์ ํจ๊ป Hamcrest๋ฅผ ๋ง์ด ์ฌ์ฉํ๋ ๊ฒ ๊ฐ์๋ฐ ์คํ๋ง ๋ถํธ ์คํํฐ์ ํ ์คํธ ์์กด์ฑ์๋ ๊ธฐ๋ณธ์ ์ผ๋ก Hamcrest๋ฅผ ํฌํจํ๊ณ ์๋ค. ๋จ์ ํ ์คํธ ์ฝ๋๋ฅผ ์์ฑํ ๋ Hamcrest๋ฅผ ์ฌ์ฉํด๋ณธ์ ์ ์์ด์ ์ด๋ฒ ๊ธฐํ์ ์ ํ์ฉํด๋ณด๋๋ก ํด์ผ๊ฒ ๋ค.
dependencies {
testImplementation 'org.springframework.boot:spring-boot-starter-test'
testImplementation 'io.rest-assured:rest-assured:5.5.0'
}
Behavior Driven Development
๊ทธ๋์์ ํ ์คํธ ์ฝ๋๋ฅผ ์์ฑํ๋๋ผ๋ TDD๋ฅผ ์ํํ์ง๋ ์์์ผ๋ฉฐ ์๋ฃจ์ ์ปค์คํฐ๋ง์ด์ง ์๊ตฌ์ฌํญ์ ๋ง๋์ง๋ง ํ์ธํด์๋ค. Rest Assured๋ BDD๋ก E2E ํ ์คํธ ์ฝ๋๋ฅผ ์์ฑํ ์ ์๋๋ก ์ ๊ณตํด์ฃผ๊ธฐ ๋๋ฌธ์ ํ๋ก ํธ์๋๋ QA ์์ง๋์ด๊ฐ ์์ฑํ๋ Playwright ์๋ ๋น์ทํ๊ฒ ์์ฑํด๊ฐ ์ ์์ ๊ฒ์ผ๋ก ๋ณด์ธ๋ค.
@DisplayName("End to End Test")
@SpringBootTest(webEnvironment = SpringBootTest.WebEnvironment.RANDOM_PORT)
class DemoApplicationTests {
@LocalServerPort
int port;
@BeforeEach
void setup() {
RestAssured.port = port;
}
@Test
void whenGet_thenOk() {
RestAssured
.given()
.filter(new AllureRestAssured())
.log().all()
.header(HttpHeaders.USER_AGENT,
"Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/127.0.0.0 Safari/537.36")
.when()
.get("/")
.then()
.log().ifValidationFails()
.statusCode(HttpStatus.OK.value())
.body(Matchers.is("Hello World"));
}
}
Allure REST Assured
๊ทธ๋๋ค ํ๋ฌ๊ทธ์ธ์ ์ถ๊ฐํ๊ณ allureReport ๋๋ allureServe ํ์คํฌ๋ฅผ ์คํํ๋ฉด Allure ๋ฆฌํฌํธ๋ฅผ ํ์ธํ ์ ์๋ค.
plugins {
id 'io.qameta.allure' version '2.12.0'
}
dependencies {
testImplementation platform('io.qameta.allure:allure-bom:2.28.0')
testImplementation "io.qameta.allure:allure-junit5"
testImplementation "io.qameta.allure:allure-rest-assured"
}