3 min to read
Jmeter를 적용 및 gul 기본설정
User Defined Variables
test plan에서 우클릭 add-> Config Element-> User Defined Variables User Defined Variables에 들어가 테스트 전체에 걸쳐 공통적으로 사용할 시스템을 정의
address: localhost port:3000 userCnt: 100 timeSec: 60 loopCnt: 10 enCoding: utf-8
localhost:3000에 테스트시 100멍의 동시 사용자가 60초동안 설정될 요청을 10번 반복한다 1분동안 1000번 실행된다
jp@gc-Transections per Second
플러그인 중 하나로 시스템이 처리할 수 있는 초당 트랜잭션(TPS)를 측정
플러그인을 설치 후 add-> listener에 들어가 선택 후 나온다
thread group
add -> thread-> thread Group을 클릭 쓰레드 그룹 안에서 Thread Propeties에 입력 number of Thread: 테스트 사용자수 Ramp-up preiod: 실행기간(초)
User Defined Variables에서 변수의 값을 변경하면 그 변수가 사용되는 모든 곳에서 값이 변경되어야 한다
- Number of Threads(users): 전체 사용자
- Ramp-Up Period(in seconds): 사용자가 몇초만에 들어올지
- Loop Count: ${loopCnt}
이렇게 박아넣을 수 있다
인줄 알았는데 하드 코딩해야 먹더라 ㅎ
http requset
Jmeter에서는 여러 http 요청을 순차적으로 실행 할 수 있다 여러개의 http 요청을 만들려면 하나의 쓰레드 그룹에서 여러 HTTP Request Sampler를 추가하면 된다
- 회원가입 localhost:3000/api/sign-up 으로 바디 데이터를 가지고 요청을 보낸다
현재의 이메일 인증로직을 일단 무시하기 위해 create시 isVerified를 true로 설정해주고 currentMoney와 initialSeed를 100000으로 설정해준다
이렇게 하면 현재와 달리 기본적으로 돈이 있는걸로 시작해서 주문이 제대로 되는지 알 수 있다
- 로그인 localhost:3000/api/login으로 바디 데이터를 가지고 요청을 보낸다
안의 바디 데이터는 위에 넣어놓은 CSV Data Set Config를 사용한다
- 주문 주문하기 위해 csv파일을 만들어 놓은다
csv파일은 편한 파이썬으로 만들어서 사용한다
컴퍼니 아이디를 고정해놓으니 그 안에서 무작위 sell or buy를 사용하도록 만들고 5자리 숫자를 만든다
두개를 사용하니까 각각의 이름을 다르게 사용한다 바디에 { “companyId”:”${companyId}”, “type”: “${type}”, “price”: “${price}”, “quantity”:”${quantity}”
}
이런식으로 넣는다 이러면 위의 csv파일에서 뺴내서 하나씩 쓸 수 있다
쿠키 전달
나는 자동으로 각각의 세션의 전달해주도록 할꺼다
그러면 수동으로 전달해주는게 아니라 자동으로 한다 위에 추가 해준다
하지만 쿠키 전달이 안됨
찾아보다가 하나의 로직 컨트롤러에 넣어야 한다는 것을 알게 되었다
처음에는 루프로 돌리려고 했는데 루프는 맨위의 User Defined Variables의 루프 한번에 해당한고 해서 onlyone Controller로 바꿨다
안에 http 요청들과 결과를 보기 위한 listener 들을 넣어주니 정상적으로 작동했다
csv에서 함수로
원래는 csv를 썼었는데 그렇게 되면 한명의 유저가 한개의 행을 차지하게 된다
이는 우리가 만든 테스트 시나리오인 한명의 유저가 서로 다른 주문을 여러개 하고 나간다를 할 수 없게 된다 (한명의 유저는 무조건 같은 주문을 하기 때문에)
그래서 csv를 포기하고 함수로 방향을 틀었다
근데 계속 waring이 나왔다
서 Jmeter로 테스트 실행시 계속 nashorn engine is planned to be removed from a future jdk release site:stackoverflow.com가 떴었다
찾아보니 Nashorn JavaScript 엔진은 JDK 8에서 Rhino 스크립팅 엔진을 대체하기 위해 도입되었으나, JDK 15부터 공식적으로 제거되었기 때문에 현재 쓰는 버전(11)인데 그 후 곧 삭제 될것이다 라는 의미 였다
그동안 테스트 진행시 sell과 body중 하나를 선택하기 위헤 자바스크립트를 활용해 request body를 작성하였다
{
"companyId":"${companyId}",
"type":"${__javaScript("${__Random(0,1,varType)}" == 0 ? "buy" : "sell",)}",
"price":"",
"quantity":"${__Random(1,10,varQuantity)}"
}
이 중 타입을 설정하는 부분에서 자바스크립트를 쓰는데 거기서 warning이 뜬것이다
이 요청이 200번 500번 반복되기 때문에 이 warning이 계속 로그에 남았고 이를 해결하기 위헤 javascript가 아닌 groovy로 type을 설정하는 부분을 바꿨다
{
"companyId":"${companyId}",
"type":"${__groovy(Math.random() < 0.5 ? 'buy' : 'sell')}",
"price":"",
"quantity":"${__Random(1,10,varQuantity)}"
}
바뀐후에는 warning이 뜨지 않고 테스트 결과만 뜨게 되었다
이건 한 후에 tps가 엄청올랐다
정리
- User Defined Variables 만들기
- thread group만들기
- 안의 csv Data set 만들기
- 전역으로 header manager와 cookie manager만들기
- once only controller만들기
- 안에 http request와 lister만들기
각각의 요청에 대한 url 작성 확인할것
맨 뒤에 띄어쓰기 하나 잘못 들어가도 %20으로 인식해서 오류남
Comments