メッセージング基盤テストシミュレータサンプル¶
目次
本サンプルは、Nablarchアプリケーションフレームワークの MOMメッセージング 、 HTTPメッセージング を使用する アプリケーションのテストにて、対向先システムをシミュレートするサンプル実装を提供する。
テスト環境構築後の疎通テストやアプリケーションの結合テスト等で、アプリケーションの接続先として、 使用することを想定している。
シミュレータの動作イメージを以下に示す。
重要
本サンプルではMOMとしてIBM MQ 9.3 を使用している。 IBM MQ 9.3 はJavaのバージョン 8 以上がサポート対象であるため、本サンプルでは Java 17を使用する。
用途¶
特徴¶
取引単体テストと同じ手順でテストデータを作成できる¶
本シミュレータで使用するテストデータは、取引単体テストと同様の手順で作成できる。 そのため、本シミュレータの使用時に余計な学習コストが発生しない。
特殊および複雑なテストケースにも、カスタマイズすることで対応可能(メッセージ受信)¶
ソースコード提供しているシミュレータのソースコードを修正することによって、 特殊および複雑なテストケースに合わせた、以下のようなテストが可能である。
- 要求電文の内容に応じて、応答電文の内容を動的に変更する必要があるテストを行う。
- 意図的に応答の時間を遅らせることによってタイムアウトを発生させるなど、異常系のテストを行う。
マルチスレッドで要求電文を送信することが可能(メッセージ送信)¶
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) {
// 例外処理
}
// 省略
}
}