Locust.io, как я могу использовать разных пользователей на locust.io без системных ошибок, когда я запускаю / останавливаюсь для нового запуска

Aug 19 2020

У меня есть этот код, который отлично работает при первом запуске на развернутом сервере locust.io, но когда я запускаю / останавливаю, чтобы сделать новый запуск, я получаю несколько ошибок в отношении списка. Не могли бы вы, ребята, помочь мне научиться ездить на нем?

from locust import HttpUser, task, between, SequentialTaskSet, events
import uuid
import json
import csv
import logging, sys, random, os

with open('somecsv.csv', 'r') as f:
    reader = csv.reader(f)
    user= list(reader)
    #print(user)

class somethingclass(SequentialTaskSet):

    def on_start(self):
        if len(user) > 0:
            self.id= str(user.pop()).strip("][''")

    @task
    def someting(self):
        do something with self.id request
  
    @task
    def someting2(self):
        do something with self.id request
                        


class Main(HttpUser):
    
    wait_time = between(5, 10)
    tasks = [somethingclass]
    
    def _init_(self, *args, **kwargs):
        super(Main, self)._init_(*args, **kwargs)

ошибки:

[2020-08-18 23: 06: 50,899] PC / ERROR / locust.user.task: объект 'somethingclass' не имеет атрибута 'id' Traceback (последний вызов последним): Файл "c: \ windows \ system32 \ src \ locust \ locust \ user \ task.py ", строка 284, при запуске self.execute_next_task () Файл" c: \ windows \ system32 \ src \ locust \ locust \ user \ task.py ", строка 309, в execute_next_task self .execute_task (self._task_queue.pop (0)) Файл "c: \ windows \ system32 \ src \ locust \ locust \ user \ task.py", строка 321, в файле задачи execute_task (сам) "C: \ Users \ user \ Desktop \ Work \ Chipico Chip Transfer \ chiptransfer_load.py ", строка 44, в someting" uuid ": '% s'% self.id, AttributeError: объект 'somethingclass' не имеет атрибута 'id'

Ответы

1 Solowalker Aug 19 2020 at 03:57

Вы можете использовать события test_start и test_stop для сброса userданных.

from locust import User, task, constant, TaskSet, events
from logging import getLogger
import uuid

logger = getLogger("test")
user = []

@events.test_start.add_listener
def start_something(**kwargs):
    logger.info("Starting test...")
    user.append(uuid.uuid4())

class somethingclass(TaskSet):
    @task
    def do_something(self):
        logger.info(f"User: {user}")

class Main(User):
    wait_time = constant(2)
    tasks = [somethingclass]

Это дает мне следующий результат с многократной остановкой и запуском тестов.

[2020-08-18 16:14:12,549] INFO/locust.main: Starting web interface at http://:8089
[2020-08-18 16:14:12,557] INFO/locust.main: Starting Locust 1.1.1
[2020-08-18 16:14:15,759] INFO/test: Starting test...
[2020-08-18 16:14:15,759] INFO/locust.runners: Hatching and swarming 1 users at the rate 1 users/s (0 users already running)...
[2020-08-18 16:14:15,759] INFO/locust.runners: All users hatched: Main: 1 (0 already running)
[2020-08-18 16:14:15,760] INFO/test: User: [UUID('f4e9d580-af4a-4fb7-804a-372faa8fcacd')]
[2020-08-18 16:14:17,764] INFO/test: User: [UUID('f4e9d580-af4a-4fb7-804a-372faa8fcacd')]
[2020-08-18 16:14:19,765] INFO/test: User: [UUID('f4e9d580-af4a-4fb7-804a-372faa8fcacd')]
[2020-08-18 16:14:21,767] INFO/test: User: [UUID('f4e9d580-af4a-4fb7-804a-372faa8fcacd')]
[2020-08-18 16:14:28,674] INFO/test: Starting test...
[2020-08-18 16:14:28,675] INFO/locust.runners: Hatching and swarming 1 users at the rate 1 users/s (0 users already running)...
[2020-08-18 16:14:28,675] INFO/locust.runners: All users hatched: Main: 1 (0 already running)
[2020-08-18 16:14:28,675] INFO/test: User: [UUID('f4e9d580-af4a-4fb7-804a-372faa8fcacd'), UUID('c061117e-f585-4da6-8188-59a0e1ff8acb')]
[2020-08-18 16:14:30,679] INFO/test: User: [UUID('f4e9d580-af4a-4fb7-804a-372faa8fcacd'), UUID('c061117e-f585-4da6-8188-59a0e1ff8acb')]
[2020-08-18 16:14:32,682] INFO/test: User: [UUID('f4e9d580-af4a-4fb7-804a-372faa8fcacd'), UUID('c061117e-f585-4da6-8188-59a0e1ff8acb')]
[2020-08-18 16:14:34,688] INFO/test: User: [UUID('f4e9d580-af4a-4fb7-804a-372faa8fcacd'), UUID('c061117e-f585-4da6-8188-59a0e1ff8acb')]
[2020-08-18 16:14:38,426] INFO/test: Starting test...
[2020-08-18 16:14:38,427] INFO/locust.runners: Hatching and swarming 1 users at the rate 1 users/s (0 users already running)...
[2020-08-18 16:14:38,427] INFO/locust.runners: All users hatched: Main: 1 (0 already running)
[2020-08-18 16:14:38,428] INFO/test: User: [UUID('f4e9d580-af4a-4fb7-804a-372faa8fcacd'), UUID('c061117e-f585-4da6-8188-59a0e1ff8acb'), UUID('cfd2a456-87d4-4cb2-b7d2-939bb1dfc560')]
[2020-08-18 16:14:40,433] INFO/test: User: [UUID('f4e9d580-af4a-4fb7-804a-372faa8fcacd'), UUID('c061117e-f585-4da6-8188-59a0e1ff8acb'), UUID('cfd2a456-87d4-4cb2-b7d2-939bb1dfc560')]
RazvanRistea Aug 19 2020 at 14:55

from locust import Пользователь, задача, константа, набор задач, события из журнала import getLogger import uuid

logger = getLogger ("test") user = []

@ events.test_start.add_listener def start_something (** kwargs): logger.info («Запуск теста ...») user.append (uuid.uuid4 ())

class somethingclass (TaskSet): @task def do_something (self): logger.info (f "Пользователь: {пользователь}")

class Main (Пользователь): wait_time = constant (2) tasks = [somethingclass]

правильный ответ