Исключение locust от 0.9 до 1.3: задачи не определены. используйте декоратор @task или задайте свойство tasks пользователя

#locust

#locust

Вопрос:

У меня есть следующий код, который отлично работает в locust 0.9. Теперь с 1.3 он выдает исключение, упомянутое в названии. Кто-нибудь может увидеть, что не так?

 import time
import random
import datetime
import requests
from requests.packages.urllib3.exceptions import InsecureRequestWarning
import logging
import json
import os
from random import randint, choice

from locust import HttpUser, TaskSet, task
from pyquery import PyQuery

requests.packages.urllib3.disable_warnings()

class FrontPage(TaskSet):
    def on_start(self):
        self.client.verify = False

    @task(20)
    def index(self):
        self.client.get("/")
    
class DestinationPagesFixed(TaskSet):
    de_paths = ["/belgien", "daenemark", "deutschland", "frankreich", "griechenland"
    , "italien"
    , "luxemburg"
    ]
    def on_start(self):
        self.client.verify = False
    @task
    def test_1(self):
        paths = self.de_paths
        path = choice(paths)
        self.client.get(path, name="Static page")

class UserBehavior(TaskSet):
    tasks = {FrontPage: 15, DestinationPagesFixed: 19}


class WebsiteUser(HttpUser):
    task_set = UserBehavior
    min_wait = 400
    max_wait = 10000
  

Комментарии:

1. Ознакомьтесь с ответом cyberwiz. Когда я запускаю это на 1.3, самая первая строка, которую я вижу, это: /locust/util/deprecation.py:17: DeprecationWarning: Usage of User.task_set is deprecated since version 1.0. Set the tasks attribute instead (tasks = [UserBehavior]) DeprecationWarning,

2. интересно.. Тогда это своего рода ошибка (как устаревшая, должно означать, что она все еще работает). Но, глядя на код, я не вижу, чтобы он прилагал какие-либо усилия для фактического ИСПОЛЬЗОВАНИЯ значения task_set . Не уверен, что я могу это исправить (вероятно, это действительно не сработало для всех версий 1.0), но, возможно, мы можем явно выбросить исключение.

Ответ №1:

Изменить

 task_set = UserBehavior
  

Для

 tasks = [UserBehavior]
  

Или (полностью пропуская класс UserBehaviour)

 tasks = {FrontPage: 15, DestinationPagesFixed: 19}