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

Тестирование производительности с саранчой – 03 – Настройка вашей системы

В последней части этой серии мы создали несколько задач, чтобы иметь возможность имитировать более реально U … Теги с QA, производительностью, Python, Testautomation.

Тестирование производительности с саранчой (4 частью серии)

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

Теперь мы хотим пойти на следующий шаг и использовать несколько пользователей Solecloud.

Я буду использовать термин «OwnCloud User» для пользователей, которые находятся в системе SOTYCLOUD, имеют имя пользователя и пароль и могут использоваться для вохода в систему. Когда я использую термин «пользователь саранчи», я говорю о смоделированных пользователях, которые забивают сервер с запросами. Пока что мы использовали только один пользователь Soled Clud «admin» и несколько пользователей саранда. Все пользователи саранда использовали, что один пользователь Solecloud для доступа к серверу OwnCloud.

В этой части серии мы хотим иметь один пользователь OwlCloud для каждого пользователя саранда, поэтому каждый Задача Будут подключаться с собственным пользователем OwdleCloud на ServiceDoud Server.

Настройка и разрыв

Эта ситуация довольно распространена в любом виде автоматизированного тестирования, прежде чем запускать тесты, часто вы должны установить систему вверх и довести его в «тестируемое» состояние, или просто в состояние, которое вы хотите проверить. В основном все тестовые рамки будут иметь какой-то Настройка и Обзор Методы или крючки. То же относится и к саранчу, у вас даже может быть отдельный Настройка и Обзор Метод в вашем классе саранча и класс вашей задачи.

Рассмотрим этот простой скрипт саранча

from locust import HttpLocust, TaskSet, task, constant

class UserBehaviour(TaskSet):
    def setup(self):
        print ("setup of TaskSet")

    def teardown(self):
        print ("teardown of TaskSet")

    @task(2)
    def one_task(self):
        print ("running one task")

    @task(1)
    def an_other_task(self):
        print ("running another task")

class User(HttpLocust):
    def setup(self):
        print ("setup of Locust class")

    def teardown(self):
        print ("teardown of Locust class")

    task_set = UserBehaviour
    wait_time = constant(1)

У нас есть две задачи и Настройка и а Обзор , один в Пользователь класс и один в ПользовательскийAvior класс

Теперь давайте посмотрим, что произойдет.

  1. Запуск саранчи от CLI:

  2. Начало теста с Webui с 2 пользователями

  3. Остановка испытаний на Webui

  4. нажатие Ctrl + C на CLI

Вы ожидали этого? Обзор Только работает после того, как саранча полностью остановлено, а не когда тест остановлен. Имеет смысл, но не помогает нам с нашей проблемой, мы хотим создавать пользователей перед запуском фактического теста и удалить их позже. Мы могли бы запустить и остановить тест, не останавливая саранчу, и мы можем увеличить пользователей саранда во время теста, и в этом случае мы хотим создавать больше пользователей Solectleoud на лету.

К счастью, у нас есть также on_start и on_stop методы

Создайте пользователей с помощью on_start

on_start называется, когда пользователь саранчи начинает запускать задачу

Начиная с последнего скрипта, давайте добавим on_start Способ создания пользователей

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

userNo = 0

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

    def on_start(self):
        #create user
        global userNo
        self.userName = "locust" + str(userNo)
        userNo = userNo + 1
        self.client.post(
            "/ocs/v2.php/cloud/users",
            {"userid": self.userName, "password": self.userName},
            auth=(self.adminUserName, self.adminUserName)
        )

    @task(3)
    def downloadFile(self):
        self.client.get(
            self.davEndpoint  + self.userName + "/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.userName + self.fileName,
            "my data",
            auth=(self.userName, self.userName)
        )

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

Так что здесь новое?

on_start Сначала метод создает имя пользователя OvalCloud из «саранчи» и номера. Утерно Переменная должна быть определена глобально, так что она выживает, когда саранча инициализирует следующий экземпляр Пользователь класс. Помните: Саранча Класс ( httplocust Наследование от Самодан ) представляет один моделированный пользователь, который обращается к вашему приложению.

Далее Пост Запрос отправляется с именем пользователя в качестве userId и пароль. Это запросы должны быть аутентифицированы в качестве администратора-пользователя. ( Проверьте OwnCloud Docu, если вы заинтересованы, чтобы узнать больше о этих запросах. )

Наконец есть Davendpoint , теперь ему нужна конкретное имя пользователя, так что информация была перемещена в конкретные Получить и Поставить метод.

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

Первая строка говорит нам, что 3 Пост Запросы были отправлены на /ocs/v2.php/cloud/users это выглядит многообещающим. И в Поставить АНС Получить Запросы, имена пользователей «Bordust0» до «Locust2» упоминаются, очень хорошо!

Теперь давайте посмотрим в список пользователей OwnCloud. Для этого вход с «admin»/”admin” на http://localhost: 8080/ И в правом верхнем углу нажмите «admin», а затем на «пользователях».

Эти три пользователей были созданы и использованы. Если вы хотите дважды проверить, используйте их, чтобы войти в SoyCloud, вы должны увидеть загруженный файл.

Удалить пользователей с on_stop

Единственное, что осталось – убирать после нас. Очевидно, мы можем просто убить контейнер Docker, удалите его и начнем его свежим без пользователей, но не было бы неплохо удалить пользователей после остановки теста?

Давайте использовать on_stop помыть! Он работает, когда задача остановится.

Просто добавьте простой маленький метод для Пользовательбехавюр класс:

def on_stop(self):
    self.client.delete(
        "/ocs/v2.php/cloud/users/" + self.userName,
        auth=(self.adminUserName, self.adminUserName)
    )

Не забудьте удалить пользователей из SoyCloud, прежде чем повторить скрипт (или просто сделать Docker Kill OwnCloud; Docker RM OwnCloud и начните его снова)

Теперь, когда вы начинаете тест и остановите его снова, вы увидите Удалить Запросы в списке, один заштрихованный пользователь саранча. Но что это? Удалить Запросы терпят неудачу с Httperror (ошибка клиента 401: неавторизован для URL: http://localhost: 8080/ocs/v2.php/cloud/users/locust0 ',)

Копая глубже (например, wireshark) показывает, что запросы не только имели правильный заголовок авторизации, но и некоторые файлы cookie.

DELETE /ocs/v2.php/cloud/users/locust0 HTTP/1.1
Host: localhost:8080
User-Agent: python-requests/2.22.0
Accept-Encoding: gzip, deflate
Accept: */*
Connection: keep-alive
Cookie: cookie_test=test; oc1j5vb7hdm0=q2mv4lb5f2b37ti3etn8s1e0f1; oc_sessionPassphrase=y2u2sfTFfk8xx4cyIQZbycNvit4q0ZcKr4nHiiA7vSrGN%2BOZI30Ruvf3B5NyZrAxwtDNGz1wI7F6Yb2gjGsn%2FCnZ8Xpw3U8qRur1NrNcpJv%2Bm9egvmUiflwp3j7Rd3IG
Content-Length: 0
Authorization: Basic YWRtaW46YWRtaW4=

Саранча получила эти печенья от первого Получить запрос Мы отправили в качестве конкретного пользователя OwdleCloud, и он сохранил их для всех будущих запросов. Вообще это хорошо, но SoyCloud теперь игнорирует заголовок авторизации и использует куки для аутентификации. Таким образом, мы эффективно аутентифицируемся как конкретный пользователь OwnCloud E.g. locust0 И у этого пользователя нет привилегии, чтобы удалить себя.

Я не мог найти способ очистить сеанс, поэтому нам нужен новый. За это изменение on_stop Функция:

def on_stop(self):
    from locust.clients import HttpSession
    self.admin_client = HttpSession(base_url=self.client.base_url)
    self.admin_client.delete(
        "/ocs/v2.php/cloud/users/" + self.userName,
        auth=(self.adminUserName, self.adminUserName)
    )

Здесь мы импортируем саранчу Httpsession Класс и используйте его, чтобы создать новую сессию, без файлов cookie.

И вот мы идем, когда начинаем и остановив тесты, у нас успешно Удалить Запросы. Один на заштрихованный пользователь саранча.

что дальше?

Теперь у нас есть некоторые основные тесты, теперь пришло время смотреть ближе к метрикам и попытаться понять значение всех номеров саранча, бросающих на нас.

Тестирование производительности с саранчой (4 частью серии)

Оригинал: “https://dev.to/jankaritech/performance-testing-with-locust-03-setup-your-system-3ai7”