withbible / -deprecated-withbible-server

한국성서대학교 성경졸업고사 퀴즈앱 API서버
1 stars 0 forks source link

다수의 가상 사용자가 모두 다른 계정 및 다른 세션의 부하 테스트 설정 #13

Open kimdev0206 opened 1 year ago

kimdev0206 commented 1 year ago

현재 세션 방식의 인증을 하고 있다. 세션 쿠키를 A 엔드포인트에서 응답으로 받을 때, 보호된 B 엔드포인트의 요청에 사용하기 위해 세션 쿠키를 변수에 저장해야한다. 현재 세션 쿠키를 응답헤더에서 받아 변수에 저장할 때, 모든 엔드포인트 요청에 사용되는 전역 변수에 저장이 되는 것 같다. 따라서, 다수의 가상 사용자를 로그인 시킬 때 제일 마지막 가상 사용자의 세션 쿠키로만 시나리오가 시작된다.

artillery의 capture 문법을 이용한 추출을 통해 이를 분간할 수 있지만, capture는 응답바디에서만 작동한다.

https://www.artillery.io/docs/reference/engines/http#scenario-actions

kimdev0206 commented 1 year ago

capture 문법과 무관하게 애초에 시나리오에 사용할 변수를 before에 세팅할 때, 같은 변수를 사용하니 중첩되는 상황을 피할 수 없다.

따라서, 매 시나리오마다 인증 작업을 할 수 밖에 없다.

```yml config: target: "{{ $processEnvironment.LOCAL_HOST }}" tls: rejectUnauthorized: false client: key: "./etc/certs/localhost-key.pem" cert: "./etc/certs/localhost.pem" processor: "../load-test-hook.js" phases: - name: "Warming up the application" duration: 5 arrivalRate: 1 - name: "Mild load on the application" duration: 10 rampTo: 10 before: flow: - loop: - patch: url: "/user/login" auth: user: "{{ $loopElement }}" pass: "{{ $processEnvironment.TEST_PASSWORD }}" json: isAutoLogin: false afterResponse: "setCookieValue" over: - test01 - test02 - test03 - test04 - test05 - test06 - test07 - test08 - test09 - test10 scenarios: ... after: flow: - log: "로그아웃" - patch: url: "/user/logout" cookie: loginData: "{{ cookieValue }}" ``` ```yml config: target: "{{ $processEnvironment.LOCAL_HOST }}" tls: rejectUnauthorized: false client: key: "./etc/certs/localhost-key.pem" cert: "./etc/certs/localhost.pem" processor: "../load-test-hook.js" phases: - name: "Warming up the application" duration: 5 arrivalRate: 1 - name: "Mild load on the application" duration: 10 rampTo: 10 variables: userID: - test01 - test02 - test03 - test04 - test05 - test06 - test07 - test08 - test09 - test10 scenarios: - name: "퀴즈" flow: # 로그인 API - patch: url: "/user/login" auth: user: "{{ userID }}" pass: "{{ $processEnvironment.TEST_PASSWORD }}" json: isAutoLogin: false afterResponse: "setCookieValue" ... # 로그아웃 API - patch: url: "/user/logout" cookie: loginData: "{{ cookieValue }}" ```