
Английский | 中文
Cassowary -это современный http/s, интуитивно понятный и кроссплатформенный инструмент тестирования нагрузки, встроенный для разработчиков, тестеров и сисадминов. Cassowary черпает вдохновение из потрясающих проектов, таких как K6, AB & Httpstat.
? 2 режимы тестирования нагрузки : один стандарт и один режим разброса, где пути URL могут быть указаны из файла (идеально, если вы хотите нажать несколько базовых микросервисов)
? CI Friendly : хорошо подходит для того, чтобы стать частью стадии трубопровода CI
? Гибкие метрики : метрики CloudWatch, Metrics Prometheus (подталкивание метрик в Prometheus pushgateway), файл json
? Настраивается : способен пройти в произвольных заголовках HTTP, способных настроить клиент HTTP
? Поддержки GET, POST, PUT & PATCH - POST, PUT и PATCH Данные могут быть определены в файле
? Поперечная платформ : один предварительно построенный двоичный файл для Linux, Mac OSX и Windows
? Импортируется - помимо инструмента CLI Cassowary может быть импортирован в качестве модуля в вашем приложении Go
? Визуализация - Cassowary может экспортировать данные запроса в виде гистограммы и ящика в формате PNG
Возьмите предварительно построенный бинар со страницы Github Relases. При желании вы можете поместить бинарную кассоу в свой PATH , чтобы вы могли запустить Cassowary из любого места. Альтернатива вы можете:
Вы можете установить Cassowary , используя диспетчер пакетов Homebrew на Mac:
$ brew update && brew install cassowaryВы можете запустить Cassowary напрямую, используя его официальное изображение Docker:
$ docker run rogerw/cassowary:v0.14.1 -u http://www.example.com -c 1 -n 10Для местного развития:
$ GOOS=linux go build -o dist/docker/cassowary cmd/cassowary/ * .go
$ docker build -f dist/docker/Dockerfile -t test_cassowary dist/docker
$ docker run test_cassowary -u http://www.example.com -c 1 -n 10Без аргументов при выполнении "Docker Run" он печатает, помогает использовать
Cassowary может быть установлен через диспетчер пакетов NIX.
nix-env -iA cassowary
Если вы хотите развернуть свой собственный RPM, вы можете использовать файл spec casowary.spec для создания пакета RPM
Пример запуска Cassowary против www.example.com с 100 запросами, распределенными более чем на 10 одновременных пользователей:
$ ./cassowary run -u http://www.example.com -c 10 -n 100
Starting Load Test with 100 requests using 10 concurrent users
100% | ████████████████████████████████████████ | [1s:0s] 1.256773616s
TCP Connect.....................: Avg/mean=101.90ms Median=102.00ms p(95)=105ms
Server Processing...............: Avg/mean=100.18ms Median=100.50ms p(95)=103ms
Content Transfer................: Avg/mean=0.01ms Median=0.00ms p(95)=0ms
Summary:
Total Req.......................: 100
Failed Req......................: 0
DNS Lookup......................: 115.00ms
Req/s...........................: 79.57Пример запуска Cassowary в режиме Slurp File, где все пути URL -адреса указаны из внешнего файла (который также может быть извлечен из HTTP, если указано). По умолчанию Cassowary, без указанного флага -N, сделает один запрос на путь, указанный в файле. Однако с помощью флага -n вы также можете указать, сколько запросов вы хотите, чтобы Cassowary генерировался против этих путей URL. Пример:
$ ./cassowary run -u http://localhost:8000 -c 1 -f urlpath.txt
# NOTE: from v0.10.0 and below file slurp mode had it's own command
# $ ./cassowary run-file -u http://localhost:8000 -c 1 -f urlpath.txt
Starting Load Test with 5 requests using 1 concurrent users
[ omitted ]
$ ./cassowary run -u http://localhost:8000 -c 10 -n 100 -f urlpath.txt
Starting Load Test with 100 requests using 10 concurrent users
100% | ████████████████████████████████████████ | [0s:0s] 599.467161ms
TCP Connect.....................: Avg/mean=1.80ms Median=2.00ms p(95)=3ms
Server Processing...............: Avg/mean=0.90ms Median=0.00ms p(95)=3ms
Content Transfer................: Avg/mean=0.00ms Median=0.00ms p(95)=0ms
Summary:
Total Req.......................: 3925
Failed Req......................: 0
DNS Lookup......................: 2.00ms
Req/s...........................: 6547.48Пример экспорта метрик JSON Cassowary в файл:
$ ./cassowary run --json-metrics --json-metrics-file=metrics.json -u http://localhost:8000 -c 125 -n 100000
Starting Load Test with 100000 requests using 125 concurrent users
100% | ████████████████████████████████████████ | [0s:0s] 984.9862ms
TCP Connect.....................: Avg/mean=-0.18ms Median=0.00ms p(95)=1ms
Server Processing...............: Avg/mean=0.16ms Median=0.00ms p(95)=1ms
Content Transfer................: Avg/mean=0.01ms Median=0.00ms p(95)=0ms
Summary:
Total Req.......................: 100000
Failed Req......................: 0
DNS Lookup......................: 2.00ms
Req/s...........................: 101524.27Если флаг
json-metrics-fileотсутствует, то имя файла по умолчаниюout.json.
Если вы предпочитаете необработанные данные всего запроса (в формате CSV), вы можете экспортировать его, используя флаг --raw-output
Выводимое имя файла
raw.csv
Пример экспорта Cassowary Metrics для Prometheus, поставляя URL Prometheus pushgatway:
$ ./cassowary run -u http://localhost:8000 -c 125 -n 100000 -p http://pushgatway:9091
Starting Load Test with 100000 requests using 125 concurrent users
[ omitted for brevity ]
Cassowary может экспортировать метрики в AWS CloudWatch, просто добавив флаг -Cloudwatch без значения. Обратите внимание, что вам нужно сообщить Cassoway, какой регион AWS вы хотите использовать. Самый простой способ - использовать переменную среды, как показано ниже:
$ export AWS_REGION=eu-north-1 && ./cassowary run -u http://localhost:8000 -c 125 -n 100000 --cloudwatch
Starting Load Test with 100000 requests using 125 concurrent users
[ omitted for brevity ]
Предоставьте флаг - -гистограмма без значения, чтобы позволить Cassowary вычислять и вывести гистограмму в формате PNG (Hist.png в током Dir) для общей продолжительности запросов в MS. Пример:
Предоставьте флаг -Boxplot без значения, чтобы сообщить Cassowary генерировать визуализацию коробки в формате PNG (boxplot.png в током Dir) для общей продолжительности запросов в MS
Пример нанесения конечной точки поста, где данные post json определяются в файле:
$ ./cassowary run -u http://localhost:8000/add-user -c 10 -n 1000 --postfile user.json
Starting Load Test with 1000 requests using 10 concurrent users
[ omitted for brevity ]
Пример нанесения конечной точки патча, где данные Patch JSON определяются в файле:
$ ./cassowary run -u http://localhost:8000/add-user -c 5 -n 200 --patchfile user.json
Starting Load Test with 200 requests using 5 concurrent users
[ omitted for brevity ]
Пример указать продолжительность вашего теста на загрузку, в приведенной ниже команде мы указываем, что мы хотим отправить 100 запросов в течение 30 секунд:
$ ./cassowary run -u http://localhost:8000 -n 100 -d 30
Starting Load Test with 100 requests using 1 concurrent users
[ omitted for brevity ]
Пример добавления заголовка HTTP при запуске Cassowary
$ ./cassowary run -u http://localhost:8000 -c 10 -n 1000 -H ' Host: www.example.com '
Starting Load Test with 1000 requests using 10 concurrent users
[ omitted for brevity ]
Пример отключения HTTP Keep-Alive (по умолчанию включена wort-alive):
$ ./cassowary run -u http://localhost:8000 -c 10 -n 1000 --disable-keep-alive
Starting Load Test with 1000 requests using 10 concurrent users
[ omitted for brevity ]
Пример указания сертификата CA
$ ./cassowary run -u http://localhost:8000 -c 10 -n 1000 --ca /path/to/ca.pem
Starting Load Test with 1000 requests using 10 concurrent users
[ omitted for brevity ]
Пример указания аутентификации клиента для MTLS
$ ./cassowary run -u https://localhost:8443 -c 10 -n 1000 --cert /path/to/client.pem --key /path/to/client-key.pem --ca /path/to/ca.pem
Starting Load Test with 1000 requests using 10 concurrent users
[ omitted for brevity ]
Вы можете запустить Cassowary распределенным образом, если вам нужно масштабировать нагрузочные тестирование на более чем на одной машине. Самый простой способ сделать это - иметь доступ к кластеру Kubernetes. Используйте тип партии в Kubernetes и в ключе Spec.paralellism вы можете указать, сколько экземпляров Cassowary вы хотите запустить одновременно:
apiVersion : batch/v1
kind : Job
metadata :
name : cassowary
spec :
parallelism : 10
template :
spec :
containers :
- command : ["-u", "http://my-microservice.com:8000", "-c", "1", "-n", "10"]
image : rogerw/cassowary:v0.14.1
name : cassowary
restartPolicy : NeverПросто примените этот YAML так:
$ kubectl apply -f cassowary.yamlCassowary может быть импортирован и использован в качестве модуля в вашем приложении Go. Начните с извлечения зависимости с использования MOD GO:
$ go mod init test && go get github.com/rogerwelin/cassowary/pkg/clientИ ниже показано простой пример того, как запустить тест на загрузку из вашего кода и печатать результаты:
package main
import (
"encoding/json"
"fmt"
"github.com/rogerwelin/cassowary/pkg/client"
)
func main () {
cass := & client. Cassowary {
BaseURL : "http://www.example.com" ,
ConcurrencyLevel : 1 ,
Requests : 10 ,
DisableTerminalOutput : true ,
}
metrics , err := cass . Coordinate ()
if err != nil {
panic ( err )
}
// print results
fmt . Printf ( "%+v n " , metrics )
// or print as json
jsonMetrics , err := json . Marshal ( metrics )
if err != nil {
panic ( err )
}
fmt . Println ( string ( jsonMetrics ))
}Больше примеров библиотеки можно найти здесь
Cassowary следует за семантической версией. Публичная библиотека (PKG/Client) может сломаться назад до тех пор, пока не достигнет стабильного выпуска V1.0.0.
Взносы приветствуются! Чтобы запросить функцию, создайте новую проблему с признаком feature-request метки. Найти ошибку? Пожалуйста, добавьте проблему с bugs метки. Также приветствуются запросы на тягу, но сначала добавьте проблему в запрошенную функцию (если это простое исправление ошибок или изменение чтения)