
英語| 中文
Cassowaryは、開発者、テスター、システムのために構築された最新のHTTP/s、直感的でクロスプラットフォームの負荷テストツールです。 Cassowaryは、K6、AB、HTTPSTATなどの素晴らしいプロジェクトからインスピレーションを得ています。
? 2ロードテストモード:ファイルからURLパスを指定できる1つの標準モードと1つのスプレッドモード(いくつかの基礎となるマイクロサービスを押したい場合は理想的です)
? CIフレンドリー:CIパイプラインステップの一部であることに最適
?フレキシブルメトリック:CloudWatchメトリック、プロメテウスメトリック(Prometheus Pushgatewayにメトリックをプッシュ)、JSONファイル
?設定可能:任意のHTTPヘッダーを渡すことができ、HTTPクライアントを構成できます
?サポートGet、Post、Put&Patch -Post、Put、およびパッチデータはファイルで定義できます
?クロスプラットフォーム:Linux、Mac OSX、Windows用の1つの事前に構築されたバイナリ
?インポート- CLIツールのほかに、キャッソワリーはGOアプリにモジュールとしてインポートできます
?視覚化-Cassowaryは、PNG形式のヒストグラムとBoxPlotとしてリクエストデータをエクスポートできます
GitHubリリースページから事前に構築されたバイナリを取得します。オプションでキャッソワリーバイナリをPATHに配置できるように、キャッソワリーを任意の場所から実行できます。できることができます:
MacにHomeBrewパッケージマネージャーを使用してCassowaryをインストールできます。
$ brew update && brew install cassowaryCassowaryは、公式の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をロールアウトしたい場合は、仕様ファイルcassowary.specを使用してRPMパッケージを構築できます
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ファイルスラープモードでキャッソワリーを実行する例では、すべてのURLパスが外部ファイルから指定されています(指定されている場合はHTTPからフェッチすることもできます)。デフォルトでは、Cassowaryは、-nフラグが指定されていない場合、ファイルで指定されたパスごとに1つの要求を行います。ただし、-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 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にメトリックをエクスポートできます。どのAWS地域を使用するかをCassowayに伝える必要があることに注意してください。最も簡単な方法は、以下に示すように環境変数を使用することです。
$ 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形式のヒストグラム(現在のdirのhist.png)のヒストグラムを計算して出力する値なしで-histogramフラグを供給します。例:
MSのリクエストの合計期間中、PNG形式でBoxPlot Visualization(boxplot.png)でboxplotの視覚化(boxplot.png)を生成するようにcassowaryに伝える値なしで-boxplotフラグを供給します
例の場合、ポスト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の例(デフォルトではKeep-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 ]
複数のマシンで負荷テストをスケールアップする必要がある場合は、分散型の方法でキャソワリーを実行できます。それを行う最も簡単な方法は、Kubernetesクラスターにアクセスできることです。 KubernetesおよびSpec.Paralellismキーでバッチタイプを使用して、同時に実行するキャッソワリーのインスタンスの数を指定できます。
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アプリのモジュールとしてインポートして使用できます。 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の問題を追加してください。プルリクエストも歓迎されますが、最初にリクエストされた機能に問題を追加してください(簡単なバグ修正またはREADMEの変更でない限り)