[nGrinder] multi endpoint load test script에 정의한 test들이 실행 순서를 보장 받는가?
import static net.grinder.script.Grinder.grinder;
import static org.junit.Assert.*;
import static org.hamcrest.Matchers.*;
import net.grinder.script.GTest;
import net.grinder.script.Grinder;
import net.grinder.scriptengine.groovy.junit.GrinderRunner;
import net.grinder.scriptengine.groovy.junit.annotation.BeforeProcess;
import net.grinder.scriptengine.groovy.junit.annotation.BeforeThread;
import org.junit.Before;
import org.junit.BeforeClass;
import org.junit.Test;
import org.junit.runner.RunWith;
import org.ngrinder.http.HTTPRequest;
import org.ngrinder.http.HTTPRequestControl;
import org.ngrinder.http.HTTPResponse;
import org.ngrinder.http.cookie.Cookie;
import org.ngrinder.http.cookie.CookieManager;
import java.util.Map;
import java.util.HashMap;
import java.util.List;
@RunWith(GrinderRunner)
class TestRunner {
public static GTest test1, test2, test3;
public static HTTPRequest request;
public static Map<String, String> headers = new HashMap<>();
public static List<Cookie> cookies = [];
private static final int STATUS_OK = 200;
private static final int STATUS_CREATED = 201;
public static final String BASE_URL = "";
@BeforeProcess
public static void beforeProcess() {
HTTPRequestControl.setConnectionTimeout(300000);
test1 = new GTest(1, "GET /");
test2 = new GTest(2, "GET /");
test3 = new GTest(3, "GET /");
request = new HTTPRequest();
grinder.logger.info("Setup completed before any processes.");
}
@BeforeThread
public void beforeThread() {
test1.record(this, "executeTest");
test2.record(this, "executeTest");
test3.record(this, "executeTest");
grinder.statistics.delayReports = true;
grinder.logger.info("Setup completed before each thread starts.");
}
@Test
public void executeTest() {
String token = testRequest("/", test1);
testRequestWithToken("/", test2, token);
testRequest("/", test3);
}
private String testRequest(String path, GTest test) {
String testName = "Test " + test.getNumber();
grinder.logger.info("Starting " + testName);
HTTPResponse response = request.GET(BASE_URL + path);
assertThat(testName, response.statusCode, is(STATUS_OK));
grinder.logger.info("Completed " + testName);
return response.getText(); // 이 부분을 조정하여 필요한 데이터를 반환하도록 수정
}
private void testRequestWithToken(String path, GTest test, String token) {
String testName = "Test " + test.getNumber();
grinder.logger.info("Starting " + testName);
headers.put("Authorization", "Bearer " + token); // 토큰 사용 예시
HTTPResponse response = request.GET(BASE_URL + path, headers);
assertThat(testName, response.statusCode, is(STATUS_OK));
grinder.logger.info("Completed " + testName);
}
}
Last updated