본문으로 바로가기

[JMeter] 제이미터 설치 및 사용

category Java/java 2023. 5. 24. 18:03

제이미터를 사용해야하는 담당자가 되어버려서

사용해본적은 없지만, 구글링을 통해서 설치 및 사용법을 메모해 놓습니다.

설치

1. Java 설치

https://www.java.com/ko/download/

위 URL을 접속하여 jre를 다운로드 후 설치한다.

그 후, Mac의 환경설정에서 Java가 뜨는 지 확인을 한다.

만약을 위해 jdk도 설치해주라고 적혀있으나, 작동만 잘되면 상관없다는 생각으로 보류..

https://www.oracle.com/java/technologies/downloads/

 

2. brew로 JMeter 설치

맥에서는 brew로 간단하게 JMeter를 설치 가능했다.

brew install jmeter

 

3. JMeter 실행

설치가 완료된 후 아래의 명령어를 입력하면 된다고 적혀있었다.

open /usr/local/bin/jmeter

하지만 난 안됐다..

 

3-1. 설치 확인

brew list | grep jmeter

 

3-2. 파일 경로 확인

brew info jmeter

위 이미지처럼 블로그와 설치 경로가 달라서 발생한 것 같다.

3-3.  실행하기

open /opt/homebrew/Cellar/jmeter/5.5

위 경로에서 bin 폴더를 들어가서 jmeter 파일을 찾아서 실행하였다.

 

바로 실행하려면 아래와 같이 작성하면 되었으나, 혹시 모르니 폴더를 열어보는 것을 추천한다.

open /opt/homebrew/Cellar/jmeter/5.5/bin/jmeter

실행 성공!

 

출처: [생공나온 개발자]님의 'Mac에서 Jmeter설치하기'

 

실행 방법 추가 메모

jmeter

mac에서 brew로 설치한 jmeter는 "jmeter"만 입력해도 실행이 잘 되었다.

WARNING이 발생하긴 하는데, jdk를 설치 안해서 발생한 것이라고 한다.

(사용하는데 큰 문제가 없다면 여전히 설치할 생각이 없다..)

플러그인 설치

Option -> Plugin Manager -> Available Plugins

설치한 플러그인

  • 1. 3 Basic Graphs
  • Custom Thread Groups
  • jpgc - Standard Set
  • JMeter Listener pack

설치할 플러그인을 선택 후 Apply Changes and Restart JMeter를 클릭해주면 된다.

 

저는 블로그에 있는 내용대로 따라서 설치하였지만,  클릭시 우측에 간단한 설명이 나오니

읽어보거나, 찾아보고 원하는 플러그인을 설치하는 것을 추천드립니다.

 

저는 연습용이라 가장 대표적으로 쓰이는 3개의 플러그인과 JMeter Listener pack을 설치하였습니다.

 

테마 변경

※ brew로 jmeter를 실행시키다가 test-plan이 저장되지 않는 문제를 발견했다.

 

Why do I get a NoClassDefFound error when I try to save my test plan?

I installed apache-jmeter-5.1.1 and java 1.8.0_221 (8), and was walking through the getting started guide to build a web test plan in the GUI. But when I click save to save the Test Plan I receive ...

stackoverflow.com

( 같은 문제가 발생하시는 분들은 darcula가 아닌 다른 테마를 선택하시면 해결됩니다. )

Options -> Look and Feel

Darcula가 아닌 다른 모든 테마를 선택하여 확인한 후 저장이 되는 지 테스트 해보았는데

저는 Darcular 외에도 One Dark, Solarized Dark는 저장이 안되었습니다..

나머지는 밝은 계열 또는 색감이 눈이 아픈것만 남아있어서 IntelliJ 테마로 설정하였습니다.

(다크모드를 사랑하는 저에겐 너무 가혹한 JMeter..)

http 요청에 부하 테스트 (간단한 사용법)

1. 사용할 항목 추가

Test Plan(우클릭) -> Add -> Thread Group 추가

 

Thread Group에 다음 항목을 추가 시켜준다.

  • Thread Group(우클릭) -> Add -> Sampler -> Http Request
  • Thread Group(우클릭) -> Add -> Listener -> View Results Tree
  • Thread Group(우클릭) -> Add -> Listener -> Summaray Report
  • Thread Group(우클릭) -> Add -> Listener -> jp@gc - Transaction Per Second

2. 항목 설정

Thread Group

  • Number of Threads(users)
    Threads의 개수를 정한다. 물론 엄밀히 따졌을 때 쓰레드의 개수가 유저의 활동을 전부 포함할 수는 없겠지만 근사하게는 값을 도출시킬 수 있다. 쓰레드의 수가 많을수록 서버는 많은 부하를 받을 것이다.
  • Ramp-up Period(in seconds)
    한 번의 실행을 몇 초동안 완료시킬 것인지에 대한 설정 값을 의미한다.
  • Loop Count
    반복하고자 하는 횟수이다. Infinite를 누르면 무제한으로 실행하게 된다.

HTTP Request

현재 회사에서 사용하고 있는 API 중 로그인이 없어도 호출 가능한 걸로 테스트를 진행하였습니다.
Protocol, IP, Port, Path 를 설정하고 호출하면 됩니다.

 

3. 테스트 결과

View Results Tree

 

Summary Report

Transaction per Second

 

출처: [600g의 개발 블로그]님의 '[성능테스트 툴] Apache Jmeter 설치부터 간단한 사용까지..!!'

 

추가 설정 메모

Header Manager 추가

Http Request(우클릭) > Add > Config Element > HTTP Header Manager

HTML

Page를 호출해야하는 테스트가 있어서 찾아보고, 해당 페이지에 접속하여 필수적으로 필요해보이는 것들만 넣었다.

html 페이지 호출 시

Post로 Json 데이터 보낼 경우

Body에 Json 데이터를 담아서 보내는 테스트가 있었는데, 동작이 안되어서 헤더를 설정하였다..

UTF-8로 설정을 하였지만, 한글이 자꾸 ???로 변경되어서 요청되어서 해결되면 수정이 될지도..

Post 요청시

 

++MEMO

GS인증 시 사용했던 jmx파일을 받아서 둘러보면서 메모를 하고 있다..

물론 내가 시도했던 조잡한 jmx파일과는 비교하면서 무엇을 빼먹었었는지 작성하려 한다.

 

첫 번째로 눈에 띄는 것은 HTTP Request들이 Transaction Controller 하위로 묶여있다는 점이었다.

  • Transaction Controller
    트랜잭션 컨트롤러는 중첩된 테스트 요소를 수행하는 데 걸리는 전체 시간을 측정하는 추가 샘플을 생성합니다.

    두 가지 작동 모드가 있습니다.
      - 중첩된 샘플 뒤에 추가 샘플이 추가됩니다.
      - 추가 샘플은 중첩된 샘플의 상위로 추가됩니다.

    "Include duration of timer and pre-post processors in geneated sampe"이 선택되지 않은 한 기본적으로 타이머 전/후 프로세서의 처리 시간을 제외한 충첩 샘플러의 모든 시간이 포함됩니다. 클럭 해상도에 따라 개별 샘플러와 타이머의 합보다 약간 더 길 수 있습니다.

    생성된 샘플은 모든 하위 샘플이 성공한 경우에만 성공한 것으로 간주됩니다.

두 번째는 User Defined Variables였다.

위와 같이 변수로 선언해 놓을 수 있었다.

선언된 변수는 HTTP Request에서 사용하고 있었다. URL이 여러 개라면 편리하게 사용할 것 같다.

  • User Defined Variables
    UDV를 사용하면 초기 변수 세트를 정의할 수 있습니다.

    UDV는 호출될 때마다 다른 결과를 생성하는 함수와 함께 사용하면 안됩니다. 첫 번째 함수 호출의 결과만 변수에 저장됩니다.
    그러나 UDV는 __P()와 같은 함수와 함께 사용할 수 있습니다.
    HOST                 ${(__P(host,localhost)}
    변수 "HOST"가 JMeter 속성 "host"의 값을 갖도록 정의하며, 정의되지 않은 경우 기본값은 "localhost"입니다.

    Name과 Value를 pair로 설정한 뒤, 어디서나 ${Name} 형식으로 호출 할 수 있습니다.

 

마지막으로는 모든 HTTP Request 하위에 Uniform Random Timer가 적용되어 있었다.

  • Uniform Random Timer
    이 타이머는 각 시간 간격이 동일한 발생 확률을 갖는 임의의 시간 동안 각 스레드 요청을 일시 중지합니다.
    총 지연은 임의 값과 오프셋 값의 합입니다.

 

후기

확실히 알고 사용하는 것과 모르면서 겉핥기식으로 사용하는 건 기능 활용의 차이가 크다고 생각이 들었다..

처음에는 "간단한 테스트 정도는 할 수 있지 않을까?"라고 생각을 하였지만,

안써본 플러그인들도 너무 많고, 클릭조차 안해본 기능들이 너무 많다..

반응형

'Java > java' 카테고리의 다른 글

유효성 검사 (Validate)  (0) 2020.10.27
IoC 컨테이너  (0) 2020.10.26
AOP (Aspect Oriented Programming)  (0) 2020.10.26
빈 xml 객체 생성 정리  (0) 2020.10.21
스프링(Spring)의 특징과 의존성 주입(DI)  (0) 2020.10.20