Привет всем, я Йоко. Многие люди вокруг вас в последнее время подвергались воздействию солнца, не забудьте защитить себя.
Тестирование производительности Уже стал инженером-испытателем/Важная задача для инженеров-разработчиков тестовОсобая способность
В сценариях, когда трафик внезапно увеличивается за короткий период времени, например при захвате красных конвертов и срочных распродажах на мероприятиях, или в сценариях с большим количеством пользователей, таких как Health Bao, нам необходимо провести стресс-тестирование, чтобы убедиться, что сервис стабилен и доступен.
С развитием индустрии тестирования в последние годы,Бизнес-архитектура становится более сложной,Тестирование производительностив Африке Функциональное тестирование В сцене это тоже сталоНеобходимые меры обеспечения качества,Узнайте, как получить повышение по службе и как можно скорее
Если вы хотите хорошо выполнять свою работу, вам необходимо сначала отточить свои инструменты. Для проведения тестирования производительности у нас должны быть инструменты тестирования производительности, которые можно использовать, если вы работаете в небольшой или средней компании (только в компании). у меня есть тестировщик, и начальник также просит меня провести стресс-тестирование). Без помощи платформы для испытаний под давлением компании мы должны сами найти инструмент для тестирования производительности в качестве генератора напряжения, который поможет нам провести тестирование производительности.
Для серверной части Тестирование производительностиинструмент,Почти десять лет с 2012 по 2022 год.,Появляются новые инструменты,нравитьсяk6
、Vegata
、Gatling
、WebLOAD
ждать,Но основные из них по-прежнемудаJMeter
、Loadrunner
、Locust
Эти три сервера Тестирование Инструменты производительности у каждого есть свое место
В этой статье в основном представленыLocust
Как использовать,Locust
дана основеPython
открытого исходного кода Тестирование производительностиинструмент,Для веб-приложения стресс-тест. Позволяет настраивать модели поведения пользователей (задачи стресс-тестирования).,и используйте виртуальных пользователей для имитации доступа реальных пользователей к вашему приложению.,Locust использует библиотеку gevent для поддержки сопрограмм и гринлеты для имитации пользователей.,В той же конфигурации,LocustКоличество одновременно поддерживаемых пользователей сравнивается сМногопоточный симулированный пользовательизJmeterБолее
Как использовать Locust очень просто,Умение писать скрипты Тестирование производительности на Python.,сделай это быстро Тестирование производительности,В то же время такжеПоддержка распределенных испытаний под давлением,Используйте несколько компьютеров для моделирования сценариев стресс-тестирования в условиях сверхвысокого параллелизма.
LocustПриложения также доступныОтчеты о производительности в режиме реального времени,Поможет вам понять, как улучшить пропускную способность вашего приложения и время отклика.
Locust претерпел множество итераций,старая версия1.0
Предыдущие и последние версии2.13.2
Немного другие методы установки и использования.,подиз Статья делаетиспользоватьизLocust Версия9 декабря 2022 г.
выпускатьиз2.13.2
,Инструмент тестирования также рекомендует всем использовать последнюю версию.,Исправьте известные проблемы,Более стабильная производительность
Как упоминалось ранее, Locust основан на Python, поэтому при запуске Locust вам, естественно, необходимо сначала полагаться на среду Python. Установите среду Python.
(1) Откройте официальный сайт Python.,Загрузите и установитеPython 3.x
среда
https://www.python.org/downloads/
Windowsкомпьютер:Можно скачатьWindows installer
Программа установки, следуйте инструкциям для установки в один клик
MACкомпьютер:Можно скачатьmacOS 64-bit universal2 installer
Программа установки, следуйте инструкциям для установки в один клик
Linuxсистема:Можно скачатьGzipper source tarball
, то есть сжатый пакет в формате gzip, загрузите его на сервер Linux с помощью FTP, а затем установите, следуя двум следующим руководствам по установке.
https://www.linuxprobe.com/linux-centos7-python3.html
https://blog.csdn.net/L_15156024189/article/details/84831045
(2)Продолжить установкуLocust
,Вы можете использовать инструмент установки pip Python.,Введите команду установки в терминале командной строки.,При использовании инструмента pip на компьютере MAC,Вам также необходимо использовать его перед командойsudo
Получить разрешение
# компьютер с Windows команда установки pip
pip install locust
# компьютер Mac команда установки pip
sudo pip install locust
# Обратите внимание, что команда установки для более старых версий ниже 1.0: pip install locustio
После завершения установки,Можно использоватьlocust --help
проверитьда Ни одна установка не прошла успешно
Затем используйте Locust, чтобы написать простой сценарий тестирования производительности Python, чтобы быстро ознакомиться с тем, как использовать Locust.
ниже Тестирование производительности Сценарий, который мы назвалиlocust_file.py
,Вы можете назвать файл по своему усмотрению
from locust import HttpUser, TaskSet, task, between
class UserBehavior(TaskSet):
def on_start(self):
"""
Called when a User starts executing this TaskSet
"""
pass
def on_stop(self):
"""
Called when a User stops executing this TaskSet. E.g. when TaskSet.interrupt() is called
or when the User is killed
"""
pass
@task(1)
def baidu_homepage(self):
self.client.get("/")
@task(2)
def baidu_search(self):
with self.client.get("/s?wd=chatgpt", catch_response=True) as response:
if response.status_code != 200:
response.success()
else:
response.failure("Запрос не выполнен")
if response.json()["param1"] != "xx":
response.failure("Запрос не выполнен, Нет data")
# Поддержка проверки утверждений assert response.json()['param1'] == 100,"данныевозвращенная ошибка"
# Пример публикации запроса res = self.client.post("/login", json={"username": "foo", "password": "bar"})
class WebsiteUser(HttpUser):
tasks = [UserBehavior]
host = "https://www.baidu.com"
# Ожидание ответа в течение 3–7 с, стратегия обработки тайм-аута
wait_time = between(3, 7)
Интерпретируйте содержание этого сценария,Всего есть две категории,соответственнодаUserBehavior
класс иTaskSet
добрый
UserBehavior
добрыйунаследовано отTaskSet
добрый,Цель этого класса — определить задачи, связанные со стресс-тестированием (проще говоря, это интерфейс, который мы хотим подвергнуть стресс-тестированию).,И операции до и после процесса испытания под давлением
UserBehavior
добрыйопределяет набор задач,В этом примере есть две задачи,одиндадоступкореньпуть/
,кроме тогоодиндадоступ/s
путь。использовать@task(1)
украшатьиз Метододин Задача,1
выражатьодинLocustЭкземпляры выбраны для исполненияизмасса,Чем больше значение, тем выше частота выполнения.。В этом примере задачаbaidu_homepage
измасса Чуть меньше задачиbaidu_search
UserBehavior
добрыйизотецдобрыйTaskSet
добрый Одним из атрибутов являетсяself.client
да HttpSession
Экземпляр можно использовать для отправки в целевую систему, в которую мы хотим загрузить тест. HTTP-запрос,Поддерживает отправку HTTP-запросов, таких как GET и POST.,Точно так же, как использование библиотеки запросов в Python.,потому чтоUserBehavior
добрыйдаTaskSet
добрыйизребенокдобрый,Месток Можеткнапрямую использоватьиспользоватьотецдобрыйизсвойствоself.client
Лучше всего логически проверить статус результата ответа и результаты, возвращаемые интерфейсом.,Если код статуса ответа не да200,Поле в строке JSON, возвращаемое интерфейсом (при условии, что интерфейс возвращает ответ в формате JSON), не соответствует ожиданиям.,В этих двух случаях запрос считается невыполненным.,Вы также можете изменить логику оценки успеха и неудачи запроса, возвращая данные из фактического интерфейса.
with self.client.get("/s?wd=chatgpt", catch_response=True) as response:
if response.status_code != 200:
response.failure("Запрос не выполнен")
if response.json()["param1"] != "xx":
response.failure("Запрос не выполнен, Нет data")
Цель проверки возвращаемых результатов — избежать аномальных возвращаемых значений интерфейса из-за ошибок передачи параметров во время стресс-тестирования и своевременно определить статус запроса интерфейса. производительности Проблема с параметрами определения интерфейса в скрипте.,После завершения сжатия я обнаружил, что интерфейс продолжает сообщать об ошибках.,Невозможно достичь реального эффекта измерения давления
on_start
方法Можетк Прежде чем определиться с испытанием под давлениемиз Предварительные шаги,Например, вход в систему для получения файлов cookie,on_stop
方法则Может定义压测完成изпостобработка,Если вы удалите данные испытания под давлением
WebsiteUser
добрыйунаследовано отHttpUser
добрый,Имитируемый пользователь определен,Он отправит набор адресов хоста (на официальном сайте Baidu установлен здесь).,Сделать HTTP-запрос,и выполнитьUserBehavior
по определениюиз Задача。WebsiteUser
добрыйпо определению了 wait_time Свойства представляют собой минимальный и максимальный интервалы времени, которые симулируемый пользователь ожидает между выполнением задач.
Чтобы запустить этот экземпляр саранчи, вы можете использовать следующую команду в командной строке:
locust -f locust_file.py
Хотите избежать написания адреса хоста в скрипте?,мы можемlocust_file.py
Тестирование Скрипт производительности можно удалить WebsiteUser
добрыйизhost
Поле,Таким образом, вы можете гибко указать адрес хоста для стресс-тестирования при запуске locus.
locust -f locust_file.py --host=http://example.com
Эта команда запустит веб-службу Locus локально.,然后你就Можеткв браузередоступhttp://0.0.0.0:8089
,Используйте веб-интерфейс Locust для управления количеством симулируемых пользователей и выполнения задач.
Затем выполните настройку перед тестом производительности. Установите количество одновременных пользователей (количество пользователей) и количество генерируемых (запущенных) пользователей в секунду (скорость создания). Адрес хоста, который будет подвергаться стресс-тестированию, также можно изменить. После завершения настроек нажмите «Начать роение», чтобы запустить стресс-тест.
В процессе стресс-тестирования вы можете отслеживать состояние стресс-теста в режиме реального времени, общее количество запросов, общее количество сбоев, время ответа на запросы 99% и 90%, среднее время ответа и другие показатели.
Внимательные студенты могут найти элемент «Запросы» немного интересным.,В ходе стресс-теста мы поставили две задачи,одиндадоступкореньпуть/
,Другойодиндадоступ/s
,Почему запросы данных да1:2, а не да1:1 при одновременном тестировании обоих?,этотдапотому что Мы устанавливаемизtaskмасса,амассада1,Еще одна массада2,Запросы задач с массой 2 будут чаще,Это отношения да1:2.
Он также поддерживает просмотр кривых диаграмм. Существует примечательный показатель производительности RPS (количество запросов в секунду эквивалентно QPS (запросов в секунду), который обозначает количество запросов, которые могут быть обработаны в секунду.
Друзья, которые проводили тестирование производительности, также могут подумать об индикаторе под названием TPS (транзакции). Per Second),Количество транзакций, обрабатываемых в секунду. Транзакция да относится к процессу, в котором клиент отправляет запрос серверу, а сервер отвечает. Клиент начинает отсчет времени, когда отправляет запрос,Окончание времени после получения ответа сервера,Используйте это для расчета затраченного времени и количества завершенных транзакций.,Окончательная оценка с использованием этой информации равна
Разница между TPS и QPS
(1) Если в течение одной секунды,Пользователь запросил домашнюю страницу Baidu и увидел всю домашнюю страницу.,На этом транзакция завершается (TPS=1).,Но на самом деле к серверу было инициировано N множественных HTTP-запросов.,Или на определенный интерфейс отправлен только один HTTP-запрос.,Однако другие интерфейсы запрашиваются ниже по потоку от этого интерфейса (QPS=N).,этот Обе ситуации относятся кТранзакция содержит несколько HTTP-запросов, и TPS не равен QPS.(2)Если в течение одной секунды,Запрашиваем интерфейс запроса,И этот интерфейс не будет запрашивать другие интерфейсы внутри себя.,Прямо сейчасТранзакция имеет только 1 HTTP-запрос, а TPS в это время равен QPS.
После завершения стресс-теста вы можете нажать «Загрузить данные», чтобы загрузить отчет о стресс-тесте.
Locust По умолчаниюдакоднопроцессный режимбегать,В этом режиме,Все виртуальные одновременные пользователи работают в одном процессе Python., Из-за единого процесса возможности всех процессоров печатной машины не могут быть использованы в полной мере.
LocustТакже поддерживаетРежим многопроцессного распределенного стресс-тестирования,Можетксуществоватьтот же компьютерилинесколько компьютеровПроведено распределенное стресс-тестирование
Будь то распределенное стресс-тестирование с несколькими процессами на одной машине или распределенное стресс-тестирование с несколькими компьютерами.,бегать Все способыда Первыйбегатьодинmaster
Узел отвечает за распространение истатистика,перезапускwork
Узлы отвечают за одновременное выполнение,Если да использует несколько машин для испытаний под давлением,нужно сначалаВсе машиныустановлен наlocust,И развернуть точно такой же скрипт Тестирование производительности,Уведомлениеworkсумма узловmasterУзел должен находиться вВ одной локальной сети,умеют общаться друг с другом
команда запуска главного узла
locust -f locust_file.py --master --master-bind-port=8089 (Порт можно изменить самостоятельно)
Команда запуска рабочего узла
locust -f locust_file.py --worker --master-host=<locust_master_machine_ip> --master-port=8089 (Порт остается совместимым с главной машиной)
<locust_master_machine_ip>заполнятьиздамашинаизсетевая картаIP,Я тут запустил два рабочих узла одновременно,Открыть веб-страницу,Вы можете видеть, что количество рабочих изменилось на 2. Проведение распределенного стресс-тестирования на одной машине,Webдоступ Страницаhttp://localhost:8089/
Нажмите «Новый тест», чтобы начать распределенный стресс-тест.
Некоторые друзья могут сказать, что если количество рабочих узлов очень велико, неэффективно вручную развертывать и отправлять сценарии производительности на сервер. Есть ли способ развернуть его автоматически?
В случае распределенного стресс-тестирования на одной машине мы можем написать сценарий оболочки запуска одним щелчком мыши и одновременно запустить мастер Locus и рабочие узлы.
echo "start master..."
nohup locust -f locust_file.py --master --master-bind-port=8089 > main.log 2>&1 &
workerNum=2
echo "start worker, size=${workerNum}..."
for i in $( seq 1 ${workerNum})
do
nohup locust -f locust_file.py --worker --master-host=<locust_master_machine_ip> --master-port=8089 worker${i}.log 2>&1 &
echo "output worker${i}.log"
done
echo "end..."
Если вы хотите запустить сценарий стресс-теста на нескольких машинах одновременно или отправить измененный скрипт стресс-теста одним щелчком мыши,Вам необходимо автоматически войти на хост удаленного входа.,Linuxscp
Командный push-файл,Можно использоватькроме скрипта в оболочкевыполнить,Конкретная логика кода здесь не будет раскрываться.
При поиске информации я обнаружил, что в Интернете был большой парень, который писал скрипты на Python и реализовал автоматическое развертывание скриптов тестирования производительности на нескольких машинах. Вы можете обратиться к https://blog.csdn.net/weixin_39394499/article. /подробности/74231675
Последнее небольшое дополнение,locustПреимущества коммуникации при распределенном стресс-тестированиииспользоватьприезжатьZMQ (ZeroMQ)
Библиотека сетевых коммуникаций,ZMQ предоставляет сокеты для доставки атомарных сообщений в различных видах транспорта, таких как внутрипроцессный, межпроцессный, TCP и многоадресная рассылка.,Поддерживает несколько передач(TCP、В процессе、межпроцессный、многоадресная рассылка、Общие шаблоны обмена сообщениями через WebSocket и т. д.)
Поэтому необходимо использоватьиспользовать Зависимости распределенного стресс-тестированияpyzmq
Библиотека,существовать我们使использоватьpip install locust
УстановленоlocustвстречаАвтоматическая установкаэтот Библиотека
locust --help
Проверять(Настоятельно рекомендуется)Эта статья познакомит вас с использованием Locust для написания Python Тестирование скрипт производительности и как использовать распределенное стресс-тестирование, я должен сказать, используя Locust для проведения Тестирования производительности действительно удобно, инструмент тестирования конечно только да Тестирование Небольшую часть производительности вы можете получить Тестирование из таблицы ниже производительности Каждый процесс
стадия процесса | упражняться |
---|---|
Анализ сценариев | Выявление узких мест, создание моделей данных и определение размеров тестирования. |
план испытаний | Выполнение тестовсхема иплан испытания, руководство по выполнению тестов |
экологическое планирование | планирование Тестирование Среда производительности (производственная среда или автономная среда), чтобы избежать узких мест в окружающей среде. |
данные & Подготовка инструмента | Использование инструмента тестирования,Сценарий тестовых данных (если доступен),скрипт статистики (если есть) |
Получение индикатора & статистика | Выполнение тестов & Получайте контролируемые показатели эффективности |
Анализ отчета | Создать отчет,обратная связьданные,анализироватьданные,Облегчение последующей настройки производительности |
Если вы считаете, что эта статья полезна для вас, не забудьте нажать [Мне нравится]. В будущем вас ждут новые статьи по тестированию производительности.
Привет,Я да Йоко,Нетипичный человек науки и техники,Окончил Китайский университет связи.,Сейчас старший инженер по тестированию и разработке в Дачане.
Два года дрифта в Пекине,Переход от Функционального тестирования к разработке тестов посредством самообучения,Нажмите на синие слова, чтобы просмотреть мой маршрут обучения
в то же время,Я такжеда B стоять up Основная: Поиск ошибок, ежедневный обмен практическими знаниями в области тестирования ПО, выходные интервью и опыт работы, добро пожаловать к просмотру