성능테스트

제이·2024년 7월 29일
0

사전미팅

알아야 할 단어

  • TPS : 초당 처리건수 - 높아야 좋은 거
  • 가상유저
  • Concurrent user :동시접속자
  • 부하환경
    : 개발 서버(Dev) - 개발자들이 개발하는 서버
    : 스테이징 서버(Stg) - '테스트 서버', 'QA 서버'로도 불림. 운영서버의 클론 형태.
    : 운영 서버(Prod) - 실제 사용하는 운영서버
  • 모니터링
  • APM : 어플리케이션 성능 모니터링
    APM 종류로는 whatap APM, elastic APM 등이 있다.

사전 미팅때 물어봐야 할 것들

  • 가상유저는?
  • 대상 업무는?
  • 부하환경 구축은?
  • 모니터링은? AWS환경 와탭 등의 단어들이 나올 수 있다.
  • 테스트 후 마무리 작업은? : DB를 날리는 작업 등을 알아서 해달라는 식
  • 부하목표치는?

러닝메이트

  • Controller : 부하발생, 모니터링 역할 (약간 스케줄 거는 느낌)
  • Editor : 스크립트 짜는 거
  • RptMan : 리포트매니저 - 결과파일 확인할 때 사용
  • Agent : 봇(유저), 포트는 9800,9801

성능테스트

1. 스크립트

  1. 먼저 폴더 생성해놓기
    (01.script 02.scenario 03.result 04.document 99.etc)

  2. 프로젝트 생성
    (SN01_시나리오이름_TC01_업무이름)

  3. 녹화하기
    녹화할 때 팁! - F12눌러서 확인하는데, 약간 {i} 이 표시되어있는 거 확인하기(캐시메모리 먹는 거 위주로 확인하기)
    ⭐️녹화 후에 한 단위?마다 FindData("") 꼭 해주기!!

  • set_autoredirect(0) : 리다이렉션을 안시켜주는 느낌쓰...(로그인할 때 사용하시는 거 봄)
  • 녹화 잘못 했을 때 삭제하는 법
    0) 녹화 잘못 되어도 중간에 끄지 말고 우선 파일 만들기
    1) 녹화된 그 파일 자체를 삭제
    2) 왼쪽에서 두번째꺼 클릭해서 그 전 데이터를 다 삭제
    3) 스크립트 아예 껐다가 다시 켜서 녹화 진행하기
  1. 필요한 부분만 Begin()에 넣기

    • 로그인 부분을 보통 넣음
    • FindDataSave("state", "state=", "&", "");
      FindDataSave("transaction_id", "transaction_id=", "&", "");
      이런 식으로 설정을 해놓으면 들고온 값 중에서 'transaction_id='로 시작하는 부분에서 '&'로 끝나는 부분까지 값을 "transaction_id"라는 변수에 저장하게 된다.
      그러면 나중에 적용하고 싶을 경우에는 {transaction_id}로 작성하면 된다.
  2. 그리고 cs 파일인 Enerypto.cs에 메서드를 만들면 Begin()에서 사용가능.

  3. 그리고 IncludeFile Viewer에서 변수 user를 만들고 엑셀파일에 첫행에 id입력 후, 2행부터 아이디를 입력하게되면 Begin()에서 {user/id} 형태로 사용 가능.
    또는 ⭐️ GetParam("user/id") 이렇게 사용하기!! getparam이 더 정확한 방법이다.

    InputData("&p_lgn_id=" + HtmlEncode(GetParam("login/id") + "@naver.com"));
    이렇게 사용함!!!

  • 아래 사진이 위의 4~6번 설명 한번에 사용한 것
  1. Script_Action()부분은 제일 처음 만든 TC01을 복사한 후, 사용.
    여기서 왼쪽 Project Viewer에서 프로젝트 이름 변경 해주고,
    Action()부분에서 using (new Transaction(this, "여기부분")) 여기부분을 변경된 프로젝트이름으로 바꿔줘야 한다.

  2. 스크립트 들고 오는 법
    만약 로그인을 하는데 테스트 하는 것에 주된 것이 로그인이 아닐 경우 진짜 로그인하는 것만 들고오기!
    근데 만약 사이트의 특정 페이지가 잘 나오는지 체크하는 거면, 특정 페이지 나오고 그 뒤에 딸려오는 리스트페이지 같은 거까지 들어 가야한다.


2. 시나리오(Controller)

<컨트롤러>에서 작성

Scenario Setting 설정

  1. 라이선스 등록(NewKey) : 인증키 게시판에 올리면 댓글로 수석님 남겨주심.
  2. telnet 확인하기 : telnet ip port 입력
  3. 시나리오 생성
  4. 시나리오 경로 지정
  5. 뭔가 설정하는게 나오는듯
  6. 스크립트 드래그 아래 붙이기
  7. Allocate VUsers에서 % 설정해주기
  8. 오른쪽 마우스 클릭 후 Play Options 클릭
  9. Play Option(선택) - 에러 발생 시 동작 중단 체크 풀기
  10. Pacing Time : 1초 정도로 설정하는 듯
  11. SSL Setting(필수) - 전체 클릭
  12. Agent 설정 : local, 봇1, 봇2 이렇게 추가로 만들어서 ip를 설정해줘야 한다. 포트는 9800,9801
  13. VUser 설정 : Controller 왼쪽에 Begin, Action, End 더블 클릭 하기!
    Begin : 'Action 실행 전 초기화 실행' 설정
    Action : '순차 실행'으로 '1초' 간격으로 설정(1초가 통상적인듯)
    End : '즉시 실행' 클릭

이론적 설명

  • Pacing Time(선택)- 1회 수행 시간 고정 클릭 3000ms로 고정하게 되면 1회에 3초로 설정됨, 내가 쏘고 나서 3초 걸림
    Pacing = 간격
    -> 성능결과로 1초동안 업무가 수행된다고 나옴. 그럼 3초 중 1초업무하고 2초 기다렸다가 한다. 약간 3초안에 업무 다 보는 느낌. 만약 4초가 걸렸다? 그럼 바로 2초 안기다리고 바로 4초뒤에 1초업무 수행함.
  • Think Time(선택) - 업무 요청 응답 후 30초
    -> 3초를 줬다면? 1초 업무를 하고 업무가 끝난 후에 3초를 기다린다.
  • VUser 설정 설명

Controller 왼쪽에 Begin, Action 등이 있음.
이천포럼에서는 100VUser 1초 간격으로 설정함.
만약 Begin에서 순차 실행으로 하게 되면, Begin에서만 100유저씩 들어가서 400유저라고 치면 4초만에 로그인이 끝나버린다.
'Action 실행 전 초기화 실행'하면, Action까지 실행 후에 그 담에 또 100유저가 들어간다.
그리고 Begin에서 using (new Transaction(this, "이름1")) 과 using (new Transaction(this, "이름2"))를 나눠서 설정하게 되면, 나중에 결과 부분에서 이 부분의 트랜잭션 이름1과 이름2가 다 나눠져서 나오게 된다.

Run DashBoard 설정

  1. ServerMonitor 설정 : Add Server 해서 입력하기
    -> 필요한 정보 : IP, 계정ID, 계정PW

  2. ServerMonitor 설정 : Command List 추가 입력하기
    실행명령에 'uname'이라고 치면 result로 LINUX인지, 뭔지 나온다.
    결과 보고 템플릿불러오기를 클릭 후 LINUX 등을 선택 후 확인
    (사보정은 LINUX CPU 클릭해서 설정함)

  3. Add Chart 추가하기 : 우클릭 후 '차트 종류 선택' 눌러서 맨 밑의 CPU 선택 후에 'CPU Useage' 탭에 추가한다.

3. Agent(AWS 세팅법)

AWS 상태일 때는 기본적으로 영어로 세팅 되어 있기 때문에, 한글이 깨지는 경우가 있다.
한글 깨질 때, 관리자권한으로 꼭 들어가기.
(필기내용그대로라 정확하지 않음)
1. 오른쪽 아래 날짜 클릭 -> 지역 -> 오른쪽 -> 관련 설정 -> '추가날짜..' -> 국가 또는 지역 -> 형식(한국어) -> 관리자옵션 -> 시스템 로켈 변경
2. 방화벽 다 내리기(필수)
3. cmd에서 'netstat -an|findstr 9800' or 'netstat -an|findstr 9801' 검색해서 Listening 상태 확인하기

결과보고서 작성

부하TPS / 응답속도

  • 유저수(명)/부하간격(초) = 부하TPS
    ex) 4000/3 = 1,333.3
  • 응답속도
    응답속도는 1초이하가 나와줘야 한다 -> 1초단위이인데 1초보다 늦게 나오면 성능이 안좋은거.

ReportManager 설정

  1. NewChart설정(3가지)

    • VUser Count + TPS(Total)
    • VUser Count + TPS(Transaction) : 개별TPS
    • VUser Count + Response Time(Transaction) : 평균 응답속도
  2. 분리 조회 하기(VUser)

  3. 범례 정보창 클릭

  4. 조회 주기 '1'로 설정

  5. Avg 보기

  6. 그림 클립보드 복사할 때는 조회 주기 '5'로 설정

보고서 작성

  1. 로그인 하는 부분은 0초~로그인 끝나는 시간 지정해서 확인하기
  2. 차트 정보 클립보드에 복사하기
  3. 로그인하는 부분의 값만 정리하기
  4. 개별TPS는 Avg에서 소수점 한자리수
  5. 응답속도는 Avg에서 1000으로 나누고 소수점 세자리수
  6. WAS, WEB, DB CPU 등 거기서 제공하는 모든 것 다 CPU도 작성해야함

성능 이론 공부

  • ASYNK와 SYNK
    보통 메인페이지에 request가 많은데 그럴 경우 사용된다.
    ASYNK냐 아니냐는 담당 개발자에게 물어봐야 한다.
    ASYNK는 요청이 멀티
    SYNK는 요청이 순차적
    ASYNK를 스크립트에서 작성을 하게 되면, RequestAsyncAbortAll() 메서드를 꼭 써줘야하는듯
    ASYNK는 그 한 문단? 마다 끝에 작성해주는듯.

  • Putty
    DB정보 불러올 때 사보정에서 사용
    Putty 명령어 : sar 5 1000(푸티에서만 사용가능) -> 5초 간격으로 1000개 들고오겠다는 뜻이다.
    값 들고오는 법(정확하지않음) : change setting -> logging -> log file지정 -> printable output -> apply

profile
Hello :)

0개의 댓글