@Beforepublicvoidbefore() { request.setHeaders(headers)CookieManager.addCookies(cookies) grinder.logger.info("Before Test. Initialize headers and cookies.")}
4. @Test
역할: 실제 테스트를 수행하는 메서드입니다.
사용 시점: 테스트하고자 하는 부하 테스트 코드를 작성할 때 사용.
예시 코드:
@Testpublicvoidtest() {HTTPResponse response = request.GET("https://airdrop-api.dev.memecore.org", params)if (response.statusCode ==301|| response.statusCode ==302) { grinder.logger.warn("Warning. The response may not be correct. The response code was {}.", response.statusCode) } else {assertThat(response.statusCode, is(200)) }}
부하 테스트 구조 요약
프로세스: 하나의 테스트 실행 단위.
@BeforeProcess로 초기 설정 수행.
스레드: 프로세스 내에서 병렬로 실행되는 부하 단위.
@BeforeThread로 스레드별 초기화 작업 수행.
테스트: 각 스레드가 수행하는 개별 테스트 작업.
@Before로 각 테스트에 필요한 공통 설정 수행.
@Test로 실제 부하 테스트 코드를 작성.
어노테이션을 이용한 테스트 스크립트 예시
import staticnet.grinder.script.Grinder.grinderimport staticorg.junit.Assert.*import staticorg.hamcrest.Matchers.*importnet.grinder.script.GTestimportnet.grinder.scriptengine.groovy.junit.GrinderRunnerimportnet.grinder.scriptengine.groovy.junit.annotation.BeforeProcessimportnet.grinder.scriptengine.groovy.junit.annotation.BeforeThreadimportorg.junit.Beforeimportorg.junit.Testimportorg.junit.runner.RunWithimportorg.ngrinder.http.HTTPRequestimportorg.ngrinder.http.HTTPResponseimportorg.ngrinder.http.cookie.CookieManager@RunWith(GrinderRunner)classTestRunner {publicstaticGTest testpublicstaticHTTPRequest requestpublicstaticMap<String, String> headers = [:]publicstaticMap<String, Object> params = [:]@BeforeProcesspublicstaticvoidbeforeProcess() { test =newGTest(1, "airdrop-api.dev.memecore.org") request =newHTTPRequest() grinder.logger.info("Before Process.") }@BeforeThreadpublicvoidbeforeThread() { test.record(this, "test") grinder.statistics.delayReports =true grinder.logger.info("Before Thread.") }@Beforepublicvoidbefore() { request.setHeaders(headers)CookieManager.addCookies([]) grinder.logger.info("Before Test. Initialize headers and cookies.") }@Testpublicvoidtest() {HTTPResponse response = request.GET("https://airdrop-api.dev.memecore.org", params)if (response.statusCode ==301|| response.statusCode ==302) { grinder.logger.warn("Warning. The response may not be correct. The response code was {}.", response.statusCode)
} else {assertThat(response.statusCode, is(200)) } }}
추가 질문
Q1: 스크립트에서 프로세스와 스레드의 개수를 어떻게 조절하나?
Q2: 각 테스트 메서드의 실행 결과를 레포트에 표시하는 방법은 무엇인가?
Q3: nGrinder에서 스레드 간 데이터를 공유하거나 프로세스 간 데이터를 공유할 수 있나?