기본적인 실행 순서는 다음과 같다
홈페이지 접속 -> 로그인 -> websocket 연결 -> 종료
다음의 형태로 진행할 예정이다.
테스트 생성하기
test plan - add - Thread Group 클릭
Thread Group은 테스트의 기초설정을 담당하며 각 옵션은 다음과 같다.
Name: 테스트 계획에 대한 이름을 지정하는 필드입니다. 기본값은 "Thread Group"입니다.
Comments: 해당 Thread Group에 대한 설명이나 주석을 추가할 수 있는 필드입니다. 테스트 계획을 설명하는 데 유용합니다.
Action to be taken after a Sampler error:
Continue: 오류가 발생해도 테스트를 계속 진행
Start Next Thread Loop: 현재 스레드의 남은 작업을 중지하고 다음 루프를 시작
Stop Thread: 현재 스레드를 중지
Stop Test: 전체 테스트를 중지
Thread Properties:
Number of Threads (users): 테스트에 사용할 가상 사용자의 수를 설정 (100명으로 설정)
Ramp-up period (seconds): 모든 스레드를 시작하는 데 걸리는 시간을 설정 -> 0.01초마다 1명씩 총 100명이 스레드 실행
Loop Count: 각 스레드가 샘플러를 실행할 횟수를 설정합니다. "Infinite" 옵션을 선택하면 무한 반복됩니다.
Same user on each iteration: 체크하면 각 스레드가 반복할 때 동일한 사용자로 동작합니다.
Number of Threads (users): 100명의 가상 사용자를 생성하여 테스트를 수행합니다.
Ramp-up period (seconds): 1초 동안 모든 스레드를 시작합니다.
Loop Count: 각 스레드가 테스트 샘플러를 한 번 실행합니다.
Same user on each iteration: 동일한 스레드가 동일한 사용자로 반복 동작합니다.
주요 내용은 100명의 사용자가 0.01초마다 테스트를 진행할 예정이다.
홈페이지 접속하기
Thread Group - add - Sampler - HTTP Request 클릭
Path - 테스트할 페이지의 URL 입력
Server Name or IP - IP 입력
테스트 결과 확인하기
Thread Group - Add - Listener - 원하는 report 클릭 (여기선 View Result Tree 및 플러그인 3 Basic Graph의 Active Thread Over time을 사용)
View Result Tree - 테스트 상세 내역을 확인가능
Active Thread Over time - 전체 테스트 시간 확인가
로그인 진행하기
동일한 HTTP Request를 생성하며 HTTP Request를 POST로 변경, Body Data를 json형태로 입력 가능하다.
401에러가 나타날경우
Add - Config Element - Http Header Mnager를 다음과 같이 설정해준다.
CSV의 경우
만일 데이터를 동적으로 할당하고 싶은경우
Add - Config Element -CSV Data Set Config 클릭
filename은 자신이 사용할 CSV파일을 지정해준다
login은 다음과 같이 "${value}"의 형태로 사용한다
만약 에러가 나타날경우 추가적인 설정을 진행해줘야 한다. 에러에 대한 자세한 내용은 해당부분에서 확인 가능하다
1. DB랑 통신이 되어있는가?
2. 스프링 시큐리티 설정으로 인해 접근이 안되는가?
3. 로그인 정보가 올바른가?
view Results Tree에서 테스트 결과 확인이 가능하다
WEBSOCKET 테스트
해당 설정은 Websocket의 설정이지만 내 방식은 STOMP를 활용하기에 조금 다른 형태로 진행한다.
처음 테스트를 진행했을때 계속 에러가 나왔는데 확인해보니 STOMP의 경우 URL이 변계속 연결부분이 바뀌는 문제가 있었다 (개발자도구에서 확인 가능)
해당 방식이 디폴트이다.
/example/stomp-endpoint/${counter}/${__RandomString(8,abcdefghijklmnopqrstuvwxyz,sessionld)}/websocket
- /example/stomp-endpoint/: WebSocket 서비스의 기본 경로
자신이 만든 WebSocketConfig 에서 Endpoint 입력할것
@Override
public void registerStompEndpoints(StompEndpointRegistry registry) {
registry.addEndpoint("/example/stomp-endpoint")
.setAllowedOrigins("*")
.withSockJS();
}
- ${counter}: 랜덤한 index값
Jmeter - ADD - ConfigElemnet - Counter 클릭
111 부터 1씩 올리는 형태로 설정
- ${__RandomString(8,abcdefghijklmnopqrstuvwxyz,sessionld)}: 각 연결에 대해 고유한 임의의 문자열을 생성한다 (8글자를 사용하며 랜덤으로 사용한다)
- /websocket: WebSocket 프로토콜을 사용하여 연결을 설정
전체 depth는 다음과 같다.
결과
100개의 스레드가 10초간 실행되도록 하였을때 10초 부분까지 점진적으로 증가하다 테스트가 스레드가 종료되는 10초 이후부터 감소하는것을 확인할수 있다.
'Spring' 카테고리의 다른 글
젠킨스 로컬에서 자동화하기 - 2 (0) | 2024.06.22 |
---|---|
젠킨스 관련 에러 내용 (crumb, 용량부족) (0) | 2024.06.16 |
Jmeter - 1 (0) | 2024.06.08 |
배포흐름 (0) | 2024.05.26 |
소켓 / 웹소켓 (0) | 2024.04.07 |