margaret
margaret

Reputation: 123

System open file limit causing Locust error

I have a question about Locust. I wrote simple script just to check if Locust work. It should check if I can login to app which I'm testing with phone number and password. I start it with command: locust -f LM.py --host=https://api... <-address of api to login

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

but when i run this i have:

[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

Can someone explain me what to do with this error?

Upvotes: 2

Views: 5705

Answers (2)

Cyberwiz
Cyberwiz

Reputation: 11416

Change

class UserBehavior(User):

to

class UserBehavior(TaskSet):

The way your code is, you are defining two Users, instead of one User and a TaskSet for that user.

The reson you get that specific exception message is explained by Tylers answer.

Upvotes: 1

Tyler
Tyler

Reputation: 1393

I think the error is coming from your using User instead of HttpUser in the UserBehavior class. See the 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."

Also, you're using Locust 1.1 and task_set has been removed. From the 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:"

Try this:

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)

Upvotes: 1

Related Questions