항해 99

항해 99 79일차 12/06일

코딩이좋아요 2022. 12. 7. 03:04

오늘은 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

지금은 간단하게 테스트를 해보았는데 다음에는 쿠키로 받은 토큰을 받아서 넘기는거를 공부를 더 해봐야 할 꺼같다.