(부하 시험 도구) Locust의 기본 사용 방법/일반적인 사용 방법

주의사항


이 글은 매우 낡아서 v1.0 이후에는 기재된 실현 과정에서 작업할 수 없다
다른 글은 v1.0의 실시를 소개하였으니 참고하시오
https://qiita.com/sekikatsu/items/992e82671aa505c5a652

Locust가 뭐예요?

  • 부하시험공구
  • 한꺼번에 대량의 요청이 발생할 수 있음
  • Python
  • 부하 시험 처리를 간단하게 정의할 수 있음
  • 환경 구축


    공식 게시된 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 주의

    용례

  • 어떤 응용 프로그램으로 서비스가 시작될 때의 순간 부하를 측정하고 싶다
  • API는 다음과 같습니다
  • .
    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: 최종 도달 사용자 수(= 클라이언트 수)
    - 악수 속도: 초당 증가 초수
    이 문장에서
    매 사용자가 초당 한 번씩 요청을 제출하여 호수 = 초 요청 수를 사용하도록 조정합니다.

    상술한 시작을 누르면 시작한다.

    사용자 인터페이스 설명

  • Chats 태그: 차트를 통해 요청된 초 수
  • 표시
  • 고장: 요청이 실패하면 간단한 예외 내용을 제공합니다
  • Exceptions: 예외 StackTrace
  • 다운로드 데이터: CSV에서 결과 데이터를 다운로드할 수 있습니다.
  • Slaves:Locust의 Slave 상태.
  • 주의사항

    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에 기재하면 됩니다.(시도하지 않음)
  • 다른 이미지(예를 들어alpine)에python/locust
  • 설치
  • 이번과 다른 형식의 docker-compose.yaml을 만들고command에서 상기 명령을 설명합니다
  • 나는 다시 다른 기사로 쓰고 싶다.
    참고일본어 통역이 없네요.
    https://docs.locust.io/en/stable/running-locust-distributed.html

    좋은 웹페이지 즐겨찾기