
英語| 中文
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)