メッセージング基盤テストシミュレータサンプル

ソースコード

本サンプルは、Nablarchアプリケーションフレームワークの MOMメッセージングHTTPメッセージング を使用する アプリケーションのテストにて、対向先システムをシミュレートするサンプル実装を提供する。

テスト環境構築後の疎通テストやアプリケーションの結合テスト等で、アプリケーションの接続先として、 使用することを想定している。

シミュレータの動作イメージを以下に示す。

シミュレータがメッセージ受信する場合
../../_images/behavior_illustration01.png
シミュレータがメッセージ送信する場合
../../_images/behavior_illustration02.png

重要

本サンプルではMOMとしてIBM MQ 9.3 を使用している。 IBM MQ 9.3 はJavaのバージョン 8 以上がサポート対象であるため、本サンプルでは Java 17を使用する。

用途

疎通テスト

テスト環境を構築後のNablarchアプリケーションフレームワーク、ミドルウェア、ハードウェア等の設定を確認するための疎通テストにて、 簡易的に通信する対向先システムとして使用できる。

結合テスト

アプリケーションの結合テストの際に、システム間通信の擬似的な対向先システムとして使用できる。 シミュレータに要求電文/応答電文として使用するデータを設定することで、シナリオを用いたテストができる。

シナリオを用いたテストは取引単体テストにて可能であるが、 シミュレータを使用したテストではOSやミドルウェアも含めた動作を確認できる点が異なる。

負荷テスト

アプリケーションの負荷テストを行う際に、負荷をかけるための大量のメッセージ送受信ができる。

特徴

取引単体テストと同じ手順でテストデータを作成できる

本シミュレータで使用するテストデータは、取引単体テストと同様の手順で作成できる。 そのため、本シミュレータの使用時に余計な学習コストが発生しない。

特殊および複雑なテストケースにも、カスタマイズすることで対応可能(メッセージ受信)

ソースコード提供しているシミュレータのソースコードを修正することによって、 特殊および複雑なテストケースに合わせた、以下のようなテストが可能である。

  • 要求電文の内容に応じて、応答電文の内容を動的に変更する必要があるテストを行う。
  • 意図的に応答の時間を遅らせることによってタイムアウトを発生させるなど、異常系のテストを行う。

マルチスレッドで要求電文を送信することが可能(メッセージ送信)

Nablarchアプリケーションフレームワークのマルチスレッド実行制御ハンドラをシミュレータ内部で使用しており、 マルチスレッドで要求電文を送信するこで、大量メッセージを送信した負荷テストが可能である。

要求

シミュレータがメッセージ受信する場合

  • HTTPメッセージ受信、MOM同期応答メッセージ受信用の応答電文を送信できる。
  • 要求電文のログを出力できる。
  • 任意のHTTPステータスコードを返却できる。
  • シミュレータへの要求順序にあわせた応答電文を送信可能(単体テスト時と同様、Excelファイルに記述された内容を上から順に返却する)。

シミュレータがメッセージ送信する場合

  • HTTPメッセージ送信、MOM同期応答メッセージ送信、MOM応答不要メッセージ送信用の要求電文を送信できる。
  • 指定回数、同じ電文を送信する。
  • 応答電文のログを出力できる。
  • Excelファイルに記述された内容を順に送信できる。

使用方法

シミュレータの実行モジュールを作成する

本サンプルは、利用者が目的とするテストを実施するために、Javaファイル等をカスタマイズすることを想定しているため、 ソースコードや設定ファイルをサンプル提供する形態としている。

そのため、シミュレータを使用するには、以下の手順に従ってビルドを実行し、実行モジュールを作成する必要がある。

シミュレータの取得

以下のコマンドを実行してシミュレータのソースコードを取得する。

git clone https://github.com/nablarch/nablarch-biz-sample-all.git
実行モジュールの作成

以下のコマンドを実行し、 nablarch-messaging-simulator/target/build 配下に実行モジュールを作成する。

cd nablarch-messaging-simulator/
mvn clean dependency:copy-dependencies -DoutputDirectory=target/build/lib package

作成した実行モジュールは、シミュレータを実行する環境に配置する。

シミュレータを起動する

実行モジュールに含まれる以下のbatファイルを実行することでシミュレータが起動する。

HTTPメッセージ受信:http-incoming-startup.bat
HTTPメッセージ送信:http-outgoing-startup.bat
MOMメッセージ受信:mom-incoming-startup.bat
MOMメッセージ送信:mom-outgoing-startup.bat

拡張例

メッセージ送信時にリクエスト送信回数を指定する

デフォルトでは、送信リストファイル(CSV)に記載した行数分のリクエストを送信するが、 同一のデータを繰り返し送信したい場合などは、 sendCount オプションでリクエスト送信回数を指定できる。

オプションの指定例を以下に示す。

java <省略> nablarch.fw.launcher.Main <省略> -sendCount 10000

メッセージ受信時にリクエストの種類に応じてレスポンスを切り替える

リクエストの種類に応じてレスポンスを切り替えるには、アクションクラスの getRequestId メソッドを修正する。

HTTPメッセージの受信時に、リクエストURIによってレスポンスを切り替える場合の実装例を以下に示す。

public class HttpIncomingSimulateAction implements Handler<HttpRequest, HttpResponse> {

    // 省略

    protected String getRequestId(HttpRequest request) {
        // リクエストURIをもとに、レスポンスのリクエストIDを切り替える。
        return request.getRequestUri().endsWith("RM11AC0101") ? "RM11AC0201" : "RM11AC0202";
    }
}

補足

MOMメッセージの受信時にレスポンスを切り替えたい場合も、HTTPメッセージの受信時と同様に、 アクションクラスの getRequestId メソッドを修正すればよい。

メッセージ受信時に意図的にレスポンスを遅延させる

メッセージ受信時に意図的にレスポンスを遅延させるには、 以下の様にアクションクラスの handle メソッドに直接遅延処理を実装する。

public class HttpIncomingSimulateAction implements Handler<HttpRequest, HttpResponse> {

  public HttpResponse handle(HttpRequest request, ExecutionContext context) {

      try {
          // 10秒遅延させる
          TimeUnit.SECONDS.sleep(10);
      } catch (InterruptedException e) {
          // 例外処理
      }

      // 省略
  }
}