hyb
2025-05-14 87453ffd761425b9f363a09a0f8fe07d770cb325
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
import logging
import random
 
import zmq
from httprunner.exceptions import MyBaseError, MyBaseFailure
from httprunner.loader import load_locust_tests
from httprunner.runner import Runner
from locust import HttpLocust, TaskSet, task
from locust.events import request_failure
 
logging.getLogger().setLevel(logging.CRITICAL)
logging.getLogger('locust.main').setLevel(logging.INFO)
logging.getLogger('locust.runners').setLevel(logging.INFO)
 
 
class WebPageTasks(TaskSet):
    def on_start(self):
        self.test_runner = Runner(self.locust.config, self.client)
        self.testcases = load_locust_tests(self.locust.file_path)
 
    @task(weight=1)
    def test_any(self):
        teststeps = random.choice(self.locust.tests)
        for teststep in teststeps:
            try:
                self.test_runner.run_test(teststep)
            except (MyBaseError, MyBaseFailure) as ex:
                request_failure.fire(
                    request_type=teststep.get("request", {}).get("method"),
                    name=teststep.get("name"),
                    response_time=0,
                    exception=ex
                )
 
 
class WebPageUser(HttpLocust):
    task_set = WebPageTasks
    min_wait = 10
    max_wait = 30
 
    file_path = "$TESTCASE_FILE"
    locust_tests = load_locust_tests(file_path)
    config = locust_tests["config"]
    tests = locust_tests["tests"]
 
    host = config.get('request', {}).get('base_url', '')