토큰 인증이 필요한 api를 테스트하기 위해서는 가상의 유저 정보를 생성하여 토큰을 전달해줄 필요가 있다.
먼저, 가상의 사용자 정보와 토큰을 생성할 JavaScript 함수를 만듭니다. 이 함수들은 Artillery의 processor
를 통해 테스트 스크립트에서 사용될 수 있습니다.
generateData.js
파일에 다음과 같은 함수를 구현할 수 있습니다.
// 가상의 사용자 정보를 생성하는 함수
function generateUserData() {
const user = {
id: `user_${Math.floor(Math.random() * 10000)}`,
username: `user${Math.floor(Math.random() * 10000)}`,
password: `password${Math.floor(Math.random() * 100)}`,
};
return user;
}
// 가상의 토큰을 생성하는 함수
function generateToken() {
// 간단한 예시로, 실제 토큰 생성 로직은 프로젝트의 요구사항에 따라 달라질 수 있습니다.
const chars = 'ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyz0123456789';
let token = '';
for (let i = 0; i < 20; i++) {
token += chars.charAt(Math.floor(Math.random() * chars.length));
}
return token;
}
module.exports = {
generateUserData,
generateToken,
};
generateData.js
파일에서 정의한 함수들을 Artillery 테스트 스크립트에서 사용하기 위해, processor
를 사용하여 해당 파일을 테스트 스크립트에 연결합니다.
testScript.yml
테스트 스크립트 예시:
config:
target: 'http://example.com/api'
processor: "./generateData.js" # 함수가 정의된 파일 연결
phases:
- duration: 60
arrivalRate: 10
variables:
# 사용자 데이터와 토큰을 변수로 저장
userData: "{{ generateUserData() }}"
token: "{{ generateToken() }}"
scenarios:
- flow:
- post:
url: "/login"
json:
username: "{{ userData.username }}"
password: "{{ userData.password }}"
capture:
json: "$.token"
as: "loginToken"
- get:
url: "/protected/resource"
headers:
Authorization: "Bearer {{ loginToken }}"
이 예시에서는 generateUserData
함수를 사용하여 가상의 사용자 정보를 생성하고, generateToken
함수를 사용하여 가상의 토큰을 생성합니다. 생성된 사용자 정보는 로그인 요청에 사용되며, 로그인 후 반환된 토큰은 보호된 리소스에 대한 요청에 사용됩니다.
이 방법을 통해 실제와 유사한 데이터를 사용하여 인증이 필요한 API의 부하 테스트를 보다 현실적으로 시뮬레이션 할 수 있습니다.
이런 자료를 참고했어요.
[1] Firebase - 커스텀 토큰 만들기 - Authentication - Firebase (https://firebase.google.com/docs/auth/admin/create-custom-tokens?hl=ko)
[2] Google Cloud - 서비스 계정에 단기 사용자 인증 정보 만들기 | IAM 문서 (https://cloud.google.com/iam/docs/create-short-lived-credentials-direct?hl=ko)
[3] Google Cloud - 단기 서비스 계정 사용자 인증 정보 만들기 | IAM 문서 (https://cloud.google.com/iam/docs/creating-short-lived-service-account-credentials?hl=ko)
[4] kakaocorp.com - REST API | Kakao Developers 문서 - 카카오 (https://developers.kakao.com/docs/latest/ko/kakaologin/rest-api)
뤼튼 사용하러 가기 > https://agent.wrtn.ai/5xb91l