Skip to content

Instantly share code, notes, and snippets.

@voluntas
Created May 27, 2017 02:50
Show Gist options
  • Star 6 You must be signed in to star a gist
  • Fork 0 You must be signed in to fork a gist
  • Save voluntas/f5ca94cb0ebbcde4a4cea5f305c59fba to your computer and use it in GitHub Desktop.
Save voluntas/f5ca94cb0ebbcde4a4cea5f305c59fba to your computer and use it in GitHub Desktop.
loadimpact/k6 で負荷試験コトハジメ

loadimpact/k6 で負荷試験コトハジメ

日時

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 を選択するのか?ですが、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/

管理画面を利用できる

有償だとおもうのですが、まだ読み込めてません

https://docs.k6.io/docs/load-impact-insights

使い方

後で

Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment