김태오

jmeter 본문

testing

jmeter

ystc1247 2023. 10. 19. 16:55

JMeter 를 사용한 load 및 performance testing을 해볼 것이다.

JMeter는 unit testing tool 이며, Java 기반 application에 초점이 맞춰져 있다. 다른 언어의 테스트 툴로는 NUnit(.NET), pytest(python) 등이 있다.

 

보통 SOAP 및 REST service testing을 위해 사용하며, Database, FTP, SFTP 등의 테스트도 가능하며, Jenkins 등에서 CI/CD integration이 가능하다.

 

사용법은 우선 공식 웹사이트에서 Apache JMeter 를 다운로드받고, extract 후 bin directory로 가서 jmeter를 run해주면 되는데, 이는 application이 아니기 때문에 독에 두거나 아이콘을 눌러 실행시킬 수 없다. macOS의 경우, Automator 를 사용해 조금 편리하게 사용할 수 있다.

 

Automator를 실행시켜 Application을 선택한 후, 왼쪽에 run shell script를 선택하여 이전의 행동을 매크로식으로 돌릴 수 있다. 예를 들어 

이런식으로 script를 작성해놓으면 directory로 가서 jmeter가 실행된다. 이후 일반 Application처럼 실행이 가능하다.

이제 스트레스 테스트를 해보는데, Postman 등의 API testing tools에서는 한번에 한번의 request를 할 수 있는 반면 JMeter에서는 한번 실행으로 여러 개의 request가 가능하다. 

여기에서 thread 수, loop count 등이 설정 가능한데, 이러면 request가 한번에 10*20 번 날라간다.

테스트를 설정하려면 Thread Group -> Add -> Sampler -> HTTP Request로 가면 되는데, 여기서 protocol (http / https ..) 와 server host , port number , request method 를 설정한다.

 

간단한 GET request같은 경우 parameter가 따로 없는 경우 많겠지만, POST 나 PATCH 등의 경우 body data가 추가로 필요한데, 이 부분도 설정이 가능하다.

이 부분을 static으로 고정할 수도 있고, 매번 다른 데이터로 요청을 보내고 싶다면, csv file을 첨부하는 것도 가능하다. 아니면 간단하게 randomization script를 짜도 된다.

script를 쓰고 싶다면 Add -> Pre Processor -> JR223 preprocessor 로 가면 되는데, groovy로 짜놓으면 편하다.

int wordLength = (int) (Math.random() * 5) + 1;

StringBuilder word = new StringBuilder();

for (int i = 0; i < wordLength; i++) {
    char randomChar = (char) ((int) (Math.random() * (0xD7A3 - 0xAC00 + 1)) + 0xAC00);
    word.append(randomChar);
}

vars.put("KoreanWord", word.toString());

이러면 KoreanWord에 랜덤 string이 저장되는데, 이걸 그냥 parameter 탭에서 value : {KoreanWord} 식으로 넣어주면 된다.

 

이제 실행시킨 후 결과를 봐야 하는데, Thread Group -> Add -> Listener 로 가면 Result Tree, Summary Report 등이 있다.

 

이런 식으로 이런저런 metric을 볼 수 있다.

 

여기서 보는 것보다 Grafana 등 metric tool이 설정되어 있다면 거기에서 보는게 더 상세하게 잘 볼 수 있다.

CPU 사용량 metrics인데, 테스트 당시 급격한 상승을 볼 수 있다.

http request count도 볼 수 있다.