[성능테스트도구] 23.04.10 JMeter로 성능 테스트(Mac 기반)

hyewon jeong·2023년 4월 10일
0

TIL

목록 보기
116/138
post-thumbnail

성능 테스트

  • 서비스 및 서비스 시스템이 작업 부하 상태에서 제대로 작동하는 확인하는 일종의 소프트웨어 테스트
  • 목적 : 버그를 찾는 것이 아니라 성능병목현상을 제거하는 것

성능 테스트 도구

  1. Perfmon
  2. HP LoadRunner
  3. Apache JMeter : 다양한 서비스의 서능 분석 및 측정을 위한 성능 및 부하 테스트에 사용할 수 있는 오픈소스 툴 . 주로 웹 및 웹서비스 응용프로그램에 사용
  4. PostMan : 개발한 API를 테스트하고 테스트 결과를 공유하여 API 개발의 생산성을 높여주는 플랫폼
    http주소에 대해 get 과 post응답을 확인 할 수 있는 프로그램. 서버와 DB에 제대로 신호가 가는지 확인 할 수 있는 도구

성능 측정도구 : Apache JMeter 사용 이유??

동시 접속자 수에 대해 테스트를 한다고 가정한다.
A라는 포털 사이트에 100명이 동시에 로그인 기능을 실행했을 때, 서버의 성능을 테스트해본다고 하면 그럼 100개의 PC에서 100명이 하나, 둘, 셋 ! 카운트 하면서 동시에 로그인 버튼을 딱 눌러서 테스트 할 수 있을까? Apache JMeter는 이런 부분들을 해결해준다. 스크립트를 이용하여 몇 명이, 몇분 간격으로, 어떤 작업을 요청하고 그에 대한 결과를 한눈에 볼 수 있도록 기능을 지원해줍니다.

Apache JMeter란?
Apache JMeter란 Apache project에 속한 오픈소스로 무료로 사용할 수 있으며, 웹 애플리케이션처럼 서버 -클라이언트 구조로 소프트웨어의 성능테스트를 위한 도구이며 100% Java기반의 프로그램으로 설치가 용이하다. Apache를 많이 사용하는 이유는 켜뮤니티를 통해 다양한 plug-in들을 공유하고 있어, 보다 다양한 테스트를 수행할 수 있으며, 코드에 대한 깊은 지식이 없어도 쉽게 스크립트를 작성하여 사용할 수 있는 장점이 있다.

1. ⚡️JMeter 설치

1-1. Mac 일 경우

brew로 설치하기

brew install jmeter

터미널에서 실행 후

M1 경우 실행할 때 코드

open /opt/homebrew/bin/Jmeter

로 열어줘야 합니다.

open /usr/local/bin/jmeter

인텔칩은 위의 명령어로 열렸지만, M1은 The file /usr/local/bin/jmeter does not exist. 이런 경고와 함께 경로에 실행 파일이 설치되어 있지 않더군요.

1-2. Windows 일 경우

https://jmeter.apache.org/download_jmeter.cgi

설치가 끝난 후

다음은 JMeter 성능테스트 지표가 무엇인지 설명은 아래와 같습니다.

JMeter 성능지표

Summary Report

  • Label : Sampler 명
  • Samples : 샘플 실행 수 (Number of Threads X Ramp-up period)
  • Average : 평균 걸린 시간 (ms)
  • Min : 최소
  • Max : 최대
  • Std. Dev. : 표준편차
  • Error % : 에러율
  • Throughput : 초당 처리량 (bps) = JMeter에서는 시간 단위를 보통 TPS (Transaction Per Second)로 표현
  • Received KB/sec : 초당 받은 데이터량
  • Sent KB/sec : 초당 보낸 데이터량
  • Avg. Bytes : 서버로부터 받은 데이터 평균

조회 성능 측정
조회성능을 측정하기 위해 ThraedGroup 설정을 합니다.

JMeter 테스트 용어

테스트 들어가기 전 JMeter 테스트 용어부터 알아보겠습니다.

  • Thread Group : 테스트에 사용될 쓰레드 개수, 쓰레드 1개당 사용자 1명

  • Sampler : 사용자의 액션 (예: 로그인, 게시물 작성, 게시물 조회 등)

  • Listener : 응답을 받아 리포팅, 검증, 그래프 등 다양한 처리

  • Configuration : Sampler 또는 Listener가 사용할 설정 값 (쿠키, JDBC 커넥션 등)

  • Assertion : 응답 확인 방법 (응답 코드, 본문 내용 비교 등)

2. ⚡️스크립트 작성하기

2-1.Thread Group을 추가해 준다.

Test Plan 이란 테스트 스크립트를 말한다.

  • Test Plan -> Add -> Threads(Users) -> Thread Group
  • Thread Group은 가상 사용자(Thread)의 숫자와 반복횟수, 반복시간을 설정한다.

아래 설정은 10명의 유저가 1초동안 1번 요청을 실행한다는 의미이다.

JMeter ThraedGroup 설정지수

Number of Threads

스레드 개수이며, 가상 유저 수라고 생각하면 된다.
HTTP Request Sampler 가 2개일 경우, 스레드를 1로 설정해도, 2번의 request 가 발생한다. 가상 유저수가 HTTP Request Sampler 에 비례한다.

Ramp-Up

스레드 당 생성시간으로, 만약 Number of Threads = 100이고, Ramp-Up = 10 라면, 100명의 유저를 생성할 때 까지 10초가 걸린다는 말이다. 즉, 1초 동안 10명의 유저가 요청을 하는것이고, 만약 Ramp-Up = 0 으로 설정하면, 동시 접속 자 수는 100명이 된다.

Loop Count

하나의 스레드가 수행할 작업 수이며, 만약 Number of Threads = 100이고, Loop Count = 10 이면, 100명의 유저는 동일한 작업을 10번 수행하게 되며, 총 1000번 (총 요청횟수) 이 수행된다.

2-2. HTTP Request Defalts를 추가해 준다.(필요시)

  • Thread Group -> Add -> Config Element -> HTTP Request Defalts

Http Request Defaults에서는 실제 요청을 보낼 페이지의 기본 정보를 설정 합니다.
주로 Sampler-Http Request에 설정 정보 중에 중복으로 작성되는 부분들을 Http Request Delfaults에서 설정하면 좀 더 간편하게 수정 등을 할 수 있다.

2-3. HTTP Header Manager 설정(POST 요청시 추가 설정)

POST 로 요청시에는 HTTP Header 설정을 추가로 해주어야 합니다.

HTTP Request - Config Element - HTTP Header Manager를 추가하고
아래와 같이 입력 한다.
키:값 으로
content-type : application/json
참고로 여기서 Authorzation 같은 헤더 값들을 설정해줄 수 있습니다.

2-4. Sampler 를 추가한다.

사용자를 만들었으니 이제 사용자가 해야 할 행동을 정의한다.

Thread Group 우클릭 -> Add -> Sampler -> HTTP Request 클릭
Controller에 요쳥을 보내는 Sampler를 만든다.

아래 예는 [Post] localhost:8080/api/user/login ( 유저 로그인 api 테스트)

  • PostMan 처럼 아래에 원하는 데이터를 직접 입력하거나 파라미터값으로 줄수 있다. ( Body Data, Parameter 등)

    2-5. Listener 를 추가한다.

  • sampler가 받아오는 리턴 값을 바탕으로 그래프, 레포팅을 만들어주는 Listener를 만들어보겠습니다.
    ThreadGroup(우클릭) -> Add -> Listener -> View Results Tree, Summary Report, View Results in Table 생성

2-6. Assertion (필요시)

응답값이 제대로 왔는지 검증을 하기위해 Assertion을 추가

ThreadGroup(우클릭)-> Add -> Assertions -> Response Assertion 클릭

3. 스크립트 실행

상단메뉴 중 start버튼을 선택해서 실행할 수 있다.

4. 결과 확인

  • Listener을 통해 결과를 확인한다.
  • 주로 View Results in Table,

4-1. View Results in Table - 모든 결과를 table로 보여준다.

Table 열 데이터
Sample - 그냥 ID번호다. 이 번호를 보고 몇번째로 보는 부하인지 알 수 있다.
Start Time - 보내기 시작한 시간으로 ms단위까지 나온다.
Thread Name - 쓰레드 그룹 이름
Label - 보낸 request의 이름
Sample Time(ms) - Load Time, Elapsed Time, Response Time이랑 같은 뜻이다. 요청 시작 시점부터 응답 종료 시점까지의 시간을 의미
Status - 말그대로 응답상태를 확인할 수 있다.
Bytes - 응답 데이터 바이트
Sent Byte - 요청 데이터 바이트
Latency - 지연 속도를 의미하는데 요청 시작 시점부터 응답 시작 시점까지의 시간을 의미
Connect Time(ms) - TCP Handshake를 이용해 연결하는 시간(그냥 TCP연결시간)

Table footer 데이터
No of Samples - No는 아니다라는 뜻이 아니라 number라는 뜻, 처리중인 데이터 수를 의미
Latest Sample - 가장 마지막 Sample Time
Average - 생략되있는데 Sample Time 평균
Deviation - 생략되있는데 Sample Time의 표준편차

4-2. View Results Tree - 결과를 상세히 보고 검색까지 하고싶을 때

  • View Result Tree 는 기존의 View Results in Table과는 다른 관점에서 보여준다.

하나하나의 데이터를 확인할 수 있으며 당연히 결과를 내보낼 수 있고 심지어 검색할 수 있다.
검색은 이 listener의 핵심이다.

검색 문자에 포함되는 모든 데이터를 뽑아준다.

각각의 눌러보면 request, response, header등의 모든 데이터를 볼 수 있다.

4-3. Summary Report - 결과 레포트를 보고 싶다면

참고로 모든 지표는 sample time(=load time, response time, elapsed time)를 기준으로 만든다.
Label - 우리가 사용했던 request의 이름을 기준으로 모은다. 따라서 다르게 집계하고싶다면 이름을 반드시 다르게 한다.
Samples - requset 갯수
Average - Sample Time의 평균
Min - Sample Time의 최소
Max - Sample Time의 최대
Std. Dev. - Sample Time의 표준편차
Error % - 에러율
Throughput - 시간당 처리량(=쓰루풋)
Received KB/sec - 시간당(sec) 받은 데이터(KB)
Sent KB/sec - 시간당(sec) 보낸 데이터(KB)
Avg. Bytes - 평균 바이트

4-4. Aggregate Report (이건 위에서 추가하지 않았는데 새로 추가했습니다.)

  • Label : Sampler 명
  • Samples : 샘플 수 (Number of Threads X Ramp-up period)
  • Average : 평균 응답 시간
  • Median : 응답 시간 중앙값
  • 90% Line : 90%의 샘플은 해당 값보다 적은 시간 내에 끝나고 10%는 더 걸린다. 라는 뜻의 컬럼
  • 95% Line : 95%의 샘플은 해당 값보다 적은 시간 내에 끝나고 5%는 더 걸린다. 라는 뜻의 컬럼
  • 99% Line : 99%의 샘플은 해당 값보다 적은 시간 내에 끝나고 1%는 더 걸린다. 라는 뜻의 컬럼
  • Min : 최소값
  • Maximum : 최대값
  • Error % : 에러율
  • Throughput : 초당 처리량
  • Received KB/sec : 초당 받은 KB
  • Sent KB/sec : 초당 보낸 KB

4-5. Graph Results - 대략적으로 그래프를 쉽게 보고싶다면


그래프를 시각화해서 보여준다

4-6.TPS Graph + 그래프 플러그인 (Graph Plugin)

JMeter 에서 기본적으로 제공하는 그래프도 있지만, 저는 TPS를 보기 위하여 외부 플러그인을 추가로 설치 해주겠습니다.

https://jmeter-plugins.org/?search=jpgc-graphs-basic


운 받으셨다면 /iib 폴더 안에 넣어 주세요.

TPS(Throughput)

서버가 초당 처리할 수 있는 요청의 개수를 나타낸다.
TPS 가 높을 수록 초당 처리할 수 있는 요청의 수가 많다.
초당 요청 수(TPS) = 동시 사용자 수 / 응답시간(Response Time) + 인지시간(Think Time)

참고 사이트
https://leeggmin.tistory.com/10
Docker Redis 사용하기

profile
개발자꿈나무

0개의 댓글