系统打开文件限制导致 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 的回答解释了您收到该特定异常消息的原因。
我有一个关于 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
providesself.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 的回答解释了您收到该特定异常消息的原因。