책 발췌 – 성능 테스트케이스 설계 예 by Gayathri Mohan
출처: 2022년, Full Stack Testing - A Practical Guide for Delivering High Quality Software, Gayathri Mohan, 8장. Performance Testing
한줄요약: 가상의 온라인 도서관 관리 시스템을 예로 들어 성능 테스트의 목표 KPI(Key Performance Indicators)를 도출하고 테스트케이스를 설계하는 예를 보여준다.
편의상 단순화된 도서관 관리 애플리케이션의 성능을 테스트하고자 한다. 두 가지 유형의 사용자가 있는 데, 책을 추가하고 삭제할 수 있는 관리자(admins)와 모든 책을 볼 수 있고 ID로 책을 검색할 수 있는 고객(customers)이 있다. REST API는 /addBook, /deleteBooks, /books 및 /viewBookByID이다.
목표 KPI 정의
도서관 애플리케이션의 목표 KPI를 찾기 위해 비즈니스 팀과 사내 마케팅 팀으로부터 다음 데이터를 얻었다고 가정하자.
- 유럽의 두 도시에서 출시를 위해 공격적으로 캠페인을 벌이고 있으며 첫 해에 100,000명의 사용자가 참여할 것으로 기대하고 있다.
- 사용자가 단일 세션에서 책 검색, 비슷한 책 보기 등을 하는 데 평균 10분을 소비한다는 연구 결과가 있다.
- 연구에 따르면 일반 사용자는 평균 매달 두 번 책을 빌린다고 한다. 따라서 사용자가 한 달에 두 번 사이트에 액세스할 것으로 기대한다.
- 유럽에서는 사용자가 오전 10시부터 오후 10시 사이에 인터넷을 활발히 사용한다(매일 12시간).
위 데이터를 사용하여 다음을 계산할 수 있다.
- 월간 사이트에 액세스하는 총 사용자 수 100,000명 * 월별 2회 액세스 = 월간 사용자 200,000명
- 월간 사용자 200,000명 ÷ 월 30일 = 일일 사용자 6,667명
(참고로 평일보다 주말에 사용자가 더 많을 수 있으나, 일일 평균 사용자를 계산) - 일일 사용자 6,667명 ÷ 하루 12시간 = 시간당 사용자 555명
(마찬가지로 정오나 저녁 등 하루 중 어떤 시간대에는 다른 시간대보다 사용자가 더 많을 수 있으나 시간당 평균 사용자 수 계산) - 피크를 허용하기 위해 시간당 사용자를 1,000명까지 모을 수 있는 것으로 관대하게 잡는다.
- 각 사용자는 10분의 세션 타임(즉, 10 ÷ 60 = 0.166667시간) 동안 웹사이트를 사용한다.
- 시간당 최대 사용자 1,000명 * 0.166 = 동시 사용자 수 166명
- 각 사용자가 10분 세션 동안 최소 5번의 리퀘스트(도서 검색 및 도서 목록 보기)를 한다고 가정하면 시스템은 5 * 시간당 사용자 1,000명 = 시간당 5,000개의 리퀘스트를 지원해야 한다.
위 계산에 따라 아래와 같은 목표 KPI를 정의하였다.
동시 사용자 166명에 대해 시스템은 3초 이내에 응답해야 한다.
시스템 처리량(throughput)은 시간당 5,000개의 리퀘스트를 지원해야 한다.
테스트를 계속 진행하기 전에 이러한 수치에 대해 클라이언트 관리 팀과 합의를 얻어야 한다. 또한 첫 해 이후를 생각하기 위해 비지니스를 조사하고 목표 수치를 다시 확인할 수도 있다.
테스트 케이스 정의
이제 목표 KPI를 알았으므로 도서관 애플리케이션 기능을 기반으로 적절한 성능 테스트 케이스를 정의할 수 있다.
Benchmark Tests
/addBook, /deleteBooks, /viewBookById 및 /books의 네 가지 엔드포인트 모두에 대한 응답 시간을 벤치마킹한다.
Volume Tests
동시 사용자 166~200명으로 고객 측 엔드포인트의 볼륨 테스트를 수행한다. 즉, /viewBookById 및 /books 엔드포인트는 동시 사용자가 166명인 경우 3초 이내에 응답해야 한다(3초에는 프런트엔드 성능이 포함된 것이므로 엔드포인트에 대해서는 더 낮은 값을 지정해야 한다). 다른 두 엔드포인트에는 관리자만 액세스하므로 볼륨 테스트가 필요하지 않을 수도 있다.
Stress Tests
사용자 100명의 단계적 램프업을 통해 고객 대면 엔드포인트에 대한 스트레스 테스트를 수행하고 한계점(breaking points)을 찾는다.
Throughput Validation
시간당 5,000 리퀘스트 처리량이 가능한지 검증한다. 이 테스트케이스의 사용자 흐름은 책 목록을 보고, 특정 책을 선택하고 설명을 훑어본 다음, 책 목록 페이지로 돌아가서, 또 다른 책을 선택하고 해당 설명을 읽고, 다시 책 목록 페이지로 돌아가는 것인 데, 통틀어 사용자 흐름당 5개의 리퀘스트를 수행한다. 이러한 각 액션 사이에 30초의 씽크 타임을 포함하고, 45명의 사용자가 한 시간 동안 이 사용자 흐름을 계속할 수 있다고 가정한다. 처음 10분 동안 천천히 사용자를 램프업한다.
Soak Tests
사용자가 시스템을 지속적으로 사용할 수 있는지 확인하기 위해 연속 12시간 동안 담금 테스트(soak test)를 수행한다. 위의 처리량 테스트 케이스가 성공한 경우 그것을 재사용하여 12시간 동안 실행시킬 수도 있다.