Использование Locust для запуска нагрузочного теста на нескольких URL-адресах, загруженных из CSV одновременно

Ссылаясь на мой locusfile.py ниже:

from locust import HttpLocust, TaskSet, between, task
import csv

class UserBehavior(TaskSet):
    @task(1)
    def index(l):
        with open ('topURL.csv') as csvfile:
            readCSV = csv.reader(csvfile, delimiter=',')
            for row in readCSV:
                l.client.get("%s" % (row[0]))

class WebsiteUser(HttpLocust):
    task_set = UserBehavior
    wait_time = between(5.0, 9.0)

Когда я запускаю этот скрипт, Locust работает без ошибок. Однако он будет перебирать каждую строку и загружать для тестирования только последний URL-адрес. При чтении следующего URL-адреса предыдущий URL-адрес больше не подвергается нагрузочному тестированию. Вместо этого я хочу, чтобы Locust загружал тестовые все больше и больше URL-адресов одновременно, поскольку он читает строку за строкой из CSV.

Изменить
Мне удалось добиться частичного параллелизма, установив wait_time = between(0.0, 0.0)


person Kelvin Low    schedule 09.03.2020    source источник


Ответы (2)


Попробуйте заполнить массив данными csv при настройке и выбрать из него случайным образом. Нравиться

    def fill_array():
        with open('topURL.csv') as csvfile:
        readCSV = csv.reader(csvfile, delimiter=',')
        for row in readCSV:
            urls.append(row[0])

потом

    @task(1)
    def index(l):
        l.client.get("%s" % (random.choice(urls)))

дополнительная информация при настройке: https://docs.locust.io/en/stable/writing-a-locustfile.html#setups-teardowns-on-start-and-on-stop

person Muhammed Tanır    schedule 09.03.2020

Вы можете попробовать что-то вроде:

global USER_CREDENTIALS
USER_CREDENTIALS = list(readCSV)

после этого вы сможете ссылаться на каждую строку для каждого виртуального пользователя/итерации

Рекомендации:

person Dmitri T    schedule 09.03.2020