TL;DR
アプリケーションやインフラの信頼性とパフォーマンスをテストするためのツール。Grafana Labs が開発している。Go で実装されているが、テストのコード(シナリオ)は JavaScript か TypeScript で書く。
なぜ必要か
k6 は、チームがエラーや SLO の違反を防ぎ、スケールしても回復力があり、性能の高いアプリケーションを作れるように支援することを目的としている。
仕組み
シングルバイナリで動くので、クラウドネイティブな環境に組み込みやすい。k6 Studio を使えば、コードを書かずにブラウザの操作からスクリプトを生成できる。SaaS 版の Grafana Cloud k6 もある。
主な用途は次のとおりである。
- 負荷テスト: Web サイトやアプリに大量のアクセスを模擬し、どれだけの負荷に耐えられるかを調べる
- ブラウザテスト: 実際のブラウザで、ページの表示速度や操作性を調べる
- CI/CD への統合: 開発やデプロイの自動化の流れに組み込む
- 障害テスト: 障害を意図的に起こし、システムの回復力を調べる(カオスエンジニアリング)
- インフラテスト: データベースや API など、個々のコンポーネントの性能を調べる
- 監視: 結果を Prometheus に送って Grafana のダッシュボードで可視化する。New Relic や Datadog などの SaaS や、OpenTelemetry とも連携できる
例
macOS では Homebrew でインストールできる(Set up)。VS Code の拡張機能と、型定義もあると書きやすい。
brew install k6
npm install --save-dev @types/k6スクリプトの作成と実行には、次のコマンドを使う。--vus で VU(仮想ユーザ、つまり並列度)を指定する。
k6 new [file] [flags] # スクリプトファイルを作る
k6 run [flags] # スクリプトを実行する
k6 run --vus ... # VU を指定して実行する