포스트

성능 테스트

성능테스트 툴

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수로 표현하기도 함

  • Response Time / Load Time
    • 응답시간 또는 처리시간, 요청을 보낸 후 응답이 완료되어 사용자 화면에 출력될 때까지의 시간

  • Latency
    • 요청을 보낸 후 데이터를 받기 시작할 때까지 시간

  • Think Time
    • 하나의요청에 응답을 수신하고 다음 요청을 보낼 때까지의 시간

  • Request Interval Time
    • 요청을 보낸 후 다음 요청을 보낼 때까지의 시간

  • Ramp-Up Period
    • Theread 생성에 걸리는 시간

  • Transaction
    • 업무 처리의 단위, 화면 조작 및 응답을 트랜잭션으로 정의

  • Throughput
    • 단위 시간당 대상 서버에서 처리되는 요청의 수, Apach JMeter에서는 시간 단위를 보통 TPS(Transaction Per Second)로 표현하며 TPM(Transaction Per Minut), TPH(Transaction Per Hour) 등이 있다.

4) 성능 측정 도구

  • Perfmon
    • Window에서 제공하는 성능 모니터, CPU 점유율, 메모리 사용량등을 측정

  • HP LoadRunner
    • 응용 프로그램, 시스템 동작 및 부하 사애에서의 성능을 측정할 수 있는 프로그램. 소프트웨어를 동시에 사용하는 수천명의 사용자에 대해 시뮬레이션이 가능

  • Apache JMeter
    • 다양한 서비스의 성능 분석 및 측정을 위한 성능 및 부하 테스트에 사용할 수 있는 오픈소스툴. 주로 웹 및 웹 서비스 응용 프로그램에서 사용

  • PostMan
    • 개발한 API를 테스트하고, 테스트 결과를 공유하여 API 개발의 생산성을 높여주는 플랫폼, http 주소에 대해 get과 post의 응답을 확인할 수 있는 프로그램. 서버와 DB에 제대로 신호가 가는지 확인할 수 있는 도구

  • pagespeed
    • 참고 온라인 사이트의 페이지 속도를 가볍게 체크할 수 있다.
    • 테스트 성능 목표를 삼을 때 시행해보면 좋다

5) Apache JMeter

  • 다운로드
    https://jmeter.apache.org/download_jmeter.cgi

    • 다운로드 할 수 있는 파일의 종류가 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은 가상 사용자의 숫자와 반복 횟수, 반복 시간을 설정

  • Thread Group 구성
    • Number od Thread (users) : Thread 수 (동시 접속하는 가상 사용자 수)
    • Ramp-up period (seconds) : 전체 Thread 유입시간
    • Loop Count : 반복 횟수

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. : 표준 편차 낮을수록 일정