항해 99 79일차 12/06일
오늘은 Artillery로 api 성능 테스트를 했다.
//개발자 모드로 설치
npm run -D artillery
//빠른 부하테스트 확인
npx artillery quick --count 100 -n 50 http://localhost:3000
--count : 요청하는 가상의 인원
-n : 요청 횟수
--rate : 초당 요청
min: 제일 빠른 응답(0.16sec)
max: 제일 느린 응답(0.16sec)
median:응답 평균치((0.159sec)
p95:응답 중 95번쨰 느린값(0.159sec)
p99:응답 중 99번쨰 느린값(0.159sec)
평균치와 p95,p99 의 차이가 크지않으면 성능이 좋다고 보면 된다.
Artillery로 시나리오로 작성해서 유저의 행동 패턴을 예측해서 사용 할 수도 있다.
시나리오 작성 파일은 yaml 과 json이 있는데 yaml파일로 작성했는 이유는 주석을 사용 할 수 있어서 선택했다..
config:
target: "http://localhost:3000"
phases:
# 가상유저
- duration: 600
# 가상의 유저가 매초 요청 횟수
arrivalRate: 10
# 동시 접속자수제한
maxVuses: 1000
payload:
path: "data.csv"
fields:
# CVS코드 불러오기
- "email"
- "password"
- "pardo"
- "dt"
- "reviewComment"
- "campNumbers"
- "numOfRows"
- "pageNo"
- "doNm"
- "topicId"
scenarios:
- name: "날씨 요청 토 쿼리문으로 요청 후 로그인하고 마이페이지 조회"
flow:
- get:
url: "/weathers/recommend"
- get:
url: "/weathers/?pardo={{ pardo }}&dt={{ dt }}"
# 마이페이지 조회
- get:
url: "/users/myPage"
# 토큰 설정
headers:
authorization: 'Bearer 토큰 넣기'
refreshtoken: '토큰 넣기'
# 프로필 수정
- put:
url: "/users/myPage"
headers:
authorization: 'Bearer 토큰 넣기'
refreshtoken: '토큰 넣기'
json:
nickname: "{{reviewComment}}"
//scv파일
youw504092@homz.com,@Qwer1234,인천,20221209,리뷰굤뤋딢굫뽋꽦벋녮낅맾땛깜콘눸찤긚,333,10,10,대구시,3
youw96729@gmaii.com,@Qwer1234,대전,20221210,리뷰굤뤋딢굫뽋꽦벋녮낅맾땛깜콘눸찤긚,521,10,5,전라북도,3
youw18276@navsr.com,@Qwer1234,전북,20221207,리뷰굤뤋딢굫뽋꽦벋녮낅맾땛깜콘눸찤긚,597,10,8,전라북도,4
youw680156@home.com,@Qwer1234,제주,20221208,리뷰굤뤋딢굫뽋꽦벋녮낅맾땛깜콘눸찤긚,832,10,9,경기도,1
youw423214@gmaii.com,@Qwer1234,대전,20221210,리뷰굤뤋딢굫뽋꽦벋녮낅맾땛깜콘눸찤긚,932,10,8,경상남도,3
youw633775@homz.com,@Qwer1234,인천,20221209,리뷰굤뤋딢굫뽋꽦벋녮낅맾땛깜콘눸찤긚,927,10,9,전라북도,1
youw972428@home.com,@Qwer1234,제주,20221208,리뷰굤뤋딢굫뽋꽦벋녮낅맾땛깜콘눸찤긚,115,10,6,제주도,3
youw127639@gmaii.com,@Qwer1234,대전,20221210,리뷰굤뤋딢굫뽋꽦벋녮낅맾땛깜콘눸찤긚,94,10,5,경기도,4
youw86307@gmaii.com,@Qwer1234,대전,20221210,리뷰굤뤋딢굫뽋꽦벋녮낅맾땛깜콘눸찤긚,448,10,8,경기도,1
youw468097@naver.com,@Qwer1234,서울,20221206,리뷰굤뤋딢굫뽋꽦벋녮낅맾땛깜콘눸찤긚,467,10,1,경기도,3
yaml 파일을 코드의 들여쓰기를 맞춰야 해서 에러가 많이 났던거 같다.
유저가 날씨를 조회 하고 마이페이지 조회 및 프로필 수정까지 하는 로직이다.
config: 시작
target: 서버 url
duration: 가상유저
arrivalRate: 가상의 유저가 매초 요청 횟수
maxVuses: 동시 접속자수제한
payload: 임의의 데이터를 사용할때
path: 파일 이름
fields: 외부 파일 불러올때 컬럼(scv파일의 ,를 기준으로 제일 왼쪽부터 순서대로 칼럼명을 작성 하면 된다.)
- 컬럼이름
- 컬럼이름
scenarios:
name: 시나리오 이름
flow: 시나리오 진행 할 때 동작 순서대로 작성
위의 필드에서 불러온 컬럼이름을 {{컬럼이름}} 이렇게 작성해서 불러온 scv 데이터를 값을 바꿔가면서 사용 할 수 있다.
- get,- post,- put,- delete 작성
url : 요청할 경로
headers : 헤더에 담아서 보낼 수 있다.
json: body값으로 넣어서 보낼 데이터
capture :응답으로 받은 데이터를 다시 변수로 지정해서 사용가능
//작성한 시나리오 yaml 실행 코드
npx artillery run -o report.json sinario.yaml
npx artillery sinario.yaml
//그래프 보기위한 html 변환
npx artillery report report.json
지금은 간단하게 테스트를 해보았는데 다음에는 쿠키로 받은 토큰을 받아서 넘기는거를 공부를 더 해봐야 할 꺼같다.