Прежде чем проект будет официально запущен, нам обычно необходимо использовать стресс-тестирование, чтобы оценить объем запросов, которые может поддерживать текущая система, и устранить возможные скрытые ошибки. В то же время понимание реальных возможностей обработки программы может помочь нам лучше соответствовать требованиям. фактические потребности проекта и экономия затрат на ресурсы.
Прежде чем проект будет официально запущен, нам обычно необходимо использовать стресс-тестирование, чтобы оценить объем запросов, которые может поддерживать текущая система, и устранить возможные скрытые ошибки. В то же время понимание реальных возможностей обработки программы может помочь нам лучше соответствовать требованиям. фактические потребности проекта и экономия затрат на ресурсы.
Полное название ab — Apache Bench, собственный инструмент тестирования производительности Apache. Используя этот инструмент, вам нужно всего лишь указать количество одновременных подключений, количество запросов и URL-адрес для проверки производительности веб-сайта или веб-программы.
Отправляя запрос через ab для имитации одновременного доступа нескольких посетителей к определенному URL-адресу, вы можете получить статистические данные, такие как количество передаваемых байтов в секунду, количество обрабатываемых запросов в секунду и время обработки каждого запроса. .
Формат команды:
ab [options] [http://]hostname[:port]/path
Обычно используемые параметры следующие:
-n requests Всего запросов
-c concurrency Количество запросов, генерируемых одновременно, можно понимать как количество параллелизма.
-t timelimit Максимальное количество секунд, которое занимает тест, Может использоваться как таймаут запроса.
-p postfile Файл, содержащий данные для отправки POST.
-T content-type Информация заголовка типа контента, используемая данными POST.
Пожалуйста, посмотрите больше параметровОфициальная документация。
Например, протестируйте интерфейс запроса GET:
ab -n 10000 -c 100 -t 10 "http://127.0.0.1:8080/api/v1/posts?size=10"
Проверьте интерфейс запроса POST:
ab -n 10000 -c 100 -t 10 -p post.json -T "application/json" "http://127.0.0.1:8080/api/v1/post"
wrkЭто открытый исходный кодHTTPпроизводительностьтестинструмент,Это то же самое, что упоминалось вышеab
принадлежат к одному и тому жеHTTPпроизводительностьтестинструмент,это лучше, чемab
Более мощный,Более сложные сценарии тестирования можно поддерживать путем написания сценариев Lua.
Установка под Mac:
brew install wrk
Общие параметры команды:
-c --conections: количество поддерживаемых соединений.
-d --duration: продолжительность стресс-теста (сек)
-t --threads: общее количество используемых потоков
-s --script: загрузить lua-скрипт
-H --header: добавить некоторые параметры в заголовок запроса
--latency Печать подробной статистики задержки
--timeout Максимальный таймаут для запросов (с)
Пример использования:
wrk -t8 -c100 -d30s --latency http://127.0.0.1:8080/api/v1/posts?size=10
Результат вывода:
Running 30s test @ http://127.0.0.1:8080/api/v1/posts?size=10
8 threads and 100 connections
Thread Stats Avg Stdev Max +/- Stdev
Latency 14.55ms 2.02ms 31.59ms 76.70%
Req/Sec 828.16 85.69 0.97k 60.46%
Latency Distribution
50% 14.44ms
75% 15.76ms
90% 16.63ms
99% 21.07ms
198091 requests in 30.05s, 29.66MB read
Requests/sec: 6592.29
Transfer/sec: 0.99MB
go-wrkдаGoязыковая версияwrk
,Студенты Windows могут использовать его для тестирования,Используйте следующую команду для установкиgo-wrk
:
go get github.com/adeven/go-wrk
Способ использования такой же, как иwrk
похожий,Основной формат следующий:
go-wrk [flags] url
Часто используемые параметры:
-H="User-Agent: go-wrk 0.1 bechmark\nContent-Type: text/html;": Заголовки запросов, разделенные '\n'
-c=100: Максимальное количество используемых соединений
-k=true: Отключить ли проверку активности
-i=false: if TLS security checks are disabled
-m="GET": Метод HTTP-запроса
-n=1000: Всего запросов
-t=1: Количество используемых потоков
-b="" Тело HTTP-запроса
-s="" Если указано, будет подсчитано, как часто ответ содержит искомую строку s.
Выполните тест:
go-wrk -t=8 -c=100 -n=10000 "http://127.0.0.1:8080/api/v1/posts?size=10"
Результат вывода:
==========================BENCHMARK==========================
URL: http://127.0.0.1:8080/api/v1/posts?size=10
Used Connections: 100
Used Threads: 8
Total number of calls: 10000
===========================TIMINGS===========================
Total time passed: 2.74s
Avg time per request: 27.11ms
Requests per second: 3644.53
Median time per request: 26.88ms
99th percentile time: 39.16ms
Slowest time for request: 45.00ms
=============================DATA=============================
Total response body sizes: 340000
Avg response body per request: 34.00 Byte
Transfer rate per second: 123914.11 Byte/s (0.12 MByte/s)
==========================RESPONSES==========================
20X Responses: 10000 (100.00%)
30X Responses: 0 (0.00%)
40X Responses: 0 (0.00%)
50X Responses: 0 (0.00%)
Errors: 0 (0.00%)