728x90
자동화 테스트 툴 Docker 설정
이 포스팅에서는 Docker를 사용하여 자동화된 회원가입 테스트를 실행하는 설정을 소개합니다. 이 설정은 Python을 기반으로 하며, Docker 컨테이너 내에서 실행됩니다.
Dockerfile
# Dockerfile
FROM python:3.9-slim
WORKDIR /app
COPY requirements.txt .
RUN pip install --no-cache-dir -r requirements.txt
COPY . .
CMD [ "python", "./http_request_tool.py" ]
# 회원가입이 이미 돼있는경우
#CMD ["python", "http_request_tool.py", "--skip_registration"]
- FROM python:3.9-slim: Python 3.9의 경량 이미지 사용.
- WORKDIR /app: 작업 디렉토리를 /app으로 설정.
- COPY requirements.txt .: requirements.txt 파일을 컨테이너에 복사.
- RUN pip install --no-cache-dir -r requirements.txt: 필요한 패키지 설치.
- COPY . .: 현재 디렉토리의 모든 파일을 컨테이너의 /app 디렉토리에 복사.
- CMD [ "python", "./http_request_tool.py" ]: 컨테이너가 시작될 때 실행할 명령어.
- 주석 처리된 CMD는 회원가입이 이미 완료된 경우 사용됩니다.
http_request_tool.py
import requests
import argparse
from concurrent.futures import ThreadPoolExecutor, as_completed
import logging
import time
import sys
# 로깅 설정
logging.basicConfig(level=logging.INFO, format='%(asctime)s - %(levelname)s - %(message)s')
# API 엔드포인트 설정
SIGNUP_URL = "http://host.docker.internal:8081/api/members/signup"
# 요청 타임아웃 설정 (초 단위)
REQUEST_TIMEOUT = 15
# 배치 처리 설정
BATCH_SIZE = 100
BATCH_DELAY = 5 # 배치 사이의 지연 시간 (초)
# 고유한 사용자 정보 생성 함수
def generate_member_info(member_id, batch_number):
return {
"name": f"member_{member_id}",
"email": f"member_{member_id}@example.com",
"password": "123123",
"phone": f"010-1234-5678",
"address": f"Some Address {member_id}"
}
# 회원가입 함수
def register_member(member_info):
try:
response = requests.post(SIGNUP_URL, json=member_info, timeout=REQUEST_TIMEOUT)
if response.status_code in [200, 201]:
logging.info(f"Registration successful for {member_info['email']}")
return True
else:
logging.warning(f"Registration failed for {member_info['email']}: {response.status_code}")
return False
except requests.exceptions.RequestException as e:
logging.error(f"Registration error for {member_info['email']}: {e}")
return False
# 메인 함수
def main(skip_registration):
member_ids = range(1, 10001) # 예시로 10000명의 사용자를 생성
with ThreadPoolExecutor(max_workers=10) as executor:
futures = []
for member_id in member_ids:
batch_number = (member_id - 1) // BATCH_SIZE + 1
member_info = generate_member_info(member_id, batch_number)
if not skip_registration:
futures.append(executor.submit(register_member, member_info))
# 배치 단위로 딜레이 적용
if len(futures) % BATCH_SIZE == 0:
for future in as_completed(futures):
future.result()
futures = []
time.sleep(BATCH_DELAY)
# 남은 작업 처리
for future in as_completed(futures):
future.result()
if __name__ == "__main__":
parser = argparse.ArgumentParser(description="Automate member registration process.")
parser.add_argument('--skip_registration', action='store_true', help='Skip the registration process if members are already registered')
args = parser.parse_args()
main(args.skip_registration)
- 이 스크립트는 requests 라이브러리를 사용하여 회원가입 요청을 보내고, ThreadPoolExecutor를 사용하여 동시성을 관리합니다.
- --skip_registration 플래그를 통해 회원가입이 필요한 경우와 이미 완료된 경우를 구분할 수 있습니다.
requirements.txt
이 파일은 Python의 의존성을 관리합니다.
requests
requests 라이브러리는 HTTP 요청을 처리하는 데 사용됩니다.
Docker 이미지 빌드 및 컨테이너 실행
이미지를 빌드하고 컨테이너를 실행하려면 다음 명령어를 사용합니다:
1. Docker 이미지 빌드:
docker build -t http-request-tool .
2. 컨테이너 실행:
docker run --rm http-request-tool
이 설정을 통해 Docker 환경에서 효율적으로 자동화 테스트를 수행할 수 있습니다.
회원가입 실행 과정을 볼 수 있고,
실제 DB에 회원가입 값을 확인 할 수 있습니다.
자동화 테스트 툴은 다음과 같은 장점을 제공합니다.
- 자동화된 회원가입 테스트: Python과 Docker를 활용하여 대량의 회원가입 요청을 자동으로 처리할 수 있습니다. 이는 대규모 시스템에서의 성능 테스트와 데이터 입력 작업을 효율적으로 수행하는 데 유용합니다.
- 병렬 처리: ThreadPoolExecutor를 사용하여 동시성 처리를 통해 테스트의 속도를 높이고, 대량의 요청을 빠르게 처리할 수 있습니다.
- 배치 처리 및 딜레이: 일정한 배치 크기와 딜레이를 설정하여 서버에 과부하를 주지 않으면서도 효율적으로 요청을 분산시킬 수 있습니다.
- 유연한 실행 옵션: --skip_registration 플래그를 통해 이미 등록된 회원에 대해서는 등록 과정을 생략할 수 있어, 다양한 테스트 시나리오에 대응할 수 있습니다.
- Docker의 장점: Docker를 사용함으로써 개발 환경과 테스트 환경을 일관되게 유지할 수 있으며, 컨테이너화된 환경에서 일관된 테스트를 보장합니다.
728x90
'IT 개발 관련 > [프로젝트]' 카테고리의 다른 글
[예약구매] 상품 상세 조회 캐싱 적용 전과 후 (1) | 2024.07.22 |
---|---|
[예약구매] 재고 감소 동시성 테스트 (0) | 2024.07.21 |
MySQL transaction_isolation 문제 (0) | 2024.06.21 |
[예약구매] API 문서 작성 (0) | 2024.06.20 |
[예약구매] Docker Compose 로컬 개발 환경 구축 (0) | 2024.06.20 |