DEV Community

Cover image for 最新API向け ReadyAPI 負荷テスト代替
Akira
Akira

Posted on • Originally published at apidog.com

最新API向け ReadyAPI 負荷テスト代替

要約

ReadyAPIには負荷テスト用のLoadUI Proが含まれていますが、その費用はすでに高価なユーザーあたりのライセンスにバンドルされており、ツールはRESTが比較的新しかった頃に設計されています。最新のRESTおよびGraphQL APIをテストするチームにとって、k6とGatlingはより高性能で無料の代替ツールです。Apidogは、パフォーマンステスト用にk6と自然に連携する、機能APIテスト層を処理します。

Apidogを今すぐ試してみよう

💡Apidog は、API設計、機能テスト、モック、ドキュメント作成のための無料のオールインワンAPI開発プラットフォームです。k6と組み合わせることで、完全な最新のテストスタックを構築できます。Apidogを無料で試すことができます。クレジットカードは不要です。

はじめに

実際のユーザーにサービスを提供するAPIにとって、負荷テストは必須です。たとえば100人のユーザーが同時に検索エンドポイントにアクセスしたり、バックグラウンドジョブが同時に500のデータベース書き込みをトリガーしたときに何が起こるかを事前に把握することは、サービスの信頼性確保に不可欠です。本番環境で初めて障害が発生すると、対応コストは非常に高くつきます。

ReadyAPIには、LoadUI Proコンポーネントを介して負荷テストが組み込まれています。すでにReadyAPIを機能テストに使っている場合、統合された負荷テスト機能をそのまま活用でき、テスト定義を一元管理できます。

しかし、LoadUI Proには特有の設計思想や制約があり、すべてのチームに最適なわけではありません。オープンソースのk6やGatlingは、より高性能かつ現代の開発フローに適合した選択肢です。

この記事では、LoadUI Proの機能、k6やGatlingとの比較、そしてApidogによる現代的な負荷テストワークフローへの統合手順を具体的に解説します。

LoadUI Proの実際の機能

LoadUI ProはReadyAPIの負荷テストモジュールです。主な実装ポイントは以下です。

  • 機能テストの再利用

    既存のReadyAPIテストケースを、負荷テストとしてそのまま実行できます。機能テストを新規作成し直す手間が不要です。

  • 負荷プロファイルとシナリオ設定

    仮想ユーザー数、ランプアップ、バーストなど、多様な負荷パターンをGUIで設定できます。

  • リアルタイムメトリックとレポート

    実行中は応答時間、エラー率、スループットなどをライブで監視し、実行後は詳細なレポートを自動生成します。

  • 負荷テスト中のアサーション

    例:95パーセンタイル応答時間が2000ms未満であることなど、合否判定のしきい値を設定できます。

LoadUI Proの制限

  • 単一マシン実行がデフォルト

    大規模・分散型の負荷テストには追加インフラが必要。

  • テスト定義がGUI/プロジェクトファイル形式

    バージョン管理やコードレビューと親和性が低い。

  • カスタマイズ言語がGroovy

    Groovyの知識が必要で、一般的な開発者には馴染みが薄い。

  • JVMスレッドモデルによる制約

    仮想ユーザー数やパフォーマンスでk6等に劣る。

k6:現代のオープンソースの代替ツール

k6は、Grafana Labsが開発する高性能なオープンソース負荷テストツールです (AGPL-3.0)。主な特徴と実装方法は次の通りです。

  • テストはJavaScriptで記述 テストシナリオはJavaScriptファイル。Gitでの管理やコードレビューも容易。
import http from 'k6/http';
import { check, sleep } from 'k6';

export const options = {
  vus: 50,
  duration: '30s',
};

export default function () {
  const res = http.get('https://api.example.com/users');
  check(res, {
    'status is 200': (r) => r.status === 200,
    'response time under 500ms': (r) => r.timings.duration < 500,
  });
  sleep(1);
}
Enter fullscreen mode Exit fullscreen mode
  • 効率的な実行

    Go言語 + JavaScriptランタイムで実装され、1台のマシンで数千の仮想ユーザーを低リソースで実行可能。

  • しきい値による自動判定

    テストに合否基準を組み込め、CI/CDパイプラインに簡単に統合。

export const options = {
  thresholds: {
    http_req_duration: ['p(95)<500'],
    http_req_failed: ['rate<0.01'],
  },
};
Enter fullscreen mode Exit fullscreen mode
  • k6 Cloudの活用

    グローバル分散負荷が必要な場合は、k6 Cloud(有償)を利用可能。テストスクリプトは同じものを使えます。

  • 価格

    オープンソースは無料。k6 Cloudは必要に応じて選択。

Gatling:Javaチーム向けのパフォーマンス テスト

GatlingはJava/Scalaチーム向けの強力な負荷テストツールです。

  • Scala DSLまたはJava APIで記述

    ステートフルなプロトコルや複雑なシナリオを表現しやすい。

  • 詳細なHTMLレポートを自動生成

    実行後、分析に便利なダッシュボードをすぐに得られる。

  • ブラウザ記録機能

    ブラウザ操作をキャプチャして、シナリオ自動生成が可能。

  • Gatling Enterprise(有償)

    分散実行やチームコラボ機能が必要な場合に選択。

  • k6との使い分け

    Java/ScalaベースならGatling、JavaScript主体ならk6が最適。

LoadUI Pro vs k6:直接比較

機能 LoadUI Pro k6
価格 ReadyAPIにバンドル(ユーザーあたり年間約749ドル以上) 無料(オープンソース)
テスト定義 ReadyAPI GUI/プロジェクトファイル JavaScriptコードファイル
バージョン管理 限定的(プロジェクトXML) 完全(コードファイル)
スクリプト言語 Groovy JavaScript
プロトコルサポート REST、SOAP、HTTP REST、WebSocket、gRPC(ベータ版)
分散負荷 限定的 k6 Cloud経由
CI/CD統合 Testrunnerコマンド k6 CLI
仮想ユーザー効率 中程度(JVM) 高い(Goランタイム)
機能テストの再利用 可能(主要な強み) 個別のテストファイル
コミュニティ 小規模 大規模、活発

LoadUI Proの唯一の明確な強みは、ReadyAPIの既存機能テストを負荷テストとしてそのまま再利用できる点です。大規模なReadyAPIテスト資産が既にある場合は有効ですが、新規・モダンなプロジェクトなら、k6のコードベースモデルやGitとの親和性、パフォーマンスが魅力です。

Apidog + k6がReadyAPI + LoadUI Proを置き換える方法

ReadyAPI + LoadUI Proは、機能APIテストと負荷テストを1つのツールでカバーします。最新スタックへの移行では、Apidog(機能テスト)とk6(負荷テスト)を組み合わせて、同様以上のワークフローを実現できます。

Apidogの主な活用方法

  • API設計、REST/GraphQL/gRPC/WebSocketテスト、Smart Mock、ドキュメント作成を一元管理
  • テストスクリプトはJavaScriptで記述
  • CLI経由でCI/CDに統合 例:apidog run collection.json --environment staging

k6の主な活用方法

  • パフォーマンス・負荷テストをJavaScriptで記述
  • ローカルまたはk6 Cloudで実行
  • CLIから簡単にCI/CD統合 例:k6 run load-tests/api-load.js --env BASE_URL=$STAGING_URL

共通の情報源としてOpenAPI仕様を利用

  • Apidogもk6も同じOpenAPI仕様を参照可能
  • APIの変更時、両者のテストが同期できる

CI/CDパイプライン例(GitLabの場合)

stages:
  - functional-tests
  - load-tests

functional-tests:
  stage: functional-tests
  script:
    - apidog run collection.json --environment staging
  only:
    - merge_requests

load-tests:
  stage: load-tests
  script:
    - k6 run load-tests/api-load.js --env BASE_URL=$STAGING_URL
  only:
    - main
Enter fullscreen mode Exit fullscreen mode
  • マージリクエストごとに機能テストを実行
  • mainブランチへのマージ時に負荷テストを自動実行

費用比較

  • ReadyAPI + LoadUI Pro(10ユーザー) 年間約7,490ドル~20,000ドル(構成による)
  • Apidog Basic(10ユーザー)+ k6 OSS 年間約1,080ドル
  • Apidog Basic(10ユーザー)+ k6 Cloud(基本プラン) 年間約1,080ドル + 588ドル = 1,668ドル

k6 Cloudを含めても、最新スタックはReadyAPI + LoadUI Proより大幅にコストダウンできます。

よくある質問

k6はSOAP負荷テストをサポートしていますか?

k6はXMLボディのHTTP POSTを送信できるためSOAPも動作しますが、WSDLの自動インポートやSOAP特有の機能はありません。SOAP負荷テストにはLoadUI Proが適しています。RESTならk6が最適です。

ReadyAPI負荷テスト定義からk6スクリプトへの自動変換は可能?

自動変換ツールはありません。負荷テストシナリオをk6スクリプトとして手動で書き直す必要がありますが、シンプルなシナリオなら数時間で再現可能です。

k6は1台のラップトップで何人の仮想ユーザーを実行できますか?

シナリオやリクエストレートによりますが、k6は1,000~10,000人規模の仮想ユーザーも実現可能です。ReadyAPI/LoadUI ProはJVMのメモリオーバーヘッドがボトルネックとなり、数百人規模で頭打ちになります。

GatlingはgRPC負荷テストをサポートしますか?

Gatlingはv3.10+で実験的gRPCサポートを提供。k6はより成熟したgRPCサポートがあります。

k6のクラウドサービスなしでのテスト実行は可能?

はい。k6 OSSはローカル実行専用です。クラウドサービスは分散実行や履歴結果の保存が必要な場合のみ使用します。

LoadUI Proのライセンスカウントの仕組みは?

LoadUI ProはReadyAPIのユーザー数ベースでバンドルされます。CIエージェントでの実行は契約によって異なるため、SmartBearへの確認が必要です。


ReadyAPIのLoadUI Proは、既存投資がある場合に有効ですが、新規・現代的なAPI開発にはk6とApidogの組み合わせが、開発者フレンドリーかつコスト効率・拡張性の高い選択肢となります。Apidogとk6を導入することで、ReadyAPI + LoadUI Proの数分の一のコストで、最新のAPIテスト自動化スタックをすぐに構築できます。

Top comments (0)