この章では、BPELプロセスのテストを自動化するテスト・ケースの作成、デプロイおよび実行方法について説明します。テスト・ケースを使用すると、本番環境にデプロイする前に、BPELプロセスとWebサービス・パートナの相互作用をシミュレートできます。これにより、本番環境へのデプロイ準備が完了するまでに、プロセスとWebサービス・パートナの相互作用が予期したとおりであることを確認できます。
この章の内容は次のとおりです。
関連項目: BPELテスト・スイートのサンプル・ファイルは、次の場所にあります。
|
Oracle BPEL Process Managerは、BPELプロセスに対して反復可能なテストを作成して実行するための、自動化されたテスト・スイート・フレームワークを提供します。
テスト・スイート・フレームワークの機能は、次のとおりです。
Webサービス・パートナの相互作用のシミュレート
テスト・データによるプロセス・アクションの検証
単純アクティビティの実行割合に基づくソース・コードの実行割合の計算
完了したインスタンスの監査証跡に基づくテスト・ケースの生成
テスト結果レポートの作成
次の各項では、テスト・スイートの概念の概要を説明します。
テスト・フレームワークは、次の2つのタイプのテスト・ケースをサポートしています。
ユニット・テスト: テスト・スイートの単一テスト・ケースを表します。たとえば、製品に関するオファーが2つのWebサービス仕入先に発行されるBPELプロセスがあるとします。テスト・スイートにテストを作成して、このようなBPELプロセスとの相互作用における2つのWebサービス・パートナの動作をエミュレートできます。
複合テスト: BPELパートナをエミュレートするかわりに、テスト・ケース情報を使用して起動されるテストで構成されます。たとえば、ヒューマン・ワークフロー・ステップを含んだサブプロセスをコールするBPELプロセスがあるとします。2つのBPELプロセス間の相互作用をテストする必要はありますが、ヒューマン・ワークフローの承認ステップを手動で実行する必要はないとします。この場合は、テスト・ケース名を起動時にサブプロセスに渡すことで、メイン・プロセス用の複合テストを作成できます。このテスト・ケースでは、ヒューマン・ワークフロー・ステップをエミュレートできます。これは、ユーザー操作を必要としないことを意味します。
テスト・スイートは、1つ以上のテスト・ケースの論理的な集合で構成されます。各テスト・ケースには、テスト・インスタンスの実行時に実行される一連のコマンドが含まれます。テスト・スイートを実行することをテスト実行と呼びます。各テストは単一のBPELインスタンスに対応します。
エミュレーションにより、BPELプロセスが実行中に相互作用するWebサービス・パートナの動作をシミュレートできます。パートナ・リンクを起動するかわりに、レスポンスを指定できます。
コード・カバレッジは、実行されたテストの完全性を計算するための方法を提供します。完全性は、BPELプロセス内で定義された単純アクティビティの数に対する、1回以上実行された単純アクティビティの割合として計算されます。単純アクティビティは、invoke、receive、replyおよびassignなど、構造化されていないアクティビティです。
この項では、テスト・ケースを構成するテスト・コンポーネントについて説明します。例としてPriceFinderデモンストレーションを使用します。これらのテストを作成してプロセスにインポートする方法については後述します。
この項の内容は次のとおりです。
関連項目:
|
最初に、プロセスの操作を定義します。次のセクションでは、PriceFinderプロセスを開始するinitiate
の操作が定義されています。また、開始ペイロードも定義されています。
<BPELTest processName="PriceFinderWithTests" xmlns="http://xmlns.oracle.com/bpel/instancedriver"> <initiate operation="initiate"> <inboundMessage> <part name="payload"> <content> <PriceProviderProcessRequest xmlns="http://xmlns.oracle.com/PriceProvider"> <manufacturer xmlns="http://xmlns.oracle.com/PriceProvider">Oracle</manufacturer> <ItemName xmlns="http://xmlns.oracle.com/PriceProvider">BPEL PM</ItemName> <customerLocation xmlns="http://xmlns.oracle.com/PriceProvider">94065</customerLocation> </PriceProviderProcessRequest> </content> </part> </inboundMessage> </initiate> . . . . . .
エミュレーションを作成して、BPELプロセスがWebサービス・パートナから受け取るメッセージ・データをシミュレートします。PriceFinderは、次の2つの価格設定サービスを起動します。
FlakyPriceProvider
FreeShippingPriceProvider
次のテスト・コードは、Oracle BPEL Process Managerに対して、最初にFreeShippingPriceProvider
サービスのアウトバウンドの起動をスキップしてから、レスポンスの受信をエミュレートするように指示しています。
<BPELTest processName=LoanFlow" processRevision="1.0" xmlns="http://xmlns.oracle.com/bpel/instancedriver" . . . . . . <!-- ***************************************** Skip outbound invoke ***************************************** --> <activityDriver name="FreeShippingInvoke"> <emulate/> </activityDriver> <!-- ***************************************** Emulate the FreeShippingPriceProvider Service ***************************************** --> <activityDriver name="FreeShippingReceive" firstIteration="1" lastIteration="1"> <emulate duration="PT"> <inboundMessage> <part name="payload"> <content> <PriceProviderProcessResponse xmlns="http://xmlns.oracle.com/PriceProvider"> <itemPrice>70</itemPrice> <shippingCost>0</shippingCost> <deliveryTime>P3D</deliveryTime> </PriceProviderProcessResponse> </content> </part> </inboundMessage> </emulate> </activityDriver> . . . . . .
最初のテストでは、emulate要素は空になっています。これは、このアクティビティが一方向のinvokeでありスキップされるためです。第2のテストでは、receiveアクティビティがエミュレートされます。これは、インバウンド・メッセージを指定する必要があることを意味します。
アサーションを作成して、BPELプロセス実行中の特定時点で変数またはXML文書全体を検証します。
<BPELTest processName=LoanFlow" processRevision="1.0" . . . . . . <activityDriver name="choosePrice"> <assertValue variableName="outputVariable" partName="payload" comparisonMethod="number" fatal="true" patternMatch="false"> <message>The item price is incorrect!</message> <actualPath>/ns2:PriceProviderProcessResponse/ns2:itemPrice</actualPath> <expected>65</expected> </assertValue> . . . . . .
このテストでは、Oracle BPEL Process Managerに対して、choosePrice
アクティビティの完了後にoutputVariable
変数内の品目価格コンテンツが指定のコンテンツと一致することを確認するように指示しています。
注意: テスト・ケース・コンテンツは、Oracle BPEL Controlで監査証跡から作成することもできます。 |
通常、テストの大部分は様々なテスト・ケース間で同一です。テスト・ファイルの大きいセクションを複製しなくてもよいように、テストに他のテストを含め、特定のテストを選択的に上書きして様々なテスト・ケースを作成できます。これをベースライン・テストと呼びます。ベースライン・テスト自体は実行されず、他のテストに含めるためにのみ存在します。
ベースライン・テストをテスト・ケースに含めると、ベースライン・テストの内容がすべてテスト・ケースに含まれることになります。ベースライン・ファイル内の特定のアクションが不要な場合は、テスト・ケース内で上書きできます。
たとえば、「プロセスの開始」に示したプロセスの操作およびペイロード情報をbaseline.xml
という別のファイルに定義できます。ベースライン・テストは、Oracle JDeveloperでテスト・スイートのincludes
ディレクトリに格納する必要があります。
メイン・テスト・ケース・ファイルでは、このファイルを次のようにコールします。
<BPELTest processName="PriceFinderWithTests"
xmlns="http://xmlns.oracle.com/bpel/instancedriver"
<include>baseline.xml</include>
. . .
. . .
最初にテスト・スイートを作成してから、テスト・ケースを作成またはインポートします。テスト・スイートにテスト・ケースを追加するには複数の方法があります。
テスト・ケースをテスト・スイートにインポートします。これらのテスト・ファイルを手動で作成する方法と、Oracle BPEL Controlからの監査証跡の出力を介して作成する方法があります。
Oracle JDeveloperを使用して新規テスト・ケースを作成できます。
この項の内容は次のとおりです。
この項では、Oracle JDeveloperでBPELプロセスのテスト・スイートを作成する方法について説明します。
アプリケーション・ナビゲータで、テスト・スイートを作成するBPELプロセスを開きます。
これにより、「インテグレーション・コンテンツ」の下に「テスト・スイート」フォルダが表示されます。
「テスト・スイート」を右クリックし、「テスト・スイートの作成」を選択します。
テスト・スイート名(logicTest
など)を入力します。
「OK」をクリックします。
テスト・スイートがアプリケーション・ナビゲータの「テスト・スイート」フォルダの下に作成されます。
次のオペレーティング・システム・ディレクトリも作成されます。
JDev_Oracle_Home¥jdev¥mywork¥application_name¥ process_name¥bpel¥testsuites¥test_suite_name
さらにテスト・ファイルを追加できるように、test_suite_name
: includes
およびmessages
にも2つのサブディレクトリが作成されます。これらのサブディレクトリは、それぞれ「テスト・スイートの編集」ウィンドウの「含む」タブと「メッセージ・インスタンス・ファイル」タブに表示されます。説明は、「Oracle JDeveloperでのテスト・ケースのインポート」の手順1を参照してください。
注意: 他のテスト・スイート内にはテスト・スイートを作成できません。ただし、テスト・スイートをサブディレクトリ単位で編成することはできます。 |
この項では、Oracle JDeveloperでテスト・ケースをテスト・スイートにインポートする方法について説明します。
「Oracle JDeveloperでのテスト・スイートの作成」の手順3で入力したテスト・スイート名を右クリックし、「テスト・スイートの編集」を選択します。
「テスト・スイートの編集」ウィンドウが表示されます。
テスト・ケースのコンテンツは、手動で作成する方法と、Oracle BPEL Controlからの監査証跡の出力を介して作成する方法があります。作成したファイルをOracle JDeveloperにインポートします。アプリケーション・ナビゲータでテスト・ケースを右クリックして「XMLの検証」を選択すると、そのテスト・ケースを検証できます。
このウィンドウは、テスト・ケースのインポートに使用する次のタブで構成されています。
タブ | 説明 |
---|---|
一般 | このタブでは、テスト・スイートにテスト・ケースを追加できます。
テスト・ファイルを追加するには「追加」をクリックします。これらのファイルは次のディレクトリに追加されます。 JDev_Oracle_Home¥jdev¥mywork¥application_name¥ process_name¥bpel¥testsuites¥test_suite_name このテスト・ファイルをベースライン・テストとして選択することもできます。ベースライン・テストは、他のユーザーがインポートして使用できる汎用テストです。これらのファイルを使用すると、共通するテスト・アクションを除外できるため、複数のファイルで反復する必要がなくなります。 |
含む | このタブでは、ベースライン(含める)・テスト・ケースを追加できます。
ベースライン・テスト・ファイルを追加するには「追加」をクリックします。これらのファイルは次のディレクトリに追加されます。 JDev_Oracle_Home¥jdev¥mywork¥application_name¥ process_name¥bpel¥testsuites¥test_suite_name¥includes ベースライン・ファイルは、それ自体は実行されない汎用テストで構成されます。これらのテストは他のユーザーによりインポートされ、コールされます。 ベースライン・テストをテスト・ケースに含めると、ベースライン・テストの内容がすべてテスト・ケースに含まれることになります。ベースライン内の特定のアクションが不要な場合は、テスト・ケース内で上書きできます。 |
メッセージ・インスタンス・ファイル | このタブでは、エミュレートされるメッセージ・インスタンスのテスト・ケースを追加できます。
メッセージ・インスタンス・テスト・ファイルを追加するには「追加」をクリックします。これらのファイルは次のディレクトリに追加されます。 JDev_Oracle_Home¥jdev¥mywork¥application_name¥ process_name¥bpel¥testsuites¥test_suite_name¥messages メッセージ・インスタンス・ファイルを使用すると、Webサービス・パートナから戻されたメッセージ・データをシミュレートできます。受信したメッセージ・データをこのXMLファイルに手動で入力するか、Oracle BPEL Controlの監査証跡出力からコピーできます。 メッセージ・インスタンス・ファイルをインポートすると、テスト・ファイルのサイズを縮小して信頼性を向上させることができます。 |
テスト・ケースのXMLソースを表示するには、アプリケーション・ナビゲータでファイルを選択して「ソース」をクリックします。
このファイルを必要に応じて編集します。
テスト・スイート内に空のテスト・ケースを作成できます。
「Oracle JDeveloperでのテスト・スイートの作成」の手順3で入力したテスト・スイート名を右クリックし、「BPELテストの作成」を選択します。
次の詳細を入力します。
フィールド | 値 |
---|---|
名前 | テスト・ケース名を入力します。 |
テスト・スイート | このテスト・ファイルを含めるテスト・スイートを選択します。 |
ベースライン・テストとして追加 | これをベースライン・テスト・ケースにする場合は、このチェック・ボックスを選択します。 |
「OK」をクリックします。
このファイルをアプリケーション・ナビゲータで選択して「ソース」をクリックします。
ファイルを編集し、必要なテスト詳細をすべて含めます。
テスト・ケースは、エミュレーション、アサーションおよび外部コールで構成されます。これらのアクションをOracle JDeveloperのテスト・モードでテスト・ケースに追加できます。
アプリケーション・ナビゲータの「テスト・スイート」フォルダの下で、テスト・ケースをダブルクリックします。
Oracle JDeveloperで、BPELプロセスがリフレッシュされてテスト・モードで表示されます。このモードでは、テスト情報を定義できます。このノードでは、他の変更(アクティビティのプロパティ・ウィンドウの編集など)は実行できません。
これらのアクションが定義されているアクティビティの場合は、右上隅に特別なアイコンが表示されます。
アクティビティを右クリックして、実行できるテスト・アクションのリストを表示します。
次のメニュー・オプションから1つ選択し、対応する項で詳細を確認してください。
メニュー・オプション | 参照先 |
---|---|
activity_typeメッセージのエミュレート | 「Oracle JDeveloperでのエミュレーションの作成」 |
アサート | 「Oracle JDeveloperでのアサーションの作成」 |
外部コール | 「Oracle JDeveloperでの外部コールの作成」 |
エミュレーションを作成して、BPELプロセスがWebサービス・パートナから受け取るメッセージ・データまたはフォルト・データ、あるいは両方のタイプのデータをシミュレートします。このウィンドウに表示されるフィールドは、このウィンドウの上部で選択したアクティビティ・タイプ(invokeまたはreceiveがサポート対象)およびラジオ・ボタンに基づきます。
注意:
|
このチェック・ボックスを選択すると、クライアントからのインバウンド・メッセージを送信し、Webサービス・パートナから戻されるシミュレート用メッセージ・データのタイプを選択できます。この機能は、receiveアクティビティと双方向のinvokeアクティビティに使用可能です。
次の詳細を入力します。
フィールド | 値 |
---|---|
操作 | このフィールドには、アクティビティの操作タイプ(invokeアクティビティのプロセス操作など)が自動的に入力されます。 |
メッセージ | このフィールドには、インバウンド・メッセージへのパスが自動的に入力されます。 |
パート | インバウンド・メッセージのパート(ペイロードなど)を選択します。 |
値
|
Webサービス・パートナから戻されるシミュレート済メッセージを作成します。
クリックすると、「値の入力」フィールドにメッセージ・データを入力できます。 懐中電灯アイコンをクリックすると、メッセージ・データをファイルからロードできます。 |
期間 | Webサービス・パートナからメッセージが配信されるまでの待機期間を入力します。このフィールドは、双方向のinvokeアクティビティの場合に表示されます。 |
このウィンドウにすべての情報が入力されている例を次に示します。
このチェック・ボックスを選択すると、クライアントからのインバウンド・システム・フォルトを送信できます。次に、Webサービス・パートナから戻されるシミュレート用フォルト・メッセージのタイプを選択します。これにより、プロセス内のフォルト処理機能をテストできます。この機能はinvokeアクティビティに使用可能です。
「フォルトのエミュレート」を選択します。
次の詳細を入力します。
フィールド | 値 |
---|---|
ネームスペースURI | フォルトには一意の修飾名(QName)が必要です。このアクティビティでは、フォルト名(必須)とフォルトの詳細情報を提供するデータの変数(オプション)を提供します。
懐中電灯アイコンをクリックして監視対象のフォルトを選択します。「ネームスペースURI」フィールドには、選択したフォルトに基づいてURLパスが自動的に入力されます。 |
ローカル・パート | 「ネームスペースURI」フィールドで選択したローカル・パートが表示されます。たとえば、フォルトNegativeCreditに関連付けられているWebサービス・パートナを選択すると、このフィールドに名前NegativeCreditが追加されます。 |
パート | フォルトを含むメッセージ・パート(ペイロードなど)を選択します。 |
値
|
Webサービス・パートナから戻されるシミュレート済フォルト・メッセージを作成します。
クリックすると、「値の入力」フィールドにメッセージ・データを入力できます。 懐中電灯アイコンをクリックすると、メッセージ・データをファイルからロードできます。 |
このウィンドウにすべての情報が入力されている例を次に示します。
注意: 一方向のinvokeの場合、エミュレートできるのはシステム・フォルトのみです。双方向のinvokeの場合は、システム・フォルトとユーザー定義ビジネス・フォルトの両方をエミュレートできます。 |
パートナがBPELプロセスの場合は、このパートナ用にテスト・ケースを渡して実行させることができます。これは、外部パートナではなくBPELプロセス間の相互作用をテストする必要がある場合に役立ちます。たとえば、メインBPELプロセスがサブプロセスをコールし、サブプロセスがメインBPELプロセスのテストからのヒューマン・ワークフローをコールするとします。サブプロセスをエミュレートするかわりに、ヒューマン・ワークフロー・サービスをエミュレートするサブプロセスのテスト・ケースを起動できます。これにより、ヒューマン・ワークフロー・サービスを起動せずにBPELプロセスの相互運用性をテストできます。このラジオ・ボタンの名前は、選択したアクティビティのタイプに基づきます。一方向のinvokeアクティビティの場合、ボタン名は「パートナ・テストのコール」です。双方向のinvokeアクティビティの場合、ボタン名は「BPELテストのコール」です。receiveアクティビティの場合、このラジオ・ボタンは無効です。
「パートナ・テストのコール」または「BPELテストのコール」を選択します。
実行するテスト・スイート内のテストの名前と相対位置を入力します。
このウィンドウにすべての情報が入力されている例を次に示します。
アサーションを実行して、変数データやプロセス・フローを検証します。変数データのアサーションでは、プロセスの実行時に変数内のテスト・データを検証できます。この検証では、変数またはXML文書から値が抽出され、予想される値と比較されます。プロセス・フローを検証するには、アクティビティが実行された回数をアサートできます。
「作成」をクリックしてテストのリストを表示します。
テストを選択し、対応する項で詳細を確認してください。
選択 | 参照先 |
---|---|
値のアサート | 「値のアサートの作成」 |
アクティビティ実行アサート | 「アクティビティ実行アサートの作成」 |
XMLのアサート | 「XMLのアサートの作成」 |
このテストでは、選択した文字列変数または数値変数の値を、予想される値と比較します。単純型(string、numberなど)に解決されるXPath式を指定する必要があります。
次の詳細を入力します。
このウィンドウにすべての情報が入力されている例を次に示します。
このテストでは、アクティビティが指定した回数だけ実行されます。これにより、アクティビティが適切な回数だけ実行されること(whileアクティビティが適切な回数だけ実行されることなど)を確認できます。
このアクティビティの実行回数を示す値を入力します。
このテストでは、XML文書全体の要素値が予想される要素値と比較されます。
次の詳細を入力します。
このウィンドウにすべての情報が入力されている例を次に示します。
外部コールは、テスト・ケースの実行中にユーザー・アクションを実行する拡張メソッドを提供します。コマンドにはJavaクラスの完全修飾名を指定します。テスト・ケースが外部コールの設定されているアクティビティに達すると、指定の引数を使用して指定のJavaクラスがコールされます。このクラスでは、com.oracle.services.bpel.test.ITestCallHandler
インタフェースを実装する必要があります。実行時には、このクラスがタスクの実行時にant
のクラスパスに存在する必要があります。テストをOracle BPEL Controlから実行する場合、コール・ハンドラはサポートされていません。
「作成」をクリックします。
「外部コール」ウィンドウが表示されます。
「作成」をクリックし、表でデフォルトの引数名と値を作成します。
「名前」および「値」列でカーソルをデフォルト値に置き、デフォルト値を削除して適切な詳細を入力します。
このコマンドをこのアクティビティの前に実行する場合は、「アクティビティの前に実行」チェック・ボックスを選択します。それ以外の場合、コールはアクティビティの後に実行されます。
このウィンドウにすべての情報が入力されている例を次に示します。
「OK」をクリックします。
コールの実行時に、指定した引数がJavaクラスに渡されます。
テスト・ケースのコンテンツは、Oracle BPEL Controlからの監査証跡の出力を介して作成できます。この方法には次の2つのメリットがあります。
作業を開始するときにベースライン・テストをすばやく作成できます。
開発中に明らかになったエラーのシナリオをテスト・ケースに切り替えることができます。Bugを示すユースケースを取得し、特定のデータ・アサーションを追加し、テストをテスト・スイートに追加して定期的にリグレッション・テストとして実行します。これにより、将来はBugが再発しないことを確認できます。
「スタート」→「すべてのプログラム」→「Oracle - Oracle_Home」→「Oracle BPEL Process Manager」→「BPEL Control」を選択して、Oracle BPEL Controlにログインします。
oc4jadmin
/password
としてログインします。
password
は、インストール時に入力したoc4jadmin
のパスワードです。
「インスタンス」をクリックします。
テスト・ファイルのコンテンツの作成元となるインスタンスを選択します。
「テスト」をクリックします。
インスタンスが完了していない場合、またはテストをテスト・ケースとして開始した場合は、このインスタンスをテスト・ケースとして保存できません。
次のいずれかの方法を選択します。
コンテンツをテスト・ファイルに保存する場合は、「ユニット・テストとして保存(.xml)」をクリックします。この場合は、すべてのパートナがエミュレートされます。
複数のテストのコンテンツを1つのzipファイルに保存する場合は、「複合テストとして保存(.zip)」をクリックします。この場合は、他のパートナ(ヒューマン・ワークフローなど)のエミュレート中に、テスト・ケース情報を使用してBPELパートナがコールされます。テストをOracle JDeveloperにインポートする前に、このファイルを解凍する必要があります。複合テストを使用すると、テストで他のテストをコールできることに注意してください。複合テスト・ファイル名を変更する場合は、このファイルをコールできるテスト・ファイルを編集して、適切な名前を含めてください。
ファイルをXMLとしてディレクトリに保存します。
Oracle JDeveloperに戻ります。
ファイルを複合テスト・ファイルとして保存した場合は、そのファイルを解凍します。
「テスト・スイート」フォルダを右クリックして「BPELテストのインポート」を選択します。
テストのインポート先としてBPELプロセス内のテスト・スイートを選択します。
「インポートしたテストURL」フィールドの懐中電灯アイコンをクリックします。
手順7で保存したファイルを選択して「開く」をクリックします。
「OK」をクリックします。
「アプリケーション・ナビゲータ」で選択したテスト・スイートにテストが追加されます。
テスト・スイートを右クリックして「テスト・スイートの編集」を選択します。
テストとコンテンツが「テスト・スイートの編集」ウィンドウに表示されます。
注意: Oracle BPEL Controlから生成したテスト・ケースには、アサーションは作成されません。 |
テスト・ケースのテスト・スイートを作成した後、そのテストをOracle BPEL Serverにデプロイします。次の2つのデプロイ方法があります。
テスト・スイートを最初に作成するときに、Oracle JDeveloperを使用して手動でデプロイできます。
Oracle JDeveloperからテスト・スイートをデプロイする手順は、次のとおりです。
最初に、テスト・スイートに関連するBPELプロセスをデプロイします。プロセスとテスト・スイートは個別にデプロイする必要があり、まとめてデプロイすることはできません。
「テスト・スイート」フォルダを右クリックして「BPELテスト・デプロイヤ」を選択します。
「BPELテスト・デプロイヤ」ウィンドウが表示されます。
デプロイするテスト・スイートのチェック・ボックスを選択します。
「test_suite_name - デプロイ」→「テスト」を順番に開き、デプロイする特定のテスト・ケースを選択します。
テストのデプロイ先サーバーを選択します。
「デプロイ」をクリックし、テスト・スイートのうち選択したテスト・ケースをコンパイルし、検証してデプロイします。
「ステータス」セクションにデプロイ・ステータス・メッセージが表示されます。
ant
タスクを使用してテスト・スイートをデプロイできます。このタスクは、自動化されたテスト環境で役立ちます。
注意: プロセスのテストをデプロイする前に、BPELプロセスをデプロイする必要があります。 |
ant
タスクからテスト・スイートをデプロイする手順は、次のとおりです。
build.xml
ファイルで、テスト・スイートのデプロイに使用するant
タスクのパラメータを表示します。このファイルは、BPELプロセスの「リソース」フォルダにあります。
<target name="test" depends="deployTestSuites, bpelTest, report" /> <target name="prepareTests"> <echo> -------------------------------------------------------------- | Preparing BPEL tests for deployment -------------------------------------------------------------- </echo> <delete file="${process.dir}/output/bpeltest.zip" quiet="true"/> <zip basedir="${process.dir}/bpel/testsuites" filesonly="true" excludes="test_suites.xml, **/excludes/*" destfile="${process.dir}/output/bpeltest.zip"/> </target> <target name="deployTestSuites" depends="prepareTests"> <echo> -------------------------------------------------------------- | Deploying bpel tests ${process.name} on ${http.hostname}, port ${http.port} -------------------------------------------------------------- </echo> <deployTestSuites user="${admin.user}" password="${admin.password}" hostname="${http.hostname}" httpport="${http.port}" domain="${domain}" process="${process.name}" rev="${rev}" testfile="${process.dir}/output/bpeltest.zip"/> </target>
このプロセスのパラメータ値を変更する場合は、build.xml
ファイルと同じ「リソース」フォルダにあるbuild.properties
ファイル内で該当するパラメータを編集してコメント解除します。これにより変更されるのは、このプロセスの値のみであることに注意してください。
#domain=default #rev=1.0 #user=oc4jadmin #hostname=localhost #http.hostname=localhost #http.port=9700 #j2ee.hostname=localhost #rmi.port=23791 #oc4jinstancename=home #asinstancename= #opmn.requestport=6003 #platform=ias_10g #platform=oc4j_10g bpeltest.callHandler= bpel.context.properties=${bpel.home}/samples/tutorials/102.InvokingProcesses/rmi/context.properties
「スタート」→「すべてのプログラム」→「Oracle - Oracle_Home」→「Oracle BPEL Process Manager」→「Developer Prompt」を選択して、開発者プロンプトを開きます。
適切なディレクトリに移動し、ant
を実行してテスト・スイートをデプロイします。
ant test
test
は、build.xml
ファイルに定義されているターゲット名です。
デプロイ後に、BPELプロセス・インスタンスでテスト・スイートのテスト・ケースを実行して、XML文書レポートを表示できます。デフォルトでは、レポート結果はJUnit XMLテスト結果として書式設定されます。次の2つの実行方法があります。
注意: テスト結果は、バイナリ・ラージ・オブジェクト(BLOB)として保存されます。 |
Oracle BPEL Controlを使用すると、テストを手動で実行してレポート結果を生成できます。
Oracle BPEL Controlからテスト・スイートを実行してレポート結果を表示する手順は、次のとおりです。
「スタート」→「すべてのプログラム」→「Oracle - Oracle_Home」→「Oracle BPEL Process Manager」→「BPEL Control」を選択して、Oracle BPEL Controlにログインします。
oc4jadmin
/password
としてログインします。
password
は、oc4jadmin
のパスワードです。
「BPELプロセス」をクリックします。
テストするインスタンスをクリックします。
「テスト・スイート」をクリックします。
このインスタンスでテスト・スイートをデプロイした場合は、次のウィンドウが表示されます。
このインスタンスでテスト・スイートをデプロイしていない場合、このウィンドウは表示されません。最初にテスト・スイートをデプロイする必要があります。
テスト・スイートのチェック・ボックスを選択します(「メイン」など)。
テスト・スイート内のテストのチェック・ボックスが表示されます。
実行するXMLテストを選択します。
また、「テストのアンデプロイ」をクリックするとテスト・スイートをアンデプロイできます。
「テストの実行」をクリックします。
テストが完了すると、ウィンドウが更新されて次の3つのセクションに結果が表示されます。
プロセス名、テスト実行日、実行されたスイートおよびワーカー数などのテスト詳細が表示されます。ワーカーは、1つ以上のテスト・ケースを実行できる同時スレッド数です。ワーカー数により、同時に実行できるテスト・ケースの数が制御されます。
サマリー・レポートには、テストの結果とコード・カバレッジが表示されます。
すべてのテストと失敗したアサーションの詳細リストが表示されます。「失敗のみ表示」チェック・ボックスに注意してください。このチェック・ボックスを選択すると、成功したテストの詳細情報が非表示になります。 デフォルトでは、このチェック・ボックスが選択されます。
Oracle BPEL Controlの右上隅にある次のリンクを1つクリックして、特定のコード・カバレッジの詳細を表示します。
実行されたアクティビティは緑の枠で、実行されなかったアクティビティは赤い枠で示されます。
「インスタンス・フローの表示」をクリックしてさらに詳細を表示するか、BPEL Controlに戻るをクリックします。
ant
タスクを使用してテスト・スイートを実行し、レポート結果を生成できます。このタスクは、自動化されたテスト環境で役立ちます。デフォルトでは、テスト結果はJUnit XMLテスト結果として書式設定されます。この書式には次のメリットがあります。
junitreport
タスクを使用してフレームベースのレポートを生成できます。
BPELテストの結果を他のJUnitの結果と統合できます(JUnitをJavaコンポーネントのテストに使用する場合)。
JUnitレポート書式も使用する他のサード・パーティのテスト・スイート・フレームワークと統合できます。
ant
タスクからテストを実行してレポートを作成する手順は、次のとおりです。
build.xml
ファイルで、テスト・ケースの実行とレポートの生成に使用するant
タスクのパラメータを表示します。このファイルは、BPELプロセスの「リソース」フォルダにあります。
<!-- "bpeltest" target runs deployed testsuites of a BPEL process --> <target name="bpelTest"> <echo> -------------------------------------------------------------- Executing process ${process.name}(v.${rev}): minCoverage=${bpeltest.minCoverage}, timeout=${bpeltest.timeout} sec, numWorkers=${bpeltest.numWorkers} -------------------------------------------------------------- </echo> <delete dir="${bpeltest.results.dir}/xml/${process.name}" quiet="true"/> <bpeltest user="${admin.user}" password="${admin.password}" hostname="${http.hostname}" httpport="${http.port}" domain="${domain}" process="${process.name}" rev="${rev}" name="${process.name}Tests" timeout="${bpeltest.timeout}" numWorkers="${bpeltest.numWorkers}" minCoverage="${bpeltest.minCoverage}" callHandler="${bpeltest.callHandler}" context="${bpel.context.properties}" resultsDir="${bpeltest.results.dir}/xml/${process.name}" resultsPropertyFile="${bpeltest.results.dir}/${process.name}.properties"/> <property file="${bpeltest.results.dir}/${process.name}.properties"/> <echo> -------------------------------------------------------------- Executed ${test.total.count} test(s) for ${process.name} (v.${rev}) with ${test.failure.count} failure(s) -------------------------------------------------------------- </echo> </target> . . . . . .
<!-- "report" target creates JUnitReport for testsuites run by bpeltest. --> <target name="report"> <echo> -------------------------------------------------------------- Creating BPELTest JUnitReport at ${bpeltest.results.dir}${file.separator}html${file.separator}index.html -------------------------------------------------------------- </echo> <mkdir dir="${bpeltest.results.dir}/xml"/> <junitreport todir="${bpeltest.results.dir}/xml"> <fileset dir="${bpeltest.results.dir}/xml"> <include name="*/TEST-*.xml" /> <include name="*/BPEL-*.xml" /> </fileset> <report format="frames" todir="${bpeltest.results.dir}/html" /> </junitreport> </target> <!-- If pre-build.xml and post-build.xml exists, call its default target --> <condition property="exists.pre-build.xml"> <available file="${process.dir}/pre-build.xml"/> </condition> <target name="pre-build" if="exists.pre-build.xml"> <ant antfile="${process.dir}/pre-build.xml" inheritAll="false"/> </target> <condition property="exists.post-build.xml"> <available file="${process.dir}/post-build.xml"/> </condition> <target name="post-build" if="exists.post-build.xml"> <ant antfile="${process.dir}/post-build.xml" inheritAll="false"/> </target> <!-- Convenience targets --> <target name="deploy_test" depends="deploy, test"/> </project>
このプロセスのパラメータ値を変更する場合は、詳細を手順2で確認してください。
「スタート」→「すべてのプログラム」→「Oracle - Oracle_Home」→「Oracle BPEL Process Manager」→「Developer Prompt」を選択して、開発者プロンプトを開きます。
適切なディレクトリに移動し、ant
を起動してテスト・スイートを実行し、レポートを作成します。
ant bpelTest report
bpelTest
およびreportは、build.xml
ファイルに定義されているターゲット名です。
次の例に、ant
で生成されたレポートを示します。
JUnitが使用されているため、レポートには複数のJava構成メンバー(パッケージやクラスなど)が含まれています。Oracle BPEL Process Managerの場合、デフォルト・パッケージはbpel.
domain
.
process-revision
に解決されますが、これはカスタマイズできます。「クラス」はテスト・スイート名にマップされます。コード・カバレッジ・スイートに注意してください。これは、ant
タスクで最小コード・カバレッジを指定した場合に追加されます。メイン・ペインには、テスト結果のサマリーが表示されます。このレポートに複数のプロセスからの結果をパッケージすると、「パッケージ」表のエントリ数が増えます。
パッケージ名(BPELプロセス)をクリックしてレポート結果を表示します。
この項では、拡張テスト・スイート設計機能について説明します。この機能の一部のサンプルは、SOA_Oracle_Home
¥bpel¥samples¥references
サブディレクトリにあります。
動的コンテンツを含むメッセージが必要な場合があります。たとえば、次のようになります。
現在の日付と時刻を含むメッセージをエミュレートする場合
一意の識別子が必要な場合
これをサポートするには、エミュレートしたメッセージにメッセージ更新を追加します。メッセージ更新は、次の2つの主要情報で構成されます。
文字列値を生成するXPath関数
更新するメッセージ部分を指定するXPath式
たとえば、次のメッセージをエミュレートする必要があるとします。
<dateTimeMessage xmlns="http://xmlns.oracle.com/SomeProcess"> <theDateTime>current date time</theDateTime> </dateTimeMessage>
Oracle JDeveloperで次のコンテンツを指定してエミュレーションを追加します。
<dateTimeMessage xmlns="http://xmlns.oracle.com/SomeProcess"> <theDateTime/> </dateTimeMessage>
メッセージ更新に対するGUIサポートはないため、ソース・ビューを切り替えて、次のように生成されたエミュレーションを表示します。
<activityDriver name="someActivity"> <emulate> <inboundMessage> <part name="payload"> <content> <dateTimeMessage xmlns="http://xmlns.oracle.com/SomeProcess"> <theDateTime/> </dateTimeMessage> </content> </part> </inboundMessage> </emulate> </activityDriver>
メッセージ更新をinboundMessage
に追加して実行時に日時を設定します。
<activityDriver name="Invoke_2"> <emulate duration="PT"> <inboundMessage> <part name="payload"> <content> <dateTimeMessage xmlns="http://xmlns.oracle.com/SomeProcess"> <theDateTime/> </dateTimeMessage> </content> <update> <location> /client:dateTimeMessage/client:theDateTime </location> <XPathExpression> xp20:current-dateTime() </XPathExpression> </update> </part> </inboundMessage> </emulate>
update
要素に空のtheDateTime
要素に対するXPathの位置が含まれていることに注意してください。XPath式の要素には、現在の日時を生成するXPath関数が含まれています。テストを実行すると、このXPath関数がコールされ、エミュレートされたメッセージが現在の日時で更新されます。
注意: XPath関数とXPath問合せで使用されるネームスペース接頭辞は、テスト・ケースのXML文書で正しく定義されている必要があります。 |
関連項目: 次のメッセージ更新サンプルを参照してください。SOA_Oracle_Home¥bpel¥samples¥references¥BPELTest¥
Emulations¥bpel¥testsuites¥main¥demoMessageUpdate.xml
|
非同期イベントをエミュレートできます。この種のイベントは、BPELプロセスのonMessageまたはonAlarmブランチで取得されます。現在、イベントのエミュレーションに対する設計時サポートはありません。
関連項目: これらのテスト・ケースを手動で作成する方法は、次のサンプルを参照してください。
|
BPELの外部へとテスト・ケースを拡張できます。たとえば、外部システムを変更するBPELプロセスがあるとします。BPELプロセスのインスタンスを起動し、外部システムが適切に更新されたことを検証するAPIをコールするように、テスト・ケースを記述できます。BPELテスト・フレームワークでは、これに対するサポートが限定的であるため、データを検証するカスタムXPath関数を記述し、これらの関数をアサーションに使用できます。これに対する設計時サポートはありません。この作業を手動で行うには、アサーションを次のように記述します。
<activityDriver name="Assign_1"> <assertValue fatal="true"> <message>exact text comparison</message> <actualPath>ns:extractExternalValue()</actualPath> <expected>theInput</expected> </assertValue>
太字のセクションでは、通常のXPath問合せのかわりにXPath関数が使用されていることに注意してください。この関数を実装して外部システムから値を抽出できます。BPELテスト・フレームワークでは、XPath関数の戻り値がtheInput
と比較されます。
ant
タスクでは、デフォルトでJUnitスタイルのXML結果が生成されます。これらの結果をjunitreport
タスクに渡して、フレームベースのHTMLレポートを生成できます。結果を別の書式で表示する場合は、bpelTest
antタスクのxsl
パラメータを、作成したXSLTスタイルシートを指すURLまたはファイル・パスに設定します。テストの実行後、xsl
属性で指定されているスタイルシートを使用して、結果のXML文書(SOA_Oracle_Home
¥bpel¥system¥xmllib¥BPELTestResult.xsd
に定義されているXMLスキーマで指定)に対してXSLトランスフォーメーションが実行されます。
次の例に、URLからアクセス可能なXSLスタイルシートを使用するant
タスクを示します。
<bpelTest ... xsl="http://mycompany.com/myStyleSheet.xsl".../>
次の例に、ファイル・システムからアクセス可能なXSLスタイルシートを使用するant
タスクを示します。
<bpelTest ... xsl="C:¥xslDir¥myStyleSheet.xsd" .../>
次のデータベース・ビューを使用すると、テスト結果とテスト定義の詳細を問合せできます。
このビューには、表20-1のように、前に実行したテスト・ケースの情報が表示されます。
表20-1 admin_list_td
名前 | NULL可 | タイプ | 説明 |
---|---|---|---|
CIKEY
|
× | VARCHAR2(100)
|
BPELプロセス。 |
CI_DOMAIN_REF
|
× | SMALLINT(5)
|
BPELプロセスのドメイン。 |
TEST_RUN_NAME
|
× | VARCHAR2(100)
|
テスト実行名。この名前は、多数のテスト実行間で変わらないことがあります。テスト実行をクライアント・コードから開始しなければ、この値は自動的に生成されます。 |
TEST_RUN_ID
|
× | VARCHAR2(100)
|
テスト実行ID。このIDはテスト実行間で一意であることが必要です。テスト実行をクライアント・コードから開始しなければ、この値は自動的に生成されます。 |
TEST_SUITE
|
× | VARCHAR2(100)
|
このテスト・ケースのテスト・スイート。 |
TEST_LOCATION
|
× | VARCHAR2(100)
|
テスト・スイート内のテスト・ケースの位置。通常はテスト・ケース・ファイル名です。 |
TEST_STATUS
|
× | VARCHAR2(50)
|
このテスト・ケースのステータス。合格、失敗または実行中のいずれかです。 |
TEST_RESULT
|
× | BLOB
|
テスト・ケースのXML結果。この列はDOMパーサーを使用して読み取ることができます。 |
たとえば、次のようになります。
SQL> select cikey, ci_domain_ref, test_run_name from admin_list_td; CIKEY | CI_DOMAIN_REF | TEST_RUN_NAME ------+---------------+-------------------------------------------- 4 | 0 | ca8f3d34e7fa93f2:53855ec5:10c02daf400:-7b46 SQL> select test_run_id from admin_list_td; TEST_RUN_ID ------------------------------------------- ca8f3d34e7fa93f2:53855ec5:10c02daf400:-7b46 SQL> select test_location, test_suite, test_status, test_result from admin_list_td; TEST_LOCATION | TEST_SUITE | TEST_STATUS | TEST_RESULT ---------------------------+------------+-------------+------------ testShippingConsidered.xml | logicSuite | failed | <?xml vers
このビューには、表20-2のように、デプロイ済のテスト・ケースの情報が表示されます。
表20-2 admin_list_tdef
名前 | NULL可 | タイプ | 説明 |
---|---|---|---|
PROCESS_ID
|
× | VARCHAR2(100)
|
BPELプロセス。 |
REVISION_TAG
|
× | VARCHAR2(50) | BPELプロセスのリビジョン。 |
DOMAIN_REF
|
× | SMALLINT(5)
|
BPELプロセスのドメイン。 |
TEST_SUITE
|
× | VARCHAR2(100)
|
このテスト・ケースのテスト・スイート。 |
LOCATION
|
× | VARCHAR2(100)
|
テスト・スイート内のテスト・ケースの位置。通常はテスト・ケース・ファイル名です。 |
TYPE
|
× | VARCHAR2(10)
|
このファイルのタイプ。
|
CREATION_DATE
|
× | DATE | このテストのデプロイ日。 |
DEFINITION
|
× | BLOB
|
テスト・ケースのXML定義。この列はDOMパーサーを使用して読み取ることができます。 |
SQL> select process_id, revision_tag, domain_ref, test_suite from admin_list_tdef; PROCESS_ID | REVISION_TAG | DOMAIN_REF | TEST_SUITE ---------------------+--------------+------------+----------- PriceFinderWithTests | 1.0 | 0 | logicSuite PriceFinderWithTests | 1.0 | 0 | logicSuite Emulations | 1.0 | 0 | main Emulations | 1.0 | 0 | main Emulations | 1.0 | 0 | main Emulations | 1.0 | 0 | main Emulations | 1.0 | 0 | main Emulations | 1.0 | 0 | main Emulations | 1.0 | 0 | main Emulations | 1.0 | 0 | main Emulations | 1.0 | 0 | main SQL> select location, type, creation_date, definition from admin_list_tdef; LOCATION | TYPE | CREATION_DATE | DEFINITION -----------------------------+---------+----------------------------+----------- baseline.xml | include | 2006-06-25 10:58:16.260000 | <?xml vers testShippingConsidered.xml | test | 2006-06-25 10:58:16.260000 | <?xml vers baseline.xml | include | 2006-06-27 16:09:08.025000 | <?xml vers emulated.xml | message | 2006-06-27 16:09:08.025000 | <?xml vers demoAsyncEmulation.xml | test | 2006-06-27 16:09:08.025000 | <?xml vers demoBusinessFault.xml | test | 2006-06-27 16:09:08.025000 | <?xml vers demoEmulationFromMessage.xml | test | 2006-06-27 16:09:08.025000 | <?xml vers demoMessageUpdate.xml | test | 2006-06-27 16:09:08.025000 | <?xml vers demoPartnerTest.xml | test | 2006-06-27 16:09:08.025000 | <?xml vers demoSyncEmulation.xml | test | 2006-06-27 16:09:08.025000 | <?xml vers demoSystemFault.xml | test | 2006-06-27 16:09:08.025000 | <?xml vers
次のXMLスキーマは、SOA_Oracle_Home
¥bpel¥system¥xmllib
ディレクトリにあります。
InstanceDriver.xsd
: テスト・ケース・スキーマ
BPELTestResult.xsd
: テスト結果スキーマ