AttributeError, когда я пытаюсь запустить простой loadtest с помощью locust - PullRequest
1 голос
/ 20 сентября 2019

Я создал простой файл теста загрузки для Redis, но при попытке выполнить файл следующим образом:

locust -f load-test.py

Я получаю сообщение об ошибке AttributeError: 'NoneType' object has no attribute '_catch_exceptions'.Я не могу понять причину этого.Что я делаю не так?

Вот небольшой код, который я написал.

# Reference 
# https://docs.locust.io/en/stable/writing-a-locustfile.html
# https://github.com/andymccurdy/redis-py

from locust import Locust, TaskSet, task
import redis


class LoadTestTasks(TaskSet):

    def __init__(self, args):
        self.redis = redis.Redis(host='localhost', port=6379)

    @task
    def update_total_requests(self):
        if self.redis.exists("total-calls") == 1:
            self.redis.incr("total-calls")
        else:
            self.redis.set("total-calls", 1)


class Connection(Locust):
    task_set = LoadTestTasks
    min_wait = 500
    max_wait = 700

Ошибка стека:

    <Greenlet at 0x109f01ae8: start_locust(<class 'load-test.Connection'>)> failed with AttributeError
[2019-09-20 15:11:26,551] my-PCs-MacBook-Pro.local/ERROR/stderr: Traceback (most recent call last):
[2019-09-20 15:11:26,551] my-PCs-MacBook-Pro.local/ERROR/stderr: 
[2019-09-20 15:11:26,551] my-PCs-MacBook-Pro.local/ERROR/stderr: File "/Users/my-pc/anaconda3/lib/python3.7/site-packages/locust/core.py", line 354, in run
    if self.locust.stop_timeout is not None and time() - self._time_start > self.locust.stop_timeout:

1 Ответ

0 голосов
/ 21 сентября 2019

Вы должны добавить супер-вызов к __init__ методу TaskSet, иначе ваш TaskSet не инициализируется Locust.

...
class LoadTestTasks(TaskSet):
    def __init__(self, args):
        super().__init__(parent)
        self.redis = redis.Redis(host='localhost', port=6379)
...
...