(부하 시험 도구) Locust의 기본 사용 방법/일반적인 사용 방법
주의사항
이 글은 매우 낡아서 v1.0 이후에는 기재된 실현 과정에서 작업할 수 없다
다른 글은 v1.0의 실시를 소개하였으니 참고하시오
https://qiita.com/sekikatsu/items/992e82671aa505c5a652
Locust가 뭐예요?
환경 구축
공식 게시된 DockerImage, docker-compose를 사용합니다.yaml 정의
필자의 환경은 Mac OS Catalina(10.15.1)
로컬 환경에서 실행
version: "3.4"
x-common: &common
image: locustio/locust
environment: &common-env
TARGET_URL: http://example.com
LOCUSTFILE_PATH: /tests/basic.py
volumes:
- tests/:/tests
services:
locust-master:
<<: *common
ports:
- 8089:8089
environment:
<<: *common-env
LOCUST_MODE: master
locust-slave:
<<: *common
environment:
<<: *common-env
LOCUST_MODE: slave
LOCUST_MASTER_HOST: locust-master
간단히 설명하다.master: UI용 웹 서버입니다.슬레이브 컨트롤도 합니다.
slave: 부하 방안을 실행합니다.부하를 늘리고 싶을 때 다음 슬레이브를 추가합니다.만약 수치가 지정한 부하가 없다면, 슬레이브를 늘려서 대응할 수 있습니다.
docker-compose.yaml의
locust-slave
이름을 locust-slave1
로 바꾸고 복사하면 증가합니다.TARGET_URL:로드할 기본 URL
LOCUSTFILE_PATH: LocustFile이 있는 Pathdocker의 PATH 주의
용례
GET /initalize: 初期化時のマスタデータ取得用
GET /item_list: 初期画面表示時のリスト表示用
POST /add_item: リストに項目を追加する用
실시
같은 차원에서정의py
from locust import HttpLocust, TaskSequence, seq_task, between
from locust.clients import HttpSession
def initialize(l):
l.client.get("/initalize")
def item_list(l):
l.client.get("/item_list")
def add_item(l):
l.client.post("/add_item", {"item_name":"あああ"})
class ScenarioTask(TaskSequence):
# ()内の数値=実行順番
@seq_task(1)
def initialize(self):
initialize(self)
@seq_task(2)
def item_list(self):
item_list(self)
@seq_task(2)
def add_item(self):
add_item(self)
class WebsiteUser(HttpLocust):
task_set = ScenarioTask
# タスク間の時間。1~3秒でランダム秒数で実施する
wait_time = between(1.0, 3.0)
폴더 구성
performance-test-cli
├docke-compose.yaml
└tests
└ basic.py
운행
docker-compose.yaml의 어떤 차원에서.
docker-compose up -d
브라우저localhost:8089
에는 다음 UI가 표시됩니다.다음은 두 개의 수치를 지정하여 실행합니다.
-Number of users to simulate: 최종 도달 사용자 수(= 클라이언트 수)
- 악수 속도: 초당 증가 초수
이 문장에서
매 사용자가 초당 한 번씩 요청을 제출하여 호수 = 초 요청 수를 사용하도록 조정합니다.
상술한 시작을 누르면 시작한다.
사용자 인터페이스 설명
주의사항
tests
바로 아래에서 완료__pycache__
.컴파일된 것을 저장한 것 같으니 실행하기 전에 삭제하는 것이 좋습니다.
흔한 용법
Header를 붙여서 보내고 싶어요.
def initialize(l):
l.client.get(url="/initalize",data={"item": 1},headers={"auth": "xxxxx"})
나는 요청 주체를 json으로 던지고 싶다
형식은 json입니다. 아래와 같습니다.
def add_item(l):
l.client.post(
url="/add_item",
headers={'content-type': 'application/json'},
json={"item_name":"あああ"}
)
wait_시간을 1초로 고정시키려면(사용자 1초에 한 번 요청으로 조정하려면, 사용자 수=초 요청수)
wait_time constant(1)
하나의 시나리오에서 여러 호스트에 부하를 가하려면
http://
등으로, 각각 전체 경로를 기재하면 된다 l.client.post("http://example.com/add_item", {"item_name":"あああ"})
집행 순서를 보증할 필요가 없기 때문에 특정한 요구를 많이 두드리기를 바란다
@task(x)
의 형식으로 기재하다.x는 권중이다.수치가 클수록 실행 빈도가 높아진다
import task
...
@task(2)
def initialize(self):
initialize(self)
@task(1)
def item_list(self):
item_listz(self)
@task(3)
def add_item(self):
add_item(self)
WebUI 같은 건 못 써요.
python이 설치된 환경에서 다음을 수행합니다.
locust -f my_locustfile.py --master
※ docker-compose의 경우 다음 조건command에 기재하면 됩니다.(시도하지 않음)참고일본어 통역이 없네요.
https://docs.locust.io/en/stable/running-locust-distributed.html
Reference
이 문제에 관하여((부하 시험 도구) Locust의 기본 사용 방법/일반적인 사용 방법), 우리는 이곳에서 더 많은 자료를 발견하고 링크를 클릭하여 보았다 https://qiita.com/naoki114/items/7ae5a045bb08c4950b04텍스트를 자유롭게 공유하거나 복사할 수 있습니다.하지만 이 문서의 URL은 참조 URL로 남겨 두십시오.
우수한 개발자 콘텐츠 발견에 전념 (Collection and Share based on the CC Protocol.)