합격 여부를 Lockst로 통지

10461 단어 locust
개요
  • 시스템 업데이트 후 매번 로드 테스트를 수행합니다. 번거로우므로 자동화하고 싶습니다.😇
  • Locust의headless모드를 정기적으로 실행하면 갈 수 있을 것 같아서 정기적으로locust를 실행합니다파일로 만들어 봤어요.
  • ※ 일사불란하게 실행되지만, 자신이 쓰는 노트로
    알림 내용
  • 단순한 정보는 파란색, 시험에 합격하면 녹색, 시험에 불합격하면 빨간색으로 알림
  • 적격 여부는'실패건수'와'응답의 99%ile'
  • 로 판정
  • 합격 여부를 판정할 때 어느 한 측이 실패할 때@here에 판정한다
  • 성능에 문제가 있을 때만 알아볼 수 있습니다!
  • 이루어지다
    locust_file.py
    from locust import HttpUser, TaskSet, task, constant_pacing, events
    import slackweb
    import os
    
    class UserTaskSet(TaskSet):
        @task(1)
        def sample(self):
            self.client.get(url="/sample", verify=False)
    
    class WebsiteUser(HttpUser):
        tasks = [UserTaskSet]
        wait_time = constant_pacing(1)
    
        host = 'http://localhost:8080'
    
    @events.test_stop.add_listener
    def test_stop(**kwargs):
        slack = slackweb.Slack(url="<incoming webhookのURL>")
    
        # テストOKのカラー
        color_success = "#00ff00"
        # テストNGのカラー
        color_failed = "#cc3366"
        # infoのカラー
        color_info = "#99ffff"
    
        failure_threshold = int(os.environ.get("FAILURE_NG_THRESHOLD", 1))
        percentile_threshold = int(os.environ.get("PERCENTILE_NG_THRESHOLD", 1000))
    
        for v in kwargs['environment'].stats.entries:
            item = kwargs['environment'].stats.get(v[0], v[1])
    
            is_failure_ok = item.num_failures < failure_threshold
            is_percentile_ok = item.get_response_time_percentile(99) < percentile_threshold
            mention = "<!here>\n" if not is_failure_ok or not is_percentile_ok else ""
    
            rps = {
                "title": "rps (info)",
                "color": color_info,
                "text": "{:.1f} r/s".format(item.total_rps),
                "mrkdwn_in": ["text"]}
            failure = {
                "title": "Failure",
                "color": color_success if is_failure_ok else color_failed,
                "text": "{} ( {}% )".format(item.num_failures, item.fail_ratio),
                "mrkdwn_in": ["text"]}
            percentile = {
                "title": "99 Percentile",
                "color": color_success if is_percentile_ok else color_failed,
                "text": "{} ms".format(item.get_response_time_percentile(99)),
                "mrkdwn_in": ["text"]}
            # slack通知を行う
            slack.notify(
                text="{}Load test result of *{} {}*".format(mention, v[1], v[0]),
                attachments=[rps, failure, percentile])
    
    설치 포인트 또는 문서
  • locust의 이벤트 처리
  • https://docs.locust.io/en/stable/api.html#event-hooks
  • slack 알림(slackweb)
  • https://github.com/satoshi03/slack-python-webhook
  • 그리고 @events.test_stop.add_listener 방법으로 받아들이고kwargs 무엇으로 얻을 수 있는지 dir() 샅샅이 조사해 봤습니다.😇

    좋은 웹페이지 즐겨찾기