성능 테스트 결과 보고서 - seongneung teseuteu gyeolgwa bogoseo

본 포스팅은 성능 테스트에 대한 실무적인 측면에서 자료를 기술하려고 하며 소프트웨어 성능 테스트 개요와 테스트 절차, 성능 테스트 도구와 테스트 수행 사례에 대해서 간략히 알아보도록 하겠습니다.

▣ 성능 테스트 개요

성능 테스트 정의

성능 테스트 대상 시스템에 대한 목표치 설정하고 성능 목표치를 달성할 때까지 반복적인 테스트 수행하여 수행된 성능 테스트 결과 분석을 통해 시스템 및 어플리케이션을 개선함으로써 대상 시스템의 성능과 안정성을 확보하는 일련의 활동이라고 정의할 수 있습니다.

성능 테스트의 목적

소프트웨어가 탑재된 시스템의 병목 지점을 파악하여 튜닝을 거쳐 궁극적으로 서비스 사용자의 만족도를 향상시키기 위해 성능 테스트를 수행합니다.

소프트웨어가 탑재된 시스템의 가용 성능을 측정하여 원활한 서비스를 제공할 수 있도록 시스템 용량 산정과 확장 계획을 수립합니다.

성능 테스트 유형별 목적

성능 테스트 구성요소

성능 테스트를 수행하기 위해서는 인력, 툴 등 아래와 같이 다양한 리소스와 지표가 필요합니다.

성능 지표

성능 지표는 성능 테스트의 목표를 달성하기 위한 측정값으로 다양한 지표를 종합적으로 사용하여 시스템 성능을 측정합니다.

다음은 소프트웨어 성능 테스트 절차 및 수행 업무에 대해서 간략히 알아보도록 하겠습니다

▣ 성능 테스트 절차별 수행 업무

다음으로는 성능 테스트 수행 시 필요한 성능 테스트 툴에 대해서 간단히 알아보도록 하겠습니다.

성능 테스트 툴을 활용하여 테스트를 위한 스크립트를 작성하고 부하를 발생시켜 테스트 대상의 성능 요구사항을 측정할 수 있습니다. 해당 툴들은 비용적인 측면에서 무료인 오픈소스 툴과 유료인 상용 툴로 구분될 수 있습니다.

▣ 주요 성능 테스트 툴

성능 테스트 오픈소스 툴

1. Apache JMeter : Web과 API에 대한 기능, Performance를 측정할 수 있는 툴

· HTTP, HTTPS, SOAP, FTP, JDBC, LDAP, JMS, Mail, MongoDB, shell scripts, TCP 등 다양한 프로토콜 지원

· 샘플링을 위한 멀티 쓰레드 지원, 캐싱 및 오프라인 분석 지원

· 브라우저, 네이티브 어플리케이션으로부터 테스트를 레코딩하고 빌드와 디버깅 지원

· Java가 호환되는 Linux, Windows, Mac OSX 등 모든 OS에서 테스트를 로드하고 수행

· HTML, JSON, XML 혹은 텍스트 응답 포멧으로부터 데이터 추출

· 여러 쓰레드로부터 병렬 샘플링이 가능하고 분리된 쓰레드로부터 다른 기능을 동시 수행 가능

· 플러그인을 통해 테스팅 능력, 데이터 분석, 가시화, 지속적인 통합 라이브러리로 확장 가능

2. FunkLoad : Python으로 작성된 Web Page에 대한 기능 테스트 및 부하 테스트용 툴

· 일반적인 단위 테스트와 같은 pyUnit 프레임 워크를 사용하는 순수 Python 스크립트

· 향상된 리차드 존스 (Richard Jones)의 웹 유닛을 사용하여 웹 브라우저 (단일 스레드)를 에뮬레이션

· 다양한 명령 행 옵션이 있는 고급 테스트 러너

· 기능 테스트를 부하 테스트로 전환할 수 있는 벤치 러너 제공

· ReST, HTML, 조직 모드, PDF (LaTeX / PDF 조직 모드 내보내기 사용)의 세부 벤치 보고서 제공

· 확장 성과 속도 변화에 대한 개요를 제공하는 2 개의 벤치 보고서를 비교

· 경향 보고서를 통해 여러 보고서를 통해 성과 변화 확인

· 구성 파일 또는 명령 행 옵션을 사용하여 손쉬운 테스트 사용자 정의

· 프록시 레코더로 내장 된 TCPWatch를 사용하여 손쉬운 테스트 작성이 가능하므로 웹 브라우저를 사용하여 파일 업로드 또는 모든 아약스 호출을 포함하여 FunkLoad 테스트를 자동으로 생성

· 예상되는 결과를 응답으로 확인할 수있는 웹 단언 도우미를 제공

· DOM을 사용하여 응답 페이지에서 내용을 검색 할 수있는 도우미를 제공

3. nGrinder : 스크립트 작성, 테스트 실행, 모니터링과 동시에 결과 보고서를 실행할 수 있는 스트레스 테스트 툴

· 퍼포먼스 테스팅(부하테스트)를 위하여 웹 인터페이스 제공

· 테스트 프로세스 체계화

· 테스트 결과를 수집해 통계 생성

· Agent 모드를 실행하면 프로세스와 스레드를 실행시키고 테스트 대상 서버에 부하 발생

· monitor 모드를 실행하면 대상 시스템의 CPU와 Memory 사용률 모니터링

4. Web Application Load Simulator : Web 응용 프로그램의 부하 테스트를 위한 시뮬레이터

· 브라우저 세션을 기록하여 시뮬레이션 시나리오 생성

· JavaSofts JSSE 1.0.2 SSL 구현을 통한 SSL 사용

· 쿠키 및 HTTP 리디렉션 지원

· 다운로드 된 페이지의 내용은 HttpUnit WebResponse 클래스를 사용하여 액세스 가능

· 웹 응용 프로그램은 사용자의 브라우저와 웹 서버간에 많은 양의 데이터 이동 가능

· 시뮬레이션의 원격 관리. 원격 시뮬레이션은 단일 관리 콘솔에서 생성 및 관리, 콘솔은 시뮬레이션을 생성, 시작, 중지하는 등의 추가 명령어가 추가된 Tcl 쉘

· 시뮬레이션 사양을 위한 XML 형식

· 현재 TTFB (time-to-first-byte), TTLB (time-to-last-byte), 다운로드 된 파일의 크기, 콘텐츠 형식 및 HTTP 응답 코드와 같은 원시 데이터 수집

· 원시 데이터를 기반으로 다양한 통계 (각 링크의 평균, 최소, 최대 및 표준 편차) 계산

· 결과는 HTML 페이지로 게시, XML 기반으로 구성 가능

· 링크 사이에 임의의 지연을 추가하여 실제 사용자 시뮬레이션 가능

성능 테스트 상용 툴

1. eggplant : 인공지능(AI)를 기반으로 테스트 실행부터 결과 분석까지 모든 테스트 과정을 자동으로 수행하는 툴

· 가상 사용자를 이용한 성능 테스트 진행

· 성능 테스트 수행을 위한 컨트롤러 지원

· 모니터링 시스템을 통한 성능 분석

· 인공지능(AI) 모델링 기능으로 테스트 케이스 자동 생성

· Release insight 기능을 통해 목표 테스트 커버리지 달성 및 배포

· 테스트 스크립트 작성 및 테스트 수행

· 모바일/PC에 상관없이 테스트 대상과 연결하여 자동화 테스트 수행

· 테스트 케이스 스케줄링 기능 제공

· 테스트 모니터링용 리포트 생성

· 원격 테스트 대상 관리

2. Load Runner : 대량의 유저가 테스트 대상 시스템에 부하를 주었을 때, 성능을 측정하기 위한 툴

· 신뢰성 및 확장성 우수

· 엔터프라이즈 환경을 테스트하기 위하여 다양한 프로토콜 및 플랫폼 지원

· 시스템의 장애를 체크하기 위하여 광범위한 On-Line 서버 모니터링 제공, UNIX/Windows 시스템의 자원 사용량, 웹서버/웹AP서버/DB서버등의 성능 모니터링

· Goal-oriented 시나리오 기능 제공 (사용자 수, 응답시간, Transaction / Sec등)

· EJB (J2EE) 테스팅 및 XML Support

· 강력하고 상세한 분석 기능 및 Report 기능

· 성능 모니터링 툴인 “Topaz”와 강력한 통합 및 Scripts 재사용 가능

3. NeoLoad : 모든 웹과 모바일 애플리케이션의 병목 현상을 측정할 수 있는 부하 테스트 툴

· 스크립트 없이 반복, 조건 등을 드래그&드롭으로 간단하게 조작 가능

· SSL 및 Kerberos, NTLM, 기본, 클라이언트 인증서에 의해 다이제스트 인증 또는 인증 지원

· 테스트 중인 응용 프로그램의 새 버전에 대한 사용자의 경로를 확인해 오류를 방지

· 고급 테스트를 지원하기 위해 미세 조정을 위한 실시간 (요청 / 응답이 수신) 각 가상 사용자 식별 가능

· 인프라의 상황을 실시간으로 확인

· 경고 임계 값을 설정해 결함을 감지

· 3G, 4G, 와이파이 등의 신호 강도 변화에 대한 사전 값을 설정해 대기 시간 및 패킷 손실 감소

· 자동으로 애플리케이션 하위 구성들의 허용 수준을 체크· 행동의 전반적인 분석부터 데이터 흐름의 깊은 분석까지 모든 수준으로 상세하게 리포트

· 기업 고유의 비즈니스 관점에서 결과 분석

· 런타임 및 분석 시 사용 테마 또는 시험 결과에 의해 그룹 그래프에 보드 생성

· 다른 조건 (기간, 부하 발전기, 트랜잭션 문제)에 따라 결과 필터링

· 초기 설정 후, NeoSense의 사용자 경로를 한 번 클릭으로 NeoLoad에서 업데이트

· 모든 테스트를 지연 없이 일상 고려하여 팀을 가능하게 하는 가장 인기있는 CI 도구에 통합 개발자와 테스터 지원

· Selenium, Ranorex, Jenkins 등 다양한 테스트 툴과 통합 가능

4. LoadUI Pro : 웹 서비스, REST, AMF, JMS, JDBC뿐만 아니라 웹 사이트와 같은 다양한 프로토콜의 부하 테스트를 위한 툴 (LoadUI 오픈소스 툴도 존재함)

· 웹 서비스의 로드 테스트

· 테스트 형태에 따른 분산 UI 제공

· UI를 통하여 동시 및 별도의 결과보고 제공 가능

· SoapUI와 연동 가능

위에 기술된 성능 테스트 툴 이외에도 다양한 툴들이 있으며 테스트 환경과 목적에 맞게 선정하여 사용하시는 것이 효율적입니다.

다음은 성능 테스트 툴을 활용하여 테스트를 진행했던 사례를 소개하도록 하겠습니다.

▣ I사 쇼핑몰 성능 테스트 사례

테스트 대상 및 범위

• 테스트 대상 : B2C몰 및 Admin 운영 서버

• 테스트 범위 : 사용자 및 셀러 관련 주요 시나리오 4건

1. 상품 주문 : 메인 접속 > 로그인 > 상품전시 > 장바구니담기 > 주문하기 > 결제하기 > 로그아웃

2. 주문 : 로그인 > 상품전시 > 장바구니담기 > 주문하기 > 결제하기 > 로그아웃

3. 주문내역 다운로드 : 메인 접속 > 로그인 > 주문/매출관리 > 엑셀로 받기

4. 상품정보 업로드 : 메인 접속 > 로그인 > 상품관리 > 상품정보 엑셀 업로드

테스트 환경

• 성능 테스트 도구 : Apache Jmeter 5.1

• 성능 테스트 환경 구성 : 부하 발생을 위한 Cloud VM 생성 (30대)

• 테스트 데이터 생성 : 사용자 5000명, 셀러 100명 계정 정보 생성, 사용자 계정 당 5백만 포인트 생성, 상품 대량 등록을 위한 업로드용 엑셀 정보 생성

테스트 수행 절차

1. 테스트 계획 수립

· 성능테스트 목표 수립 : 목표 성능치 정의

· WorkLoad 설계

· 테스트 데이터 요청

· 성능테스트 전략 수립 : 테스트 계획 수립, 테스트 자원 산정

2. 분석 및 설계

· 성능 요구사항 분석 : 요구사항 수집, 정의

· 대상 시스템 특성 분석 : API 및 리소스 분석

· 테스트 도구 선정

· 테스트 시나리오 설계

· 테스트 스크립트 설계

3. 성능 테스트 수행

· 수행 준비 점검 : 운영 환경 기준 점검

· 성능테스트 수행 : 통합 성능 테스트 수행

· 성능테스트 결과 분석 : 차수별 결과 분석

4. 테스트 결과 작성 및 보고

· 개선사항 도출 : 개선점 분석 및 도출

· 성능테스트 결과 제출 : 결과보고서 작성/제출

테스트 수행 업무

I사 쇼핑몰에 대한 성능 테스트 시 수행한 업무는 아래와 같습니다.

테스트 산출물

성능 테스트 수행으로 제출한 테스트 산출물은 성능 테스트 계획서와 성능 테스트 결과 보고서이며 구성 목차는 아래와 같습니다.

- 성능 테스트 계획서 구성 목차

· 테스트 목적

· 테스트 대상 및 범위

· 테스트 환경

· 성능 지표 및 목표

· 테스트 일정 및 투입 인력

· 테스트 상세 일정

· 테스트 결과 산출물

- 성능 테스트 결과보고서 구성 목차

· 성능 테스트 개요

· 성능 테스트 수행 절차

· 성능 지표 및 측정 방법

· 성능 테스트 결과 요약

· 총평

테스트 결과 샘플

▣ 글을 마치며

성능 테스트는 서비스/시스템에 대한 가용성 및 효율성을 측정하는 테스트 영역이며 다양한 성능 테스트 툴과 지표가 존재합니다. 따라서 성능 테스트를 수행하기 위해서는 테스트 목적에 부합되는 테스트 툴과 지표를 선정하는 것이 중요하며 또한 측정 결과 분석을 통해 최적의 개선을 수행하여 고품질의 서비스를 제공할 수 있도록 해야 할 것입니다.