アシストの製品サービスの紹介や課題解決、イベント・セミナー情報をお届けします。

No.28 ディシジョン・サービスのテスト方法(2018年8月21日)


スクラッチ開発したプログラムやWEBサービス連携機能を持つ製品など何らかのクライアント側アプリからCorticon Serverにデプロイしたディシジョン・サービスを呼び出したときに、思ったような結果が返ってこないことがあります。
原因としては以下のようなパターンが考えられます 。

1.Corticon ServerにHTTPリクエストが届いていない。

2.Corticon ServerにHTTPリクエストは届いているがステータス200のレスポンスが返ってこない。
 (ア) URLのパスが間違っている。
 (イ) HTTPヘッダの値などが間違っている。
 (ウ) POSTしたXMLやJSONの構造やフォーマットなどが間違っている。
 (エ) HTTPヘッダもPOSTしたデータも正しいが、ルール実行中になんらかの致命的なエラーが発生した。

3.Corticon Serverはステータス200のレスポンスを返しているが、そのレスポンスデータをクライアント側で解釈できない。

これらの原因の切り分けを行う際に、クライアント側アプリのデバッグ機能を利用したり、Corticon Server側のアクセスログやデバッグログを確認したりする手法が有効です。
しかし、特に上記の(2)の各項目のようなHTTPの詳細部分の切り分けに関しては、よりプリミティブな通信テストを行うことで、速やかに原因の特定と修正を行うことができることがあるため、柔軟なHTTP通信設定が可能な別のテストツール類の使用をお勧めしています。

今回の記事では、テストツールとして、Postmanを利用してディシジョン・サービスをテストする方法を紹介します。

[記事執筆環境]
Corticon 5.6.1

準備

Postmanとは、様々な設定を行ったHTTPリクエストを作成しWebサーバーに送信することができる、Webアプリケーション開発者には有名なHTTPテストツールです。もともとはGoogle Chromeの拡張機能でしたが、現在はスタンドアローンのアプリケーションとして提供されています。

ここでは、Postmanを使用して、Corticon Server (Tomcat) にデプロイされたディシジョン・サービスに対して、XMLをPOSTするSOAPテストと、JSONをPOSTするRESTテストを行います。

テストの題材として、今回は、Corticon Studioにサンプルとして含まれているプロジェクト「OrderProcessing」、およびそれをCorticon Serverにデプロイしたディシジョン・サービス「ProcessOrder」を対象にします。(※)

※Corticon Studioへのサンプルプロジェクトのインポート方法や、Corticon Serverへのディシジョン・サービスのデプロイ方法に関しては、本記事のテーマから逸れますので割愛します。

Corticon ServerにXMLをPOSTする(SOAP)

最初にCorticon Serverに送信するXMLデータを準備します。

ここでは、Corticon Studioのテスターの機能を使用して、ひとまず正しいXMLデータを取得しそれをテストに使用します。
まずは、Corticon Studioで、プロジェクト「OrderProcessing」のテスト「Order.ert」を開きます。

<Order.ertを開いたところ>

Corticon Studioメニューの「ルールテスト」/「テストシート」/「データ」/「入力」/「要求をSOAPでエクスポート」を選択し、任意の場所に任意の名前で保存します。
保存したXMLをテキストエディタで開き、4行目の「decisionServiceName="InsertDecisionServiceName"」となっている箇所を、Corticon Serverにデプロイしたディシジョン・サービス名に修正します。ここでは「decisionServiceName="ProcessOrder"」です。

<修正後のXML(抜粋)>

本来は、このXMLデータはクライアント側アプリケーションで動的に作成されると思われます。その場合は、この後の手順ではアプリケーションからXMLを出力して使用してください。

次に、Postmanを起動し、新しいリクエストを作成する画面を表示させます。

<Postmanの新規リクエスト作成画面>

「GET」の箇所を「POST」に変更し、「Enter request URL」の箇所に「http://localhost:8080/axis/services/Corticon」と入力してください。
(Corticon Server(Tomcat)がローカルホストの8080ポートで動作している前提です。)

その下の「Headers」タブで、Keyの箇所に「SOAPAction」、Valueの箇所に「urn:Corticon」という行を追加します。

<メソッドとURL, Headersタブを設定したところ>

「Header」タブを「Body」タブに切り替えて、「raw」を選択し、作成したXML全行を貼り付けます。また「raw」の右側にある「Text」を「XML (text/xml)」に切り替えます。

<BodyにXMLを貼り付け、XML (text/xml)に切り替えたところ>

ここまで設定したら、URLの右側にある「Send」ボタンを押します。
もしリクエストをここまでの手順通りに正しく設定しており、Corticon Serverとディシジョン・サービス「ProcessOrder」が正しく動作していれば、以下のようにステータス200とレスポンスXMLが表示されます。

<ステータス200とレスポンスXMLが返ってきたところ>

もし、なんらかのエラーが発生し200番以外のステータスが返ったり、200番は返ってきたもののレスポンスのXMLがおかしい場合は、リクエストの内容を確認してください。
確認するポイントはURL, HTTPヘッダ, POSTするXMLデータです。
もしそれらを全て正しく設定していても、レスポンスがおかしい場合はCorticon Server側の問題である可能性があります。

Corticon ServerにJSONをPOSTする (REST)

XML (SOAP)のときと同様に、まずはCorticon StudioでJSONデータを作成します。
Corticon Studioで、プロジェクト「OrderProcessing」のテスト「Order.ert」を開き、メニューの「ルールテスト」/「テストシート」/「データ」/「入力」/「要求をJSONでエクスポート」を選択し、任意の場所に任意の名前で保存します。保存したJSONをテキストエディタで開き、1行目の「{」のすぐ下に一行追加して、その行に「"name":"DecisionServiceName",」を記述します。DecisionServiceNameはCorticon Serverにデプロイしたディシジョン・サービス名で、ここでは「"name":"ProcessOrder",」と記述します。

<修正後のJSON (抜粋)>

ここでもSOAPの場合と同様に、本来はクライアント側アプリケーションでJSONデータを動的に作成されると思います。その場合は、この後の手順ではアプリケーションからJSONデータを出力して使用してください。

次に、Postmanを起動し、新しいリクエストを作成する画面を表示させます。

「GET」の箇所を「POST」に変更し、「Enter re request URL」の箇所に「http://localhost:8080/axis/corticon/execute」と入力してください。
SOAPのときとはURLが異なる点に注意してください。

またSOAPのときとは異なりRESTの場合は「Headers」タブでパラメータを手動で追加する必要はありません。
そのまま「Body」タブに切り替えて「raw」を選択し作成したJSONの全行を貼り付け、「raw」の右側にある「Text」を「JSON (application/json)」に切り替えます。

<メソッドとURL, BodyにJSONを貼り付け、JSON (application/json)に切り替えたところ>

ここまで設定したら、URLの右側にある「Send」ボタンを押します。
SOAPのときと同様に、もしリクエストをここまでの手順通りに正しく設定しており、Corticon Serverとディシジョン・サービス「ProcessOrder」が正しく動作していれば、以下のようにステータス200とレスポンスJSONが表示されます。

<ステータス200とレスポンスJSONが返ってきたところ>

こちらもSOAPの場合と同様に、なんらかのエラーが発生し200番以外のステータスが返ったり、200番は返ってきたもののレスポンスのJSONがおかしい場合は、リクエストの内容を確認してください。もしリクエスト内容を全て正しく設定していても、レスポンスがおかしい場合はCorticon Server側の問題である可能性があります。

なお、注意点としては、Corticonサーバーが受け取ることができるJSONデータの文字コードはUTF-8です。
Postmanでは自動的にJSONがUTF-8で送信されますが、後述する他のツールの場合は注意してください。

まとめ

今回の記事ではテストツールとしてPostmanを紹介しましたが、同様のHTTPリクエスト設定が可能なツールであれば、他のツールでもテスト可能です。
例えばLinuxの「wget」コマンドでもXMLやJSONを送信してディシジョン・サービスの実行が可能です。また、SOAPやRESTに特化したテストツールとして有名な、「SoapUI」でもディシジョン・サービスの実行が可能です。デバッグの際には、これらのツールを活用してみてはいかがでしょうか。


「Corticon Tech コラム」記事一覧

「Corticon Tech コラム」記事一覧はこちらから


この記事をシェアする

おすすめ記事

この記事のハッシュタグ #Progress Corticon #Corticon Tech コラム から関連する記事を表示しています。