liminfo

Locust Reference

Locust 부하테스트 레퍼런스

28개 결과

Locust Reference 소개

Locust Reference는 Python 기반 부하 테스트 프레임워크 Locust의 핵심 API와 패턴을 검색 가능하게 정리한 치트 시트입니다. 사용자, 태스크, 이벤트, 분산, 설정, 리포트의 6개 카테고리로 구성되어 locustfile 작성, 대규모 부하 테스트 실행, 결과 분석의 모든 단계를 다룹니다. Locust는 웹 API와 마이크로서비스에 수천 명의 동시 사용자를 시뮬레이션하는 데 널리 사용됩니다.

백엔드 엔지니어, QA 엔지니어, DevOps 팀이 API 부하 테스트, CI/CD 성능 게이트, 용량 계획 시 이 레퍼런스를 활용합니다. 사용자 섹션은 HttpUser 기본 HTTP 클라이언트, between()/constant()로 대기 시간 설정, 혼합 시나리오의 사용자 비율을 제어하는 weight, 로그인/로그아웃을 처리하는 on_start/on_stop 훅, 고처리량 시나리오용 FastHttpUser를 다룹니다.

태스크 섹션은 가중치 기반 @task 데코레이터, 관련 태스크 그룹화를 위한 TaskSet, 장바구니 담기→결제→구매 확인 같은 순서가 중요한 흐름을 위한 SequentialTaskSet, 통계 그룹화용 name 별칭과 커스텀 검증을 위한 catch_response를 가진 self.client.get()/post()를 설명합니다. 분산 섹션은 마스터/워커 아키텍처, 멀티코어 활용을 위한 --processes, 자동 테스트 시작을 위한 --expect-workers, 분산 Locust 클러스터 배포를 위한 Docker Compose 설정을 다룹니다.

주요 기능

  • HttpUser: host, wait_time(between/constant), weight 비율, on_start/on_stop 라이프사이클 훅
  • FastHttpUser: geventhttpclient 백엔드를 활용한 고동시성 시나리오
  • @task 가중치, TaskSet 그룹 행동, SequentialTaskSet 순서 흐름
  • self.client.get/post: name 별칭으로 통계 그룹화, catch_response로 커스텀 성공/실패 검증
  • 이벤트 훅: test_start/stop 리스너, 요청별 response_time/exception 이벤트, init 초기화
  • 분산 테스트: --master/--worker 플래그, --processes 멀티코어, --expect-workers 자동 시작
  • Docker Compose: master/worker 서비스, deploy.replicas로 확장 가능한 분산 클러스터
  • CLI 옵션: --headless 모드, --csv 전체 히스토리, --html 리포트, locust.conf, 커스텀 인자

자주 묻는 질문

Locust란 무엇이고 어디에 사용하나요?

Locust는 Python으로 작성된 오픈소스 부하 테스트 프레임워크입니다. HttpUser 클래스와 @task 데코레이터로 사용자 행동을 Python 코드로 정의하면, Locust가 지정된 수의 동시 사용자를 생성해 요청을 보내고 응답 시간, 초당 요청 수, 실패율 통계를 웹 대시보드 또는 CSV/HTML 리포트로 수집합니다.

TaskSet과 SequentialTaskSet의 차이는 무엇인가요?

TaskSet은 여러 태스크를 묶어 가중치에 따라 무작위로 실행합니다. 사용자가 페이지를 자유롭게 이동하는 현실적인 브라우징 행동을 시뮬레이션할 때 적합합니다. SequentialTaskSet은 클래스에 정의된 순서대로 태스크를 실행합니다. 장바구니 담기 → 결제 정보 입력 → 주문 완료처럼 순서가 중요한 워크플로를 모델링할 때 사용합니다.

Locust에서 로그인/로그아웃을 어떻게 구현하나요?

HttpUser 서브클래스에서 on_start() 메서드를 오버라이드해 사용자 생성 시 로그인을 수행합니다. on_start()에서 self.client.post("/login", json={"username": "test", "password": "pass"})를 호출하세요. on_stop()에서는 로그아웃을 처리합니다. 세션 쿠키는 같은 사용자 인스턴스의 요청 간에 자동으로 유지됩니다.

catch_response=True는 무엇이고 왜 유용한가요?

기본적으로 Locust는 연결 오류나 HTTP 에러 상태 코드에서만 요청을 실패로 처리합니다. catch_response=True를 사용하면 커스텀 검증 로직을 추가할 수 있습니다. 컨텍스트 매니저로 사용해 응답 본문에 에러 필드가 있거나, 응답 시간이 임계값을 초과하거나, 데이터가 예상과 다를 때 response.failure("이유")를 호출하세요.

대규모 테스트를 위해 Locust를 분산 모드로 실행하려면?

locust --master -f locustfile.py로 마스터 노드를 시작하고, locust --worker --master-host=MASTER_IP -f locustfile.py로 여러 워커 노드를 시작합니다. 각 워커는 자체 사용자를 생성하고 통계를 마스터로 전송하며, 마스터가 대시보드에서 통합합니다. 마스터에서 --processes -1을 사용하면 같은 머신의 CPU 코어 수만큼 워커를 자동으로 생성합니다.

CI/CD 파이프라인에서 Locust를 웹 UI 없이 실행하려면?

--headless 플래그와 --users, --spawn-rate, --run-time을 조합합니다. 예: locust -f locustfile.py --headless --users 100 --spawn-rate 10 --run-time 60s --host https://api.example.com. --csv results로 통계 파일을 저장하고 --html report.html로 HTML 리포트를 생성합니다. 실패율이 임계값을 초과하면 비정상 종료 코드를 반환합니다.

locustfile에 커스텀 CLI 인자를 추가하려면?

@events.init_command_line_parser.add_listener로 이벤트에 리스너를 추가하고, 리스너 내부에서 parser.add_argument()로 인자 이름, 타입, 기본값, 도움말을 정의합니다. 파싱된 값은 init 이벤트 리스너나 사용자 클래스에서 environment.parsed_options로 접근합니다.

Locust가 수집하고 표시하는 통계는 무엇인가요?

Locust는 엔드포인트별로 초당 요청 수(RPS), 중앙값 응답 시간, 95퍼센타일 응답 시간, 평균/최소/최대 응답 시간, 실패율을 수집합니다. 웹 대시보드는 총 RPS, 시간에 따른 응답 시간, 활성 사용자 수의 실시간 차트를 보여줍니다. 모든 통계를 CSV 파일이나 독립적인 HTML 리포트로 다운로드할 수 있습니다.