
英语| 中文
CASSOWARY是现代的HTTP/S,Intuitive&Cross-Platform负载测试工具,用于开发人员,测试人员和Sysadmins。 Cassowary从K6,AB和HTTPSTAT等令人敬畏的项目中汲取灵感。
? 2负载测试模式:一种标准和一个扩展模式,可以从文件指定URL路径(如果您想击中几个基础微服务,则理想)
? CI友好:非常适合成为CI管道步骤的一部分
?灵活的指标:CloudWatch指标,Prometheus指标(将指标推向Prometheus Pushgateway),JSON文件
?可配置:能够传递任意HTTP标头,能够配置HTTP客户端
?支持GET,发布,PUT和补丁- 可以在文件中定义,发布,PUT和补丁数据
?跨平台:Linux,Mac OSX和Windows的一个预构建的二进制文件
?可进口- 除了CLI工具外,CASSOWARY还可以作为GO应用中的模块导入
?可视化-CASOWARY可以将请求数据导出为PNG格式的直方图和箱形图
从GitHub版本页面上获取预先构建的二进制文件。您可以选择将木薯二进制放在PATH上,以便可以从任何位置运行cassowary。您可以:
您可以在Mac上使用Homebrew Package Manager安装Cassowary :
$ brew update && brew install cassowary您可以使用其官方Docker图像直接运行Cassowary :
$ 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运行”时没有争论
CASSOWARY可以通过NIX软件包管理器安装。
nix-env -iA cassowary
如果要推出自己的rpm
示例针对www.example.com运行CASSOWARY ,其中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示例在文件slurp模式下运行CASSOWARY ,其中所有URL路径都是从外部文件指定的(如果指定了HTTP,也可以从HTTP获取)。默认情况下,CassoWary将在文件中指定的每个路径中未指定的-n标志。但是,使用-N标志,您还可以指定要针对这些URL路径生成多少cassowary的请求。例子:
$ ./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示例将CASSOWARY JSON指标导出到文件:
$ ./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
示例通过提供Prometheus Pushgatway URL出口到Prometheus的指标:
$ ./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可以通过添加没有值的-CloudWatch标志来将指标导出到AWS 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 ]
在MS中的请求的总持续时间内,提供没有值的- 固有图标志,以使Cassowary以PNG格式计算并输出一个以PNG格式的直方图(hist.png)。例子:
在MS的总持续时间内,在MS的总持续时间内,提供了cassowary ,以告诉cassowary的值为cassowary,以告诉cassowary可视化cassowary,以供应 - 箱形图标志
示例点击文件中定义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 ]
示例点击一个补丁端点,在文件中定义了补丁程序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 ]
示例为您的负载测试指定持续时间,在下面的命令中,我们指出我们希望在30秒的时间内发送100条请求:
$ ./cassowary run -u http://localhost:8000 -n 100 -d 30
Starting Load Test with 100 requests using 1 concurrent users
[ omitted for brevity ]
示例在运行CASSOWARY时添加HTTP标头
$ ./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(默认情况下启用了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 ]
示例指定MTL的客户端身份验证
$ ./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.Paralism键中使用批处理类型。
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.yaml可以将CassoWary导入并用作GO应用程序中的模块。首先使用GO MOD来获取依赖关系:
$ 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/客户端)可能会向后兼容,直到达到稳定的V1.0.0发布。
欢迎捐款!要请求功能创建标签feature-request的新问题。找到错误?请添加标签bugs的问题。也欢迎拉动请求,但请首先在请求的功能上添加一个问题(除非是简单的错误修复或更改dealme)