10
1

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?

IBM BobとIBM API ConnectでAPIテスト自動化の仕組みを作ってみた

10
Last updated at Posted at 2026-03-17

はじめに

API開発では、実装だけでなく テストの作成や実行も重要な工程になります。しかし、テストケースを手作業で作成するのは時間がかかる場合があります。

そこで IBM Bob を利用し、自然言語の指示(プロンプト)からテストケースの生成・YAML形式のテスト定義生成を行い、API Connectで実行できるか検証しました。

また、API Hook を利用することで、外部からテストを実行できる仕組みも構築しました。

前提条件

  • IBM API Connect の環境が利用可能であること
  • IBM Bobが利用可能であること

今回使用したAPI

今回の検証では、現在時刻を取得するシンプルなAPIを対象にします。
このAPIは、こちらの記事で作成したものを利用しています。詳細はそちらをご確認ください。

実装手順

1. Bobでテストケースを生成

まず、Bobを利用してAPIのテストケースを生成します。
以下のようなプロンプトを使用しました。

「現在時刻を返却するAPI」のテストケースを生成してください。
正常系、異常系、パフォーマンステスト、セキュリティテストを含めてください。

Bobは、正常系・異常系を含むテストケースを生成しました。たとえば以下のような内容です。
TC-001: 正常なリクエスト
TC-101: API Key未設定
TC-104: 不正なHTTPメソッド(POST)
TC-105: 存在しないパス
このように、AIを使うことで基本的なテスト観点を短時間で洗い出すことができます。

テストケース例:

### 1. 正常系テスト

#### TC-001: 正常なリクエスト(有効なAPI Key)

**目的**: 有効なAPI Keyでリクエストした場合、正常にレスポンスが返却されることを確認

**前提条件**:
- 有効なClient IDが発行されている
- APIが正常にデプロイされている

**テストステップ**:
1. 有効なClient IDをヘッダーに設定
2. GET /time/current にリクエスト送信

**期待結果**:
- HTTPステータスコード: 200
- Content-Type: application/json
- レスポンスボディに以下のフィールドが含まれる:
  - `timestamp`: ISO 8601形式の日時文字列
  - `timezone`: "UTC"
  - `message`: "Current system time retrieved successfully"

**検証項目**:
- [ ] ステータスコードが200である
- [ ] Content-Typeがapplication/jsonである
- [ ] timestampフィールドが存在する
- [ ] timestampがISO 8601形式である
- [ ] timezoneフィールドが"UTC"である
- [ ] messageフィールドが正しいメッセージを含む
- [ ] レスポンス時間が1秒以内である

2. BobでYAMLを生成

次に、Bobが生成したテストケースをもとに、IBM API Connect の Automated API behavior testing で利用できるYAML形式のテスト定義を生成します。
今回使用したプロンプトは以下の通りです。

以下のAPIテストケースを、IBM API Connect の Automated API behavior testing 用のテスト定義 YAML に変換してください。

要件:
- YAMLのみ出力する
- info, configs, steps を含める
- request step と assertion を含める

参考となる動作例:
info:
    testName: Get System Time
    version: 2
configs:
    globalVariables:
        basePath: basePath
        domain: yourdomain.com
        protocol: https://
    inputs:
        - default:
            X-IBM-Client-Id: your-client-id
steps:
    - type: request
      method: get
      url: '{{ protocol }}{{ domain }}/{{ basePath }}/current'
      var: payload
      mode: json
      headers:
        X-IBM-Client-Id: '{{ X-IBM-Client-Id }}'
    - type: assert-equals
      expression: payload_response_statusCode
      value: "200"
API
[OpenAPI仕様のYAML]

APIテストケース
[テストケース仕様書のマークダウン]

Bobが生成したYAMLの一部は以下のようになります。

info:
  testName: Get System Time API Test Suite
  version: 2

configs:
  globalVariables:
    basePath: api base path
    domain: api domain
    protocol: https://
  inputs:
    - default:
        X-IBM-Client-Id: your client id

steps:
  # TC-001: 正常なリクエスト
  - type: request
    method: get
    url: '{{ protocol }}{{ domain }}/{{ basePath }}/current'
    var: tc001_payload
    mode: json
    headers:
      X-IBM-Client-Id: '{{ X-IBM-Client-Id }}'
  
  - type: assert-equals
    expression: tc001_payload_response_statusCode
    value: "200"

3. API Connectでテストを作成

まず、IBM API Connectへアクセスします。
image.png

APIテストへ移動します。
image.png

「Add test suite」を選択し、テスト・スイートを作成します。
image.png

image.png

テストケースを追加します。
image.png

今回は 「最初から」 を選択し、Bobが生成したテストケースをもとにテストを作成します。
image.png

編集ボタンを押します。
image.png

ここに、先ほどBobに生成してもらったYAMLのコードを貼り付けます。
image.png

そして、保存→実行 でテストを行います。
結果はこのように表示され、今回は全て成功していることが確認できました。
image.png

レート制限テストの追加

基本的なAPIテストに加えて、API運用ではレート制限などの制御も重要な観点になります。
そこで今回は、Bobにレート制限のテストケースも生成してもらい、HTTP 429(Too Many Requests)の動作についても検証しました。

その際に使用したプロンプトは以下の通りです。

レート制限(5リクエスト/時間)をテストするテストケースとYAMLを作成してください。

要件:
- 6回リクエスト → 6回目はエラー
- 60秒待機 → リクエスト → 200 OK(リセット確認)
- 再度10回リクエスト → 6回目以降は429エラー

IBM API Connect の Automated API behavior testing 形式で出力してください。

Bobが生成したYAMLの一部は以下のようになります。

steps:
 - type: request
   method: get
   url: '{{ protocol }}{{ domain }}/{{ basePath }}/current'
   var: tc106_request6
   mode: json
   headers:
     X-IBM-Client-Id: '{{ X-IBM-Client-Id }}'
 - type: assert-equals
   expression: tc106_request6_response_statusCode
   value: "200"
 
 - type: request
   method: get
   url: '{{ protocol }}{{ domain }}/{{ basePath }}/current'
   var: tc106_request7
   mode: json
   headers:
     X-IBM-Client-Id: '{{ X-IBM-Client-Id }}'
 - type: assert-equals
   expression: tc106_request7_response_statusCode
   value: "429"
 
 # TC-107: 60秒待機後、カウンターリセット確認
 - type: request
   method: get
   url: 'https://httpbin.org/delay/60'
   var: wait_for_reset_tc107
   mode: json
 
 - type: request
   method: get
   url: '{{ protocol }}{{ domain }}/{{ basePath }}/current'
   var: tc107_request_after_reset
   mode: json
   headers:
     X-IBM-Client-Id: '{{ X-IBM-Client-Id }}'
 - type: assert-equals
   expression: tc107_request_after_reset_response_statusCode
   value: "200"

その後、先ほどの 3. API Connectでテストを作成 の手順に従ってテストを作成します。

次に、API ConnectのUI上からレート制限の設定を行います。
開発を開き、作業するAPIを選択します。
image.png

そして、テストタブを選択し、ターゲット構成を選択します。
image.png
image.png

ターゲット製品のレート制限編集を押し、カスタムを設定します。
image.png

設定を保存して完了です。
APIテストへ戻り、テストを実行します。

このように結果が確認できました。
スクリーンショット 2026-03-17 10.11.39.png

補足 なお、API Connect(DataPower API Gateway)のレート制限は、設定値どおりに厳密に適用されない場合があります。

4. API Hookを作成

次に API Hook を作成します。
API Hookを作成すると、外部からREST APIでテストを実行できるようになります。

API Test画面からSettings → API hooks and keysを開きます。
image.png

Hooksの追加ボタンを押し、Nameを設定しURLを生成します。
image.png

鍵も同様に、追加ボタンを押し、Nameを設定しKeyとSecretを生成します。
image.png

5. Hook URLからテストを実行

生成されたHook URLを利用して、外部からテストを実行します。

curl -X POST "<HOOK_URL>/tests/run" \
-H "x-api-key: YOUR_KEY" \
-H "x-api-secret: YOUR_SECRET" \
-H "Content-Type: application/json" \
-d '{"options":{"JUnitFormat":true}}'

実行すると、以下のようにテスト結果が返されます。
以下は実行結果の一部です。

[Test Step :0] request /time/current
[Test Step :1] statusCode equals 200
[Test Step :2] Content-Type equals application/json
[Test Step :3] timestamp is string
[Test Step :4] timezone is string
[Test Step :5] timezone equals UTC

テスト結果

テスト結果のサマリーは以下の通りです。

基本機能テスト実行結果

項目 結果
総テスト数 61ステップ
成功 61
失敗 0
実行時間 約15秒

テストケース一覧

ID テスト内容 ステップ数 結果
TC-001 基本的な正常系テスト 8
TC-002 レスポンスフィールド検証 4
TC-003 連続リクエスト (3回) 9
TC-101 API Keyなし → 401 2
TC-102 無効なAPI Key → 401 2
TC-103 空のAPI Key → 401 2
TC-104 POSTメソッド → 405 2
TC-105 存在しないパス → 404 2
TC-201 負荷テスト (10連続) 20
TC-303 CORS設定確認 2
TC-401 レスポンススキーマ検証 5
TC-402 必須フィールド検証 4

レート制限テスト実行結果

項目 結果
総テスト数 29ステップ
成功 29
失敗 0
実行時間 約2分

テストケース一覧

ID テスト内容 ステップ数 結果
TC-106 レート制限超過 → 429 16
TC-107 レート制限リセット確認 5
TC-108 連続レート制限確認 14

まとめ

今回は以下の流れでAPIテストを自動化しました。

  1. Bobでテストケースを生成
  2. BobでAPI Connect用のテストYAMLを生成
  3. API Connectでテストを実行
  4. API Hookで外部からテストを実行

AIを利用することで、テストケースの作成を効率化することできました。
また、API Hookを利用することで、CI/CDなどの外部ツールと連携したテスト自動化も可能になります。

API開発では実装だけでなく、継続的にテストを実行できる仕組みを作ることも重要です。
今回のように AIとAPI管理ツールを組み合わせることで、テスト作成と実行の両方を効率化できる可能性があると感じました。

無料ではじめてみましょう

無料トライアルでは30日間40Bobコインまで利用ができます。申し込みはこちら
Bobcoinが足りなくなったらこちらで少額から購入できます。

10
1
0

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
10
1

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?