Входной пример тестирования производительности Locus и распределенное стресс-тестирование
Входной пример тестирования производительности Locus и распределенное стресс-тестирование

Предисловие

Привет всем, я Йоко. Многие люди вокруг вас в последнее время подвергались воздействию солнца, не забудьте защитить себя.

Тестирование производительности Уже стал инженером-испытателем/Важная задача для инженеров-разработчиков тестовОсобая способность

В сценариях, когда трафик внезапно увеличивается за короткий период времени, например при захвате красных конвертов и срочных распродажах на мероприятиях, или в сценариях с большим количеством пользователей, таких как Health Bao, нам необходимо провести стресс-тестирование, чтобы убедиться, что сервис стабилен и доступен.

С развитием индустрии тестирования в последние годы,Бизнес-архитектура становится более сложной,Тестирование производительностив Африке Функциональное тестирование В сцене это тоже сталоНеобходимые меры обеспечения качества,Узнайте, как получить повышение по службе и как можно скорее

Если вы хотите хорошо выполнять свою работу, вам необходимо сначала отточить свои инструменты. Для проведения тестирования производительности у нас должны быть инструменты тестирования производительности, которые можно использовать, если вы работаете в небольшой или средней компании (только в компании). у меня есть тестировщик, и начальник также просит меня провести стресс-тестирование). Без помощи платформы для испытаний под давлением компании мы должны сами найти инструмент для тестирования производительности в качестве генератора напряжения, который поможет нам провести тестирование производительности.

Для серверной части Тестирование производительностиинструмент,Почти десять лет с 2012 по 2022 год.,Появляются новые инструменты,нравитьсяk6VegataGatlingWebLOADждать,Но основные из них по-прежнемудаJMeterLoadrunnerLocustЭти три сервера Тестирование Инструменты производительности у каждого есть свое место

В этой статье в основном представлены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среда

Язык кода:javascript
копировать
https://www.python.org/downloads/

Windowsкомпьютер:Можно скачатьWindows installer Программа установки, следуйте инструкциям для установки в один клик

MACкомпьютер:Можно скачатьmacOS 64-bit universal2 installerПрограмма установки, следуйте инструкциям для установки в один клик

Linuxсистема:Можно скачатьGzipper source tarball , то есть сжатый пакет в формате gzip, загрузите его на сервер Linux с помощью FTP, а затем установите, следуя двум следующим руководствам по установке.

Язык кода:javascript
копировать
https://www.linuxprobe.com/linux-centos7-python3.html
https://blog.csdn.net/L_15156024189/article/details/84831045

(2)Продолжить установкуLocust,Вы можете использовать инструмент установки pip Python.,Введите команду установки в терминале командной строки.,При использовании инструмента pip на компьютере MAC,Вам также необходимо использовать его перед командойsudoПолучить разрешение

Язык кода:javascript
копировать
# компьютер с Windows команда установки pip
pip install locust 
# компьютер Mac команда установки pip
sudo pip install locust 

# Обратите внимание, что команда установки для более старых версий ниже 1.0: pip install locustio

После завершения установки,Можно использоватьlocust --helpпроверитьда Ни одна установка не прошла успешно

Демо-тест производительности Locus

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

ниже Тестирование производительности Сценарий, который мы назвалиlocust_file.py,Вы можете назвать файл по своему усмотрению

Язык кода:javascript
копировать
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

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), не соответствует ожиданиям.,В этих двух случаях запрос считается невыполненным.,Вы также можете изменить логику оценки успеха и неудачи запроса, возвращая данные из фактического интерфейса.

Язык кода:javascript
копировать
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

WebsiteUserдобрыйунаследовано отHttpUserдобрый,Имитируемый пользователь определен,Он отправит набор адресов хоста (на официальном сайте Baidu установлен здесь).,Сделать HTTP-запрос,и выполнитьUserBehaviorпо определениюиз Задача。WebsiteUserдобрыйпо определению了 wait_time Свойства представляют собой минимальный и максимальный интервалы времени, которые симулируемый пользователь ожидает между выполнением задач.

команда запуска саранчи

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

Язык кода:javascript
копировать
locust -f locust_file.py

Хотите избежать написания адреса хоста в скрипте?,мы можемlocust_file.pyТестирование Скрипт производительности можно удалить WebsiteUserдобрыйизhostПоле,Таким образом, вы можете гибко указать адрес хоста для стресс-тестирования при запуске locus.

Язык кода:javascript
копировать
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Узел должен находиться вВ одной локальной сети,умеют общаться друг с другом

команда запуска главного узла

Язык кода:javascript
копировать
locust -f locust_file.py --master --master-bind-port=8089 (Порт можно изменить самостоятельно)

Команда запуска рабочего узла

Язык кода:javascript
копировать
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 и рабочие узлы.

Язык кода:javascript
копировать
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встречаАвтоматическая установкаэтот Библиотека

приложение

  1. Официальная документация по саранче (настоятельно рекомендуется): https://docs.locust.io/en/stable/index.html
  2. Другое использование команд саранчи,Можеткlocust --helpПроверять(Настоятельно рекомендуется)
  3. Справочник сценариев для многократного использования словаря: https://debugtalk.com/post/head-first-locust-advanced-script
  4. Об официальной документации сопрограмм Python: https://docs.python.org/zh-cn/3.7/library/asyncio-task.html.
  5. Тестирование Обзор использования инструмента производительности: https://www.cnblogs.com/fnng/archive/2012/08/17/2644878.html

Заключение

Эта статья познакомит вас с использованием Locust для написания Python Тестирование скрипт производительности и как использовать распределенное стресс-тестирование, я должен сказать, используя Locust для проведения Тестирования производительности действительно удобно, инструмент тестирования конечно только да Тестирование Небольшую часть производительности вы можете получить Тестирование из таблицы ниже производительности Каждый процесс

стадия процесса

упражняться

Анализ сценариев

Выявление узких мест, создание моделей данных и определение размеров тестирования.

план испытаний

Выполнение тестовсхема иплан испытания, руководство по выполнению тестов

экологическое планирование

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

данные & Подготовка инструмента

Использование инструмента тестирования,Сценарий тестовых данных (если доступен),скрипт статистики (если есть)

Получение индикатора & статистика

Выполнение тестов & Получайте контролируемые показатели эффективности

Анализ отчета

Создать отчет,обратная связьданные,анализироватьданные,Облегчение последующей настройки производительности

Если вы считаете, что эта статья полезна для вас, не забудьте нажать [Мне нравится]. В будущем вас ждут новые статьи по тестированию производительности.

Привет,Я да Йоко,Нетипичный человек науки и техники,Окончил Китайский университет связи.,Сейчас старший инженер по тестированию и разработке в Дачане.

Два года дрифта в Пекине,Переход от Функционального тестирования к разработке тестов посредством самообучения,Нажмите на синие слова, чтобы просмотреть мой маршрут обучения

в то же время,Я такжеда B стоять up Основная: Поиск ошибок, ежедневный обмен практическими знаниями в области тестирования ПО, выходные интервью и опыт работы, добро пожаловать к просмотру

boy illustration
Неразрушающее увеличение изображений одним щелчком мыши, чтобы сделать их более четкими артефактами искусственного интеллекта, включая руководства по установке и использованию.
boy illustration
Копикодер: этот инструмент отлично работает с Cursor, Bolt и V0! Предоставьте более качественные подсказки для разработки интерфейса (создание навигационного веб-сайта с использованием искусственного интеллекта).
boy illustration
Новый бесплатный RooCline превосходит Cline v3.1? ! Быстрее, умнее и лучше вилка Cline! (Независимое программирование AI, порог 0)
boy illustration
Разработав более 10 проектов с помощью Cursor, я собрал 10 примеров и 60 подсказок.
boy illustration
Я потратил 72 часа на изучение курсорных агентов, и вот неоспоримые факты, которыми я должен поделиться!
boy illustration
Идеальная интеграция Cursor и DeepSeek API
boy illustration
DeepSeek V3 снижает затраты на обучение больших моделей
boy illustration
Артефакт, увеличивающий количество очков: на основе улучшения характеристик препятствия малым целям Yolov8 (SEAM, MultiSEAM).
boy illustration
DeepSeek V3 раскручивался уже три дня. Сегодня я попробовал самопровозглашенную модель «ChatGPT».
boy illustration
Open Devin — инженер-программист искусственного интеллекта с открытым исходным кодом, который меньше программирует и больше создает.
boy illustration
Эксклюзивное оригинальное улучшение YOLOv8: собственная разработка SPPF | SPPF сочетается с воспринимаемой большой сверткой ядра UniRepLK, а свертка с большим ядром + без расширения улучшает восприимчивое поле
boy illustration
Популярное и подробное объяснение DeepSeek-V3: от его появления до преимуществ и сравнения с GPT-4o.
boy illustration
9 основных словесных инструкций по доработке академических работ с помощью ChatGPT, эффективных и практичных, которые стоит собрать
boy illustration
Вызовите deepseek в vscode для реализации программирования с помощью искусственного интеллекта.
boy illustration
Познакомьтесь с принципами сверточных нейронных сетей (CNN) в одной статье (суперподробно)
boy illustration
50,3 тыс. звезд! Immich: автономное решение для резервного копирования фотографий и видео, которое экономит деньги и избавляет от беспокойства.
boy illustration
Cloud Native|Практика: установка Dashbaord для K8s, графика неплохая
boy illustration
Краткий обзор статьи — использование синтетических данных при обучении больших моделей и оптимизации производительности
boy illustration
MiniPerplx: новая поисковая система искусственного интеллекта с открытым исходным кодом, спонсируемая xAI и Vercel.
boy illustration
Конструкция сервиса Synology Drive сочетает проникновение в интрасеть и синхронизацию папок заметок Obsidian в облаке.
boy illustration
Центр конфигурации————Накос
boy illustration
Начинаем с нуля при разработке в облаке Copilot: начать разработку с минимальным использованием кода стало проще
boy illustration
[Серия Docker] Docker создает мультиплатформенные образы: практика архитектуры Arm64
boy illustration
Обновление новых возможностей coze | Я использовал coze для создания апплета помощника по исправлению домашних заданий по математике
boy illustration
Советы по развертыванию Nginx: практическое создание статических веб-сайтов на облачных серверах
boy illustration
Feiniu fnos использует Docker для развертывания личного блокнота Notepad
boy illustration
Сверточная нейронная сеть VGG реализует классификацию изображений Cifar10 — практический опыт Pytorch
boy illustration
Начало работы с EdgeonePages — новым недорогим решением для хостинга веб-сайтов
boy illustration
[Зона легкого облачного игрового сервера] Управление игровыми архивами
boy illustration
Развертывание SpringCloud-проекта на базе Docker и Docker-Compose