코딩일상

서버 부하 테스트 Artillery 본문

개발 공부/Node.js

서버 부하 테스트 Artillery

solutionMan 2022. 10. 3. 20:44
반응형

 환경 Node.js 가 설치 되어 있어야 합니다.

 

artillery

Modern performance testing toolkit for DevOps and SRE. Latest version: 2.0.0-23, last published: 2 months ago. Start using artillery in your project by running `npm i artillery`. There are 35 other projects in the npm registry using artillery.

www.npmjs.com

artillery 테스트를 하기위해서 테스트 방법을 작성을 하여야 합니다.

config:
  target: "http://localhost:3000" //요청을 보낼곳
  phases:
    - duration: 60 //성능 테스트 지속시간
      arrivalRate: 5 //매초 만들어내는 가상유저의 수
      name: Warm up //테스트 단계 이름

scenarios:
  - name: "Search and buy" //성능테스트 시나리오 이름
    flow:
      - post: //post요청
          url: "/search" //post요청을 보낼링크
          headers: //post요청시 헤더에 담을 값들 
            authorization: 'Bearer 토큰값'
      - get: //get요청시
          url: "/product"

 

자세한건 artillery 공식사이트 참고 및 레퍼런스들 참고

 

Test Scripts | Artillery

- The format of Artillery test scripts

www.artillery.io

로컬 환경 테스트시 터미널 하나는 npm start해주고 하나는 명령어 실행

 

artillery 간단 테스트 시작 명령어(터미널 입력)

npx artillery quick --count 100 -n 50 http://localhost:4001

 

명령어 의미 로컬에다가 100명의 사용자가 50번씩 총 5천번을 요청한다는 뜻

 

 

artillery 시나리오 테스트 시작 명령어(터미널 입력)

npx artillery run --output report.json test.yaml

artillery 테스트 결과가 담기 json파일

artillery 테스트 시작 명령어로 만들어진 report를 html 파일로 만들어 주는것 (터미널 입력)

npx artillery report ./report.json

위 명령어 실행시 생성되는 reoport html

만들어지 html파일에 들어가면 결과들을 표와 그래프 형태로도 볼수있습니다.

결과 보고서 의미

 "counters": {
      "vusers.created": 5400,
      "http.requests": 5400,//전체 요청 갯수
      "http.codes.200": 5400,//요청이 올바르게 된경우
      "http.responses": 5400,//전체 요청 응답갯수
      "vusers.failed": 0, //가상유저가 시나리오 조건을 실패한 경우
      "vusers.completed": 5400 //가상유저가 시나리오 조건을 완료한 경우
...생략...
"summaries": {
      "http.response_time": {
        "min": 13,
        "max": 254,
        "count": 5400,
        "p50": 26.8,
        "median": 26.8,
        "p75": 34.1,
        "p90": 44.3,
        "p95": 56.3,
        "p99": 111.1,
        "p999": 165.7
      }
}
...생략...
  • max: 가장 오래 걸린 요청
  • min: 가장 빠르게 온 요청
  • p95: 전체 HTTP transanction 중 가장 빠른 것 부터 95% 까지
  • p50: 전체 HTTP transanction 중 가장 빠른 것부터 50% 까지
  • p99: 전체 HTTP transanction 중 가장 빠른 것부터 99%

에러 내용들

성능테스트에서 말하는 VUser는 '가상 사용자(Virtual User, Active)를 의미

Error: read ECONNRESET

내 서버에서 병렬적으로 네트워크 요청을 할때 그 갯수가 한계치를 넘어

Error: connect ETIMEDOUT

주로 서버와 연결을 시도할 때 제한시간 안에 연결이 진행되지 않으면 나오는 에러다.

 


레퍼런스

 

 

Artillery.io | Load & Smoke Testing

Keep production reliable, customers happy, and pagers silent.

www.artillery.io

 

Artillery를 이용한 스트레스 테스트 :: Outsider's Dev Story

API 서버나 웹 애플리케이션 서버를 만들면 성능테스트가 필요해진다. 다 만들고 나면 병목 지점을 찾아야 할 필요도 있고 서버가 얼마나 트래픽을 받을 수 있는지 알아야 사용자 증가에 따라 언

blog.outsider.ne.kr

 

Artillery 로 성능 테스트하기

NodeJS 환경에서 성능 테스트를 해보기 위해 Artillery 알아봅니다.

hyunwoo045.github.io

 

 

ETIMEDOUT 에러 원인 및 해결방법

NodeJs 프로젝트를 진행하다가 Sequelize를 활용해서 remote MySQL server에 연결을 진행하려고 했었는데 Error: connect ETIMEDOUT 에러가 나왔다. 에러코드 그대로 연결이 timeout 되었다는 말인데, 이 에러는..

buyandpray.tistory.com

 

[Nodejs] Error: read ECONNRESET at TCP.onStreamRead (node:internal/stream_base_commons:213:20)

해당 오류를 검색해 본 결과 원인은 통신 중 어느 한 쪽의 커넥션이 끊겼을 때 발생한다고 한다. 상대 서버를 조사해 본 결과 상대측에서 끊은 것은 아니라 좀 더 찾아보니, 내 서버에서 병렬적

satisfactoryplace.tistory.com

 

토큰값을 얻고 진행하는 시나리오 

 

Using a 'before' hook to get the access token gives an error · Issue #959 · artilleryio/artillery

I am trying to get the access token in the before section, before running actual scenarios that will use the access token. Here is my code snippet. It is worth noting though that the before block w...

github.com

 

반응형
Comments