성능 테스트
성능테스트 툴
- nGrinder
- LOCUST
- k6
- Apache JMeter
- 참고블로그 Apache JMeter
1) 성능 테스트의 정의
- 서비스 및 서비스 시스템의 성능을 확인하기 위해 실제 사용 환경과 비슷한 환경에서 테스트를 진행하는 것을 말한다. 응답시간(Response Time), 처리량(Throughput), 병목 구간등을 확인할 수 있고, 성능 테스트로 얻은 정보로 서비스나 시스템의 문제점을 확인하고 이를 개선하여 보완할 수 있다.
2) 성능 테스트 유형
- Load Test
- 동시 사용자 또는 프로세스 수에 의해 생성되는 트랜잭션의 요청으로 인해 현실적인 부하 수준을 처리하는지에 대한 시스템 성능 측정
- 동시 사용자 또는 프로세스 수에 의해 생성되는 트랜잭션의 요청으로 인해 현실적인 부하 수준을 처리하는지에 대한 시스템 성능 측정
- Stress Test
- 임계값 이상의 요청이나 비정상적인 요청을 보내 비정상적인 상황의 처리 상태를 확인하고 시스템의 최고 성능 한계를 측정하기 위하 테스트
- 임계값 이상의 요청이나 비정상적인 요청을 보내 비정상적인 상황의 처리 상태를 확인하고 시스템의 최고 성능 한계를 측정하기 위하 테스트
- Spike Test
- 갑자기 사용자가 몰렸을 때 요청이 정상적으로 처리되는지, 또는 업무 부하가 줄어들 때 정상적으로 반응하는지를 확인
- 갑자기 사용자가 몰렸을 때 요청이 정상적으로 처리되는지, 또는 업무 부하가 줄어들 때 정상적으로 반응하는지를 확인
- Scalability Test / Soak Test
- 긴 시간 동안 테스트를 진행해서 테스트 시간에 따른 시스템의 메모리 증가, 성능 정보의 변화 등을 확인
3) 성능 테스트 용어
- Active User
- 실제 서버에 연결된 상태로 요청을 처리 중인 사용자
- 실제 서버에 연결된 상태로 요청을 처리 중인 사용자
- Inactive User
- 웹 브라우저에 결과 화면이 출력된 상태에서 화면의 내용을 읽거나 정보를 입력하고 있는 사용자
- 웹 브라우저에 결과 화면이 출력된 상태에서 화면의 내용을 읽거나 정보를 입력하고 있는 사용자
- Concurrent User
- 특정 시점에서 시스템에 접속하여 사용하고 있는 사용자
※ Concurrent User = Active User + Inactive User
- 특정 시점에서 시스템에 접속하여 사용하고 있는 사용자
- Virtual User
- 가상 사용자 수, Apache JMeter에서는 Thread수로 표현하기도 함
- 가상 사용자 수, Apache JMeter에서는 Thread수로 표현하기도 함
- Response Time / Load Time
- 응답시간 또는 처리시간, 요청을 보낸 후 응답이 완료되어 사용자 화면에 출력될 때까지의 시간
- 응답시간 또는 처리시간, 요청을 보낸 후 응답이 완료되어 사용자 화면에 출력될 때까지의 시간
- Latency
- 요청을 보낸 후 데이터를 받기 시작할 때까지 시간
- 요청을 보낸 후 데이터를 받기 시작할 때까지 시간
- Think Time
- 하나의요청에 응답을 수신하고 다음 요청을 보낼 때까지의 시간
- 하나의요청에 응답을 수신하고 다음 요청을 보낼 때까지의 시간
- Request Interval Time
- 요청을 보낸 후 다음 요청을 보낼 때까지의 시간
- 요청을 보낸 후 다음 요청을 보낼 때까지의 시간
- Ramp-Up Period
- Theread 생성에 걸리는 시간
- Theread 생성에 걸리는 시간
- Transaction
- 업무 처리의 단위, 화면 조작 및 응답을 트랜잭션으로 정의
- 업무 처리의 단위, 화면 조작 및 응답을 트랜잭션으로 정의
- Throughput
- 단위 시간당 대상 서버에서 처리되는 요청의 수, Apach JMeter에서는 시간 단위를 보통 TPS(Transaction Per Second)로 표현하며 TPM(Transaction Per Minut), TPH(Transaction Per Hour) 등이 있다.
4) 성능 측정 도구
- Perfmon
- Window에서 제공하는 성능 모니터, CPU 점유율, 메모리 사용량등을 측정
- Window에서 제공하는 성능 모니터, CPU 점유율, 메모리 사용량등을 측정
- HP LoadRunner
- 응용 프로그램, 시스템 동작 및 부하 사애에서의 성능을 측정할 수 있는 프로그램. 소프트웨어를 동시에 사용하는 수천명의 사용자에 대해 시뮬레이션이 가능
- 응용 프로그램, 시스템 동작 및 부하 사애에서의 성능을 측정할 수 있는 프로그램. 소프트웨어를 동시에 사용하는 수천명의 사용자에 대해 시뮬레이션이 가능
- Apache JMeter
- 다양한 서비스의 성능 분석 및 측정을 위한 성능 및 부하 테스트에 사용할 수 있는 오픈소스툴. 주로 웹 및 웹 서비스 응용 프로그램에서 사용
- 다양한 서비스의 성능 분석 및 측정을 위한 성능 및 부하 테스트에 사용할 수 있는 오픈소스툴. 주로 웹 및 웹 서비스 응용 프로그램에서 사용
- PostMan
- 개발한 API를 테스트하고, 테스트 결과를 공유하여 API 개발의 생산성을 높여주는 플랫폼, http 주소에 대해 get과 post의 응답을 확인할 수 있는 프로그램. 서버와 DB에 제대로 신호가 가는지 확인할 수 있는 도구
- 개발한 API를 테스트하고, 테스트 결과를 공유하여 API 개발의 생산성을 높여주는 플랫폼, http 주소에 대해 get과 post의 응답을 확인할 수 있는 프로그램. 서버와 DB에 제대로 신호가 가는지 확인할 수 있는 도구
- pagespeed
- 참고 온라인 사이트의 페이지 속도를 가볍게 체크할 수 있다.
- 테스트 성능 목표를 삼을 때 시행해보면 좋다
5) Apache JMeter
다운로드
https://jmeter.apache.org/download_jmeter.cgi- 다운로드 할 수 있는 파일의 종류가 Binaries와 Source가 있는데, 변경 없이 그대로 사용하려면 Binaries 버전을, 소스 코드를 수정 또는 추가하거나 컴파일해서 사용하려면 Source버전을 받으면 됩니다.
- 다운로드 할 수 있는 파일의 종류가 Binaries와 Source가 있는데, 변경 없이 그대로 사용하려면 Binaries 버전을, 소스 코드를 수정 또는 추가하거나 컴파일해서 사용하려면 Source버전을 받으면 됩니다.
- 실행하기
bin 폴더의 jmeter.bat 실행
- 스크립트 작성하기
- Test Plan == 테스트 스크립트
- 테스트 대상이 되는 서버 필요
Ex)
- 테스트 URL
- http://ip번호:port번호/주소1/
- http://ip번호:port번호/주소1/예시.jsp
- http://ip번호:port번호/주소1/예시
5명의 사용자가 위 3개의 테스트용 페이지에 5회 요청을 보내는 스크립트를 작성
1) Thread Group을 추가
- Test Plan → Add → Threads(Users) → Thread Group
- Thread Group 구성
2) HTTP Request Defaults를 추가
- Thread Group → Add → Config Element → HTTP Request Defaults
- HTTP Request Defaults에서는 실제 요청을 보낼 페이지의 기본 정보를 설정한다.
- Sampler-HTTP Request에 설정할 정보 중에 중복으로 작성되는 부분들을 HTTP Request Defaults에서 설정하면 좀 더 간편하게 수정 등을 할 수 있다
- HTTP Request Defaults 구성
- Protocol[http] : http 또는 https 입력
- Server Name or IP : Host 또는 IP 입력
- Port Number : Port 번호 입력
- Path : Path 입력
- Parameters : 파라미터 값 입력
3) HTTP Request를 추가
- Thread Group → Add → Sampler → HTTP Request
- HTTP Request에서는 HTTP Request Dafaults에서 설정한 기본값 외에 요청을 보낼 상세 값들을 설정해 준다
- 앞서 테스트할 페이지를 3개 준비했으므로 Sampler도 3개가 필요
- 3개를 생성 했으면 각각 정보들을 설정
- HTTP Request 구성
- Protocol[http] : http 또는 https 입력
- Server Name or IP : Host 또는 IP 입력
- Port Number : Port 번호 입력
- Path : Path 입력
- Parameters : 파라미터 값 입력
4) Listener 추가
- Listener는 Sapler에서 요청한 것에 대한 결과를 수집해서 결과값을 보여주는 기능이다
- Listener를 추가하지 않으면 요청에 대한 성공/실패 여부나 응답 시간등을 확인할 수 없다
- View Result Tree를 추가
- Thread Group → Add → Listener → View Result Tree
- View Result Tree는 각 Samper에 대한 Sampler result, Request data, Response data 등을 확인할 수 있으며 Text, HTML 등의 형태로 확인이 가능
- 그리고 Summary Report를 추가
- Thread Group → Add → Listener → Summary Report
- Summary Report는 실시간으로 요청 결과에 대한 응답시간 통계, 에러율, 처리량 등을 확인 할 수 있다.
5) 스크립트 실행
- Listener까지 추가가 완료되었으면 스크립트를 실행한다
- 스크립트를 실행하는 방법은 상단 메뉴 중 Strart 버튼을 선택해서 실행할 수 있다
6) 결과 확인
- 실행이 완료되면 Listener를 통해 결과를 확인가능 하다
- 먼저 View Result Tree
- 우측에 Sampler 목록이 나타나고 이 중에서 하나를 선택하면 오른쪽 화면의 Samper Result 탭에 상세 결과가 출력
- Sampler Result에는 성공/실패 여부와 응답시간, Size, Response code 등을 볼 수 있다
- Requset 탭을 선택하면 해당 Sampler가 테스트 페이지에 보낸 요청 정보를 확인할 수 있다
- Response data 탭을 선택하면 해당 Sampler의 요청에 대한 응답 메시지를 확인할 수 있다
- Response data 탭을 HTML 형식으로 확인할 수 있다
- Summary Report
- Summary Report는 말 그대로 테스트한 결과를 요약하여 보여준다.
- 각 Sampler에 대한 결과와 Total 결과를 함께 보여준다
- Summary Report 구성
- Lable : HTTP Request Sampler에서 설정한 Name
- #Samples : 호출 건수
- Average/Min/Max/Std.Dev. : 응답시간 통계 (1/1000초 단위로 표시됨)
- Error% : 오류율
- Throughput : 단위 시간당 처리량(TPS)
🔸성능 테스트는 ISO/IEC 25023의 품질 주특성 중 Performance efficienct measures(성능효율성)에 해당한다.
성능효율성의 부특성으로는 Time behaviour measures(시간 반응성), Resource utilization measures(자원 효율성), Capacity measures(용량성) 항목이 있다
세부 항목
1) Time behaviour measures(시간반응성)
- Mean response time(평균 응답 시간)
- Response time adequacy(응답 시간 적절성)
- Mean turnaround time(평균 소요 시간)
- Trunaround time adequact(처리 시간의 적절성)
- Mean throughput(평균처리량)
2) Resource utilization measures(자원효율성)
- Mean processor utilization(평균 프로세서 사용률)
- Mean memory utilization(평균 메모리 사용률)
- Mean I/O devices utilization(평균 I/O 장치 사용률)
- Bandwidth utilization(대역폭 사용률)
3) Capacity measures(용량성)
- Transaction processing capacity(트랜잭션 처리 용량)
- User access capacity(사용자 엑세스 용량)
- User access increase adequacy(사용자 엑세스 증가 적절성)
이 중 Apache JMeter를 이용하여 측정 가능한 매트릭은 평균 응답 시간, 평균 소요 시간, 평균 처리량, 사용자 액세스 용량이 있다.
Average 값으로 평균 응답시간, 평균 소요 시간을 측정할 수 있으며, TPS 값으로 평균 처리량을, 그리고 Thread 수(동시 접속자 수)를 설정하여 스크립트를 실행하고 Error%를 확인하여 사용자 액세스 용량을 측정할 수 있다
JMeter
결과 확인
- View Result Tree
- 개별적인 정보를 보고 싶을 때
- Load Time : Request Start + Response Strart
- 성능 테스트할 때 보는 것
- 1/1000 초로 표기 ex) 265 ⇒ 0.2초 걸렸다
- Summary Report
- Samples의 값 : 접속 횟수
- Min : 가장 빨리 엑세스가 끝난 시간
- Max : 가장 늦게 끝난 엑세스 시간
- Average : 평균
- Throughput : 초당 단위 시간
- ex) 5.8/sec ⇒ 초당 5.8번의 엑세스를 했다
- 높을수록 좋다
- but 서버 쪽에서 에러가 발생해 불능 상태가 되면 복잡한 작업을 하지않기 때문에 높게 나올 수 있다
- 그래서 Error 수치와 함께 봐야한다
- Std.Dev. : 표준 편차 낮을수록 일정