Рубрики
Без рубрики

Тестирование производительности с саранчой – 02 – несколько задач

Подготовка в первой части этой серии мы говорили о создании очень основных саранда … Помечено тестированием, производительностью, Python, OwnlCloud.

В Первая часть этой серии Мы говорили о создании очень базового теста на саранчу. Теперь мы хотим создать более реалистичные и интересные тесты. Для этого нам лучше иметь настоящее приложение для тестирования. Мы могли проверить любое приложение, которое имеет HTTP API. Для простоты и потому что я знаком с этим, я выбрал OwdleCloud Хостинг файлов и совместное решение, похожее на Dropbox.

Самый простой способ получить экземпляр Test OwnCloud UP и запущен – использовать Docker. Просто беги: Docker Run -P 8080: 8080 --Name Ownlock OwnCloud/Server Отказ Эта волшебная команда должна дать вам новую установку OwnCloud, доступную под http://localhost: 8080 . Существует одна предварительная настройка пользователя Админ С супер безопасным паролем админ . Вы можете войти в пользовательские пользователи и загружать файлы, создавать новые пользователи, делиться файлами и папками и т. Д. Хорошо, после того, как сыграл немного с самообслуживанием, давайте вернемся к тестам производительности, мы фактически хотим узнать о саранке.

Теперь вы должны быть в состоянии запустить тест на саранча с первой части через Саранча://localhost: 8080 С Но, как мы там сказали, это не очень реалистичный тест. Что будет делать пользователь с SoyCloud? Основное действие будет загружено и загружать файлы. Давайте тестируем производительность этого.

Для файловых операций OwnlCloud использует WebDav API. Начиная с LocustFile у нас уже есть, мы создаем тест для скачивания файлов.

from locust import HttpLocust, TaskSet, task, constant

class UserBehaviour(TaskSet):
    userName = "admin"

    @task
    def downloadFile(self):
        self.client.get(
            "/remote.php/dav/files/" + self.userName + "/ownCloud%20Manual.pdf",
            auth=(self.userName, self.userName)
        )

class User(HttpLocust):
    task_set = UserBehaviour
    wait_time = constant(1)

Здесь мы просто работаем Получить В существующий файл OwderCloud Manual.pdf с Админ Ownlock-user. Ницца, и не сильно отличается от первой попытки.

Помните: когда вы меняете LOSTURTFILE, вы должны остановиться и запускать саранчу, чтобы убедиться, что файл снова прочитан.

Каждая теста может иметь несколько задач, поэтому добавление задачи загрузки должно быть легко:

from locust import HttpLocust, TaskSet, task, constant

class UserBehaviour(TaskSet):
    userName = "admin"
    davEndpoint = "/remote.php/dav/files/" + userName

    @task
    def downloadFile(self):
        self.client.get(
            self.davEndpoint + "/ownCloud%20Manual.pdf",
            auth=(self.userName, self.userName)
        )

    @task
    def uploadFile(self):
        self.client.put(
            self.davEndpoint + "/locust-perfomance-test-file.txt",
            "my data",
            auth=(self.userName, self.userName)
        )

class User(HttpLocust):
    task_set = UserBehaviour
    wait_time = constant(1)

Здесь у нас есть вторая задача UploadFile это просто делает Поставить запрос с определенным файлом и некоторыми данными. (Быть больше сухой Я поместил Davendpoint В переменной)

Саранча теперь будет запускать каждую задачу столько же времен. Но если вы запустите это с достаточным количеством пользователей на сайте (например, попробуйте 100) вы увидите номера в # Не удается Увеличение колонны

Чтобы увидеть, что произойдет, давайте посмотрим на «вкладку сбоя» Там мы видим неудачу «тип» Httperror (ошибка клиента 423: заблокирована для URL: http://localhost: 8080/retter.php/dav/files/admin/forust-perfomance-test-file.txt ',)

Мы использовали один единственный OwnCloud-user Админ и 100 пользователей садвижимости. Во время операции записи OwnCloud блокирует файл, но каждую секунду wait_time (1) Пользователь саранчи пытается переоценить этот единственный файл. Так что будут столкновения, и это то, что говорит ошибка.

Как насчет не перезаписывать один и тот же файл снова и снова, но загрузка нового каждый раз?

from locust import HttpLocust, TaskSet, task, constant
import uuid

class UserBehaviour(TaskSet):
    userName = "admin"
    davEndpoint = "/remote.php/dav/files/" + userName
    fileName = ''

    @task
    def downloadFile(self):
        self.client.get(
            self.davEndpoint + "/ownCloud%20Manual.pdf",
            auth=(self.userName, self.userName)
        )

    @task
    def uploadFile(self):
        if self.fileName == '':
            self.fileName = "/locust-perfomance-test-file" + str(uuid.uuid4()) + ".txt"
        self.client.put(
            self.davEndpoint + self.fileName,
            "my data",
            auth=(self.userName, self.userName)
        )

class User(HttpLocust):
    task_set = UserBehaviour
    wait_time = constant(1)

Здесь мы просто устанавливаем имя файла в случайную строку, но только если она не была установлена ранее.

В саранчевом интерфейсе вы должны увидеть один Поставить Запрос на сайте пользователя и, надеюсь, нет неудач.

Теперь мы запускаем каждую задачу одинаково часто. Но пользователи загружают файлы так часто, как они их загружают? Может быть, но, возможно, нет – это зависит от вашей ситуации и на то, что вы хотите проверить. К счастью, саранча дает вашу свободу выбирать. например Если вы хотите имитировать ситуацию, что операция загрузки/чтения происходит в 3 раза чаще, что операция загрузки/записи просто добавляет аргумент веса для задачи

...

@task(3)
def downloadFile(self):
    self.client.get(
        self.davEndpoint + "/ownCloud%20Manual.pdf",
        auth=(self.userName, self.userName)
    )

@task(1)
def uploadFile(self):
    if self.fileName == '':
        self.fileName = "/locust-perfomance-test-file" + str(uuid.uuid4()) + ".txt"
    self.client.put(
        self.davEndpoint + self.fileName,
        "my data",
        auth=(self.userName, self.userName)
    )
...

Теперь большинство ваших запросов должны быть Получить s.

Помните: при тестировании мы стараемся быть как можно ближе к реальности. Если ваш тест значительно отличается от реальности, могут произойти плохие вещи.

Мы все еще используем только один пользователь Solecloud. Приложение может выполнять по-разному при использовании нескольких пользователей. Мы должны создавать конкретные тестовые пользователи, прежде чем мы запустим тест и идеально удаляем их в конце тестового прогона.

Оригинал: “https://dev.to/jankaritech/performance-testing-with-locust-02-multiple-tasks-4ckn”