728x90
시나리오 작성하기
config:
target: 'http://localhost:8080'
phases:
- duration: 30
arrivalRate: 3
name: Warm up
- duration: 30
arrivalRate: 3
rampTo: 30
name: Ramp up load
- duration: 60
arrivalRate: 30
name: Sustained load
- duration: 30
arrivalRate: 30
rampTo: 10
name: End of load
scenarios:
- name: "login and use some functions"
flow:
- post:
url: "/login"
- get:
url: "/some-function-one"
- get:
url: "/some-function-two"
- name: "just login"
flow:
- post:
url: "/login"
Phases
성능 테스트가 어떤 식으로 몇개의 요청을 할 지 지정할 수 있다.2895
duration
시간 설정
기본은 초단위고 m을 붙이면 분단위 h를 붙이면 시간단위로 설정할 수 있다.
arrivalRate
1초동안 보낼 요청 수
name
요청 이름
rampTo
Duration 동안 처음에는 매초 arrivalRate value번씩 요청을 보내기 시작하다 점점 횟수를 rampTo로 맞춰가며 마지막에는 rampTo value번까지 요청 횟수를 맞춰가는 것이다.
트래픽과 처리량을 점점 늘리거나 줄일 수 있다.
pause
몇초동안 멈춤
Scenarios
사용자가 어떤 순서대로 요청을 할지를 작성하는 부분이다.
flow
요청 흐름을 지정한다. 요청은 메서드와 경로를 지정할 수 있다.
결과
scenarios created의 두배정도의 요청이 보내진 것을 볼 수 있다.
시나리오가 2개 이기 때문이다.
시나리오에 사용자를 두명 설정해서 두명이 요청 보낼 때가 있는 점을 확인
파라미터 활용하기
아래와 같은 컨트롤러가 있다.
@RestController
public class ParameterController {
private static final Logger logger = LoggerFactory.getLogger(ParameterController.class);
@PostMapping("/login-with-id-password")
public String loginWithIdPassword(@RequestBody IdAndPassword idAndPassword) {
logger.info("{} / {}", idAndPassword.getId(), idAndPassword.getPassword());
return "Login Success";
}
}
성능 테스트를 하면서 파라미터를 CSV파일에 넣어 지정해서 보내면 실제로 요청이 되는지 확인해보자.
CSV 파일
user1,password123
user2,securepass456
...
user30,letmein2023
yaml파일
config:
target: 'http://localhost:8080'
phases:
- duration: 30
arrivalRate: 3
name: Warm up
payload: # 파라미터로 보내려는 값들 불러오는 부분
path: "id-password.csv" # 파일 경로
fields: # 콤마로 구분 되어있는 부분 순서대로
- "id"
- "password"
scenarios:
- name: "just login"
flow: # 필드 사용 부분, Json body, url에 쿼리파라미터 등에 사용 가능하다.
- post:
url: "/login-with-id-password"
json:
id: "{{ id }}" # 앞의 id는 java소스의 파라미터에 맞춘 것이고, 뒤의 id는 csv에서 불러온 값을 의미
password: "{{ password }}"
참고: {{ id }} 중괄호 안쪽에 띄어쓰기는 아틸러리의 문법이다.
테스트 실행하기
artillery run --output report.json parameter-test-config.yaml
참고
728x90
'knowledge > computer science' 카테고리의 다른 글
concurrency control 기초: schedule과 serializability (0) | 2024.06.19 |
---|---|
[DB] 트랜잭션과 ACID (0) | 2024.06.18 |
[성능 테스트] Artillery 설치 (0) | 2024.06.06 |
[성능 테스트] 필요한 배경 지식 (0) | 2024.06.03 |
동기식/비동기식 개념과 장단점 (0) | 2024.03.12 |