오늘은 프로젝트 27일차이다.
오늘은 어제 진행했던 ngrinder의 문제를 해결하기 위해 아침부터 분주하게 했으나 하다가 답이 안 나와서 전부 리셋을 하고 진행했다. 리셋하고 처음부터 도커에 설치를 하고 시작을 하니 전에 입력했던 명령어를 드디어 윈도우 볼륨이 아닌 리눅스 볼륨으로 입력해도 잘 생성 됐다.
생성을 하고 나서 기분 좋게 테스트를 진행해 봤다.
초기 테스트를 진행하기 위해서 스크립트를 작성해야 된다.
아래는 테스트 코드이고 여기서 본인테스트에 맞게 수정을 진행하면 된다.
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 static net.grinder.util.GrinderUtils.* // You can use this if you're using nGrinder after 3.2.3
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
/**
* A simple example using the HTTP plugin that shows the retrieval of a single page via HTTP.
*
* This script is automatically generated by ngrinder.
*
* @author admin
*/
@RunWith(GrinderRunner)
class TestRunner {
public static GTest test
public static HTTPRequest request
public static Map<String, String> headers = [:]
public static Map<String, Object> params = [:]
public static List<Cookie> cookies = []
@BeforeProcess
public static void beforeProcess() {
HTTPRequestControl.setConnectionTimeout(300000)
test = new GTest(1, "api.ticket.auction.shop")
request = new HTTPRequest()
grinder.logger.info("before process.")
}
@BeforeThread
public void beforeThread() {
test.record(this, "test")
grinder.statistics.delayReports = true
grinder.logger.info("before thread.")
}
@Before
public void before() {
request.setHeaders(headers)
CookieManager.addCookies(cookies)
grinder.logger.info("before. init headers and cookies")
}
@Test
public void test() {
HTTPResponse response = request.GET("https://www.google.com", 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))
}
}
}
스크립트를 완성했다면 이제 PerformanceTest를 클릭하여 CreateTest를 입력하면 아래의 사진의 화면이 나온다.
각각의 입력값들은 설명하기엔 설명이 너무 길어짐으로 찾아보시길 권장한다.
설정을 마치고 Clone and Start를 진행하면 아래의 이미지처럼 실제로 사이트에 요청을 보내면서 테스트를 진행한다.
참고로 테스트하면서 느낀 것이지만 본인의 로컬 컴퓨터의 하드웨어 성능이 어느 정도 나와야 원활한 테스튿가 가능하다.
이미지는 구글사이트 테스트를 진행했지만 실제로는 지금 배포 중인 서비스를 테스트를 했었다.(저장이 될 줄 알았는데 컴퓨터 재부팅하고 나니 테스트 기록이 리셋 됐다....)
테스트를 하면서 설정해 보면서 vuser per agent의 수를 늘려서 테스트를 진행했다. 나의 로컬에서의 한계는 10명의 vuser per agent가 TPS 200~ 230을 3분 요청하는 것이 전부였다. 만약에 요청수를 늘리거나 agent를 늘리면 메모리 부족으로 테스트가 time Exception이 발생하면서 중단됐다. 대용량 테스트를 하기에는 너무 모자란 수치였다.
결국 마지막으로 현재 진행 중인 프로젝트의 부하테스트를 진행하기 위해서는 AWS에서 EC2의 서버를 생성해 테스트를 진행해 볼 예정이다. 물론 현재 서비스 배포 중인 사이트를 최대한 방해하지 않는 선에서 Private subnet안에 생성하여 테스트를 진행할 것이다.
'내일 배움 캠프' 카테고리의 다른 글
2024-02-01 (0) | 2024.02.04 |
---|---|
2024-01-31 (0) | 2024.02.02 |
2024-01-29 (0) | 2024.01.30 |
2024-01-26 (1) | 2024.01.27 |
2024-01-25 (1) | 2024.01.27 |