日時: | 2017-05-27 |
---|---|
作: | @voluntas |
バージョン: | 0.0.0 |
url: | https://medium.com/@voluntas |
まずはざっくりと、調べたりてないのでちまちま増やしていきます。
loadimpact/k6: A modern load testing tool, using Go and JavaScript - https://k6.io
loadimpact/k6 (これ以降は k6) は loadimpact 社が AGPL ライセンスで公開しているオープンソースの負荷試験ツールです。
Golang で書かれており、ロジックを JavaScript (ES6) で書けるようになっています。
色々と負荷試験ツールはありますが、なぜ k6 を選択するのか?ですが、k6 を公開している loadimpact は負荷試験サービスの会社です。また、かなりの会社に採用されています。その会社が作っている負荷試験ツールが利用できるというのはとても大きいです。
また負荷試験は本来は継続的な試験が重要です。リリース前に負荷試験して、改修後は一切せずにひどいことに会う話を色々聞いてきたりしています。
k6 は CI との連携も意識されています。つまり継続的負荷試験を前提としたツールなのです。また負荷試験ではレポートの重要性もあります。今までの記録をどう残しておくのか、どう解析していくのかというのもあります。
loadimpact ではこれらをクラウドで有償で提供しています。 loadimpact のサービスを利用すれば負荷試験ツールのすべてがてにはいります。なんと素晴らしい。
ちなみに現段階では HTTP のみです。たくさんのプロトコルではなく HTTP です。HTTP/2 や WebSocket も今後は対応していくようなので楽しみです。もしかすると gRPC なんかにも対応していってくれるのかもしれません。
もともと loadimpact は C + Lua という構成で、スクリプトは Lua で書かせていましたが、ここで Golang + JavaScript に切り替えてくるあたり、しっかりとターゲットを絞っている感じがして、好感触です。
簡単に触ってみて良さそうだと感じたところです。普段は HTTP の負荷試験は locust か wrk を利用しています。
Mac であれば brew で、基本的には docker から利用できます。
docker pull すればイメージがダウンロードされます。あとはスクリプトを書いて docker run すれば動きます。
JSON を投げつけて戻り値をチェックするスクリプトはこれです。
import http from "k6/http";
import { check } from "k6";
export default function() {
let body = JSON.stringify({ key: "value" });
let res = http.post("http://httpbin.org/post", body, { headers: { "Content-Type": "application/json" }});
let j = JSON.parse(res.body);
check(res, {
"status is 200": (r) => r.status === 200,
"is key correct": (r) => j.json.key === "value",
});
}
check を使うことで戻り値の期待値も書けます。
とにかくシンプルです。あとは JavaScript 書いてがんばれよ、というのがすごく良いです。
シンプルに使いたい人はシンプルに、がっつり複雑なシナリオを書きたい人はがんばれ。というのが良いです。
最初から何をしていいのか?というので迷う必要はありません。
JavaScript のサンプルもたくさん用意されています。
https://github.com/loadimpact/k6/tree/master/samples
負荷試験会社がビジネスとして提供しているので、ドキュメントが充実しています。
有償だとおもうのですが、まだ読み込めてません
https://docs.k6.io/docs/load-impact-insights
後で