系统打开文件限制导致 Locust 错误

System open file limit causing Locust error

我有一个关于 Locust 的问题。我写了一个简单的脚本来检查 Locust 是否工作。它应该检查我是否可以使用 phone 号码和密码登录我正在测试的应用程序。我用命令启动它: locust -f LM.py --host=https://api... <-api 的登录地址

import random, json
from locust import HttpUser, task, between, TaskSet, User


class UserBehavior(User):
    def __init__(self, parent):
        super(UserBehavior, self).__init__(parent)

        self.token = ""
        self.headers = {}

    def on_start(self):
        self.token = self.login()

        self.headers = {'Authorization': 'Token ' + self.token}

    def login(self):
        response = self.client.post("/v1/auth/login", data={'phoneNumber': '+666000666', 'password': 'dupadupa'})


    @task
    def index(self):
        self.client.get("/v1/me/profile", headers=self.headers)



class WebsiteUser(HttpUser):
    task_set = UserBehavior
    min_wait = 5000
    max_wait = 9000

但是当我 运行 我有:

[2020-07-07 00:39:53,931] DESKTOP-2JQB2EC/WARNING/locust.main: System open file limit setting is not high enough for load testing, and the OS wouldnt allow locust to increase it by itself. See https://docs.locust.io/en/st
able/installation.html#increasing-maximum-number-of-open-files-limit for more info.
[2020-07-07 00:39:53,932] DESKTOP-2JQB2EC/INFO/locust.main: Starting web interface at http://:8089
[2020-07-07 00:39:53,955] DESKTOP-2JQB2EC/INFO/locust.main: Starting Locust 1.1
[2020-07-07 00:40:06,436] DESKTOP-2JQB2EC/INFO/locust.runners: Hatching and swarming 1 users at the rate 1 users/s (0 users already running)...
[2020-07-07 00:40:06,437] DESKTOP-2JQB2EC/INFO/locust.runners: All users hatched: UserBehavior: 1, WebsiteUser: 0 (0 already running)
Traceback (most recent call last):
  File "src\gevent\greenlet.py", line 854, in gevent._gevent_cgreenlet.Greenlet.run
  File "c:\users\warpath\pycharmprojects\locustlm\venv\lib\site-packages\locust\user\users.py", line 164, in run_user
    user.run()
  File "c:\users\warpath\pycharmprojects\locustlm\venv\lib\site-packages\locust\user\users.py", line 131, in run
    self.on_start()
  File "C:\Users\Warpath\PycharmProjects\LocustLM\LM.py", line 13, in on_start
    self.token = self.login()
  File "C:\Users\Warpath\PycharmProjects\LocustLM\LM.py", line 18, in login
    response = self.client.post("/v1/auth/login", data={'phoneNumber': '+666000666', 'password': 'dupadupa'})
  File "c:\users\warpath\pycharmprojects\locustlm\venv\lib\site-packages\locust\user\users.py", line 16, in __getattr__
    raise LocustError("No client instantiated. Did you intend to inherit from HttpUser?")
locust.exception.LocustError: No client instantiated. Did you intend to inherit from HttpUser?
2020-07-06T22:40:06Z <Greenlet at 0x215dca9e048: run_user(<LM.UserBehavior object at 0x00000215DC9F67C8>)> failed with LocustError

谁能解释一下如何处理这个错误?

我认为错误来自于您在 UserBehavior class 中使用 User 而不是 HttpUser。见 quickstart.

HttpUser provides self.client for each session: "Here we define a class for the users that we will be simulating. It inherits from HttpUser which gives each user a client attribute, which is an instance of HttpSession, that can be used to make HTTP requests to the target system that we want to load test."

此外,您使用的是 Locust 1.1,task_set 已被删除。来自 1.0 changelog:

"The task_set attribute on the User class (previously Locust class) has been removed. To declare a User class with a single TaskSet one would now use the the tasks attribute instead:"

试试这个:

import random, json
from locust import HttpUser, task, between, TaskSet, User


class UserBehavior(HttpUser):
    min_wait = 5000
    max_wait = 9000

    def __init__(self, parent):
        super(UserBehavior, self).__init__(parent)

        self.token = ""
        self.headers = {}

    def on_start(self):
        self.token = self.login()

        self.headers = {'Authorization': 'Token ' + self.token}

    def login(self):
        response = self.client.post("/v1/auth/login", data={'phoneNumber': '+666000666', 'password': 'dupadupa'})


    @task
    def index(self):
        self.client.get("/v1/me/profile", headers=self.headers)

改变

class UserBehavior(User):

class UserBehavior(TaskSet):

按照您的代码,您定义了两个用户,而不是一个用户和该用户的任务集。

Tylers 的回答解释了您收到该特定异常消息的原因。