0
#
# run command: locust --host=localhost:8000
#
import inspect
import time
from settings import CONFIG
from locust import Locust, TaskSet, task, events
from lib.usermodule import user_create_service

def stopwatch(func):
    def wrapper(*args, **kwargs):
        # get task's function name
        previous_frame = inspect.currentframe().f_back
        _, _, task_name, _, _ = inspect.getframeinfo(previous_frame)

        start = time.time()
        result = None
        try:
            result = func(*args, **kwargs)
        except Exception as e:
            total = int((time.time() - start) * 1000)
            events.request_failure.fire(request_type="TYPE",
                                        name=task_name,
                                        response_time=total,
                                        exception=e)
        else:
            total = int((time.time() - start) * 1000)
            events.request_success.fire(request_type="TYPE",
                                        name=task_name,
                                        response_time=total,
                                        response_length=0)
        return result

    return wrapper


class GRPCMyClient:
    def __init__(self):
        self.usermodule_hostport = CONFIG['grpc']['mymodule_url']

    @stopwatch
    # this is the method we want to measure
    def user_create_service(self, service_name):
        user_create_service(service_name)
        return True


class GRPCMyLocust(Locust):
    def __init__(self):
        super(GRPCMyLocust, self).__init__()
        self.client = GRPCMyClient()


class GRPCMyTasks(TaskSet):
    @task
    def user_create_service(self):
        self.client.user_create_service("koustubh-api-test")


class GRPCMyUser(GRPCMyLocust):
    task_set = GRPCMyTasks
    min_wait = 1000
    max_wait = 1000

我有上面的蝗虫文件。当我使用运行此文件时

locust -f mylocustfile.py

和访问localhost:8089

并设置

`Number of users to simulate -> 1`
`Hatch rate (users spawned/second) -> 1`

并开始测试。请求数以每秒 2 次的速度不断增加 在此处输入图像描述

我预计最大请求数仅为 1,因为用户总数和孵化率都设置为 1。我错过了什么吗?

4

1 回答 1

0

当您使用 Locust Web 时,它会继续孵化,除非您单击停止按钮,而与指定的 #users 无关。为了克服这个问题,有两种选择

  1. 继续使用网络,但是在您的代码中,您可以self.on_stop()在孵化所需数量的用户时调用。

或者

  1. 您可以使用 Locust 的非 Web 版本,然后可以在 locust 命令中使用运行时选项:

蝗虫 -f --no-web -c 1000 -r 100 --run-time 1h30m

蝗虫会在指定的时间后停止

于 2020-01-11T13:22:05.733 回答