Тестирование производительности с саранчой (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
класс
Теперь давайте посмотрим, что произойдет.
Запуск саранчи от CLI:
Начало теста с Webui с 2 пользователями
Остановка испытаний на Webui
нажатие
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”