...
Table of Contents | ||
---|---|---|
|
拡張機能とは
SOAtest/Virtualize の拡張機能を使用すると、カスタム スクリプト (Java、JavaScript、Oracle Nashorn、Groovy、Jython を利用できます) によって任意の機能を実行し、SOAtest での作業に役立てることができます。また、拡張機能はJSR 223 「Scripting for the Java Platform」仕様をサポートする他のスクリプト エンジンもサポートします。そのため、アプリケーション固有の言語を習得することなく、ユーザー固有のニーズに合わせて SOAtest/Virtualize をカスタマイズできます。
SOAtest を使用している場合、スクリプトを使用して、RuleWizard で作成するルールをカスタマイズすることもできます。詳細については、『RuleWizard ユーザーズガイド』を参照してください。
スクリプトを使用するための環境設定
Jython スクリプトを使用する場合、[設定] パネルの [スクリプト] タブで jython.home および jython.path 変数を指定しなければならない場合があります。この 2 つの変数は、Jython モジュールを探すために使用されるので、Jython モジュールをインポートしていない Jython コードは、これらの変数を設定せずに使用できます。jython.home には Jython のインストールディレクトリを指定します。jython.path は、jython.home/Lib ディレクトリ以外の場所にあるモジュールのパスを追加するために使用されます。jython.path には複数のパスを指定できますが、jython.home には 1 つのディレクトリだけを指定します。jython.home および jython.path 変数を設定した場合、変更を反映するには、SOAtest または Virtualize を再起動する必要があります。
スクリプト機能で Java を使用し、変更された Java ファイルを Virtualize で再コンパイルするには、「Virtualize での Eclipse Java プロジェクトの使用」を参照して環境設定方法の詳細を確認してください。
スクリプトの指定
SOAtest GUI のスクリプトのオプション画面でスクリプトを定義するには、次の操作を行います。
- Eclipse ワークスペース内の Java プロジェクトに Java クラスがある場合は、Java プロジェクトをクラスパスに追加します。
- [言語] ドロップダウンリストでスクリプトの言語を指定します。
- 大きなテキストフィールドに実装するスクリプトを定義します。
- Java メソッドの場合、[クラス] フィールドに適切なクラスを指定します。選択したクラスはクラスパスに追加されている必要があります。[クラスパスの変更] リンクをクリックし、表示される設定画面で追加できます。Java ファイルの修正やコンパイルの後にクラスをリロードする場合は、 [クラスのリロード] をクリックします。
- その他のスクリプトの場合は、既存のファイルをメソッドのソース コードとして使用するか、SOAtest または Virtualize 内でメソッドを作成できます。
- 既存のファイルを使用するには、[ファイル] ラジオ ボタンを選択し、[参照] ボタンをクリックします。ファイル選択ダイアログでファイルを選択して [OK] をクリックし、選択を確定します。
- SOAtest または Virtualize 内で新しくメソッドを作成するには、[テキスト] ラジオ ボタンを選択し、入力やカット&ペーストを行ってテキスト ウィンドウにコードを入力します。
- スクリプトが正しく実行可能であるかどうかを確認するには、スクリプトの指定方法に応じて [ファイル] または [テキスト] フィールドを右クリックし、ショートカット メニューの [評価] をクリックします。問題が見つかればレポートされます。
スクリプト テンプレートの使用
Jython または JavaScript でスクリプトを作成する場合、SOAtest または Virtualize 設定パネルのスクリプトのテンプレート フィールド (スクリプト ページ内) にスクリプトのテンプレートを指定できます。このフィールドに入力されたコードは、フィールドに対応する言語のインライン スクリプトのデフォルト コードとして使用されます。スクリプトのテンプレートは、デフォルト入力や共通グローバル変数の設定などに特に便利です。
スクリプト テンプレートは、Extension ツール、SOAP サービス、スクリプト SOAP 入力で使用されるスクリプトに適用されます。
SOAtest および Virtualize との連携
スクリプトと SOAtest または Virtualize を連携させる必要がある場合、SOAtest または Virtualize の拡張 API を使用します。たとえば SOAtest/Virtualize 拡張 API を使用すると、スクリプトの結果を SOAtest/Virtualize のメッセージ ウィンドウに送信したり、特定の SOAtest/Virtualize に特定の値を渡したりできます。
詳細については Virtualize 拡張 API ドキュメントを参照してください。拡張 API のドキュメントには、[Parasoft] > [ヘルプ] メニューからアクセスすることができます (『Parasoft Virtualize 拡張 API』というブックを探してください)。
必要な JAR ファイルに接続
拡張 API を使用する Java コードを作成していて、
...
- XPath を処理する場合、org.apache.xpath.XPathAPI も必要です。このクラスは xalan.jar にあります。
- ISO 8583 関連のスクリプト処理の場合、ISOMsg、BaseChannel.ISOChannel、ISOPackager などの org.jpos.iso.* クラスが必要になります。 これらのクラスは jpos.jar にあります。
コンテキスト クラスローダーの設定
Extension ツールは、クラスローダーで実行されます。JNDI などの特定のAPI は、コンテキスト クラスローダーに依存します。コード内で特定の API を呼び出す前にコンテキスト クラスローダーの設定が必要な場合があります。詳細については http://wiki.eclipse.org/Context_Class_Loader_Enhancements#Technical_Solution を参照してください。
スクリプトの変数
SOAtest および Virtualize のスクリプトで変数を宣言して使用できます。
...
変数の参照は次のように行います。${varName}
Jython 設定の構成
Jython のバージョン
SOAtest および Virtualize に付属している Jython 2.5.2 には、os モジュールなどの一部の標準 Jython ライブラリが含まれていません。そのようなモジュールを使用し、SOAtest または Virtualize でアクセスしたい場合、次のように外部の Jython を指すよう設定できます。
- 任意の場所に Jython をインストールします。この場所を
<Jython Install Directory>
で表します。 - SOAtest または Virtualize を開きます。
- [Parasoft] メニュー > [設定] を選択します。
- [スクリプト] を選択します。
- [Jython Home] フィールドに
<Jython Install Directory>
を入力します。 - SOAtest または Virtualize を再起動します。
Jython 構文の色分け
PyDev プラグイン (http://www.pydev.org/) を使用すると、Extension ツールで Jython の構文を色分け表示できます。PyDev プラグインを使用するには、コードの自動補完などの高度な機能のために構成された Jython インタープリターが必要です。詳細はhttp://www.pydev.org/manual_101_interpreter.html を参照してください。
スクリプトからデータソースへのアクセス
スクリプトからデータ ソースを使用するには、ツールの構成パネルの上部でデータ ソースを選択し、[データ ソースの使用] オプションをオンにします。
次の行のように、スクリプトの他のメソッド内でデータ ソースの値を変数 x に格納します。
x = context.getValue("Data Source Name", "Column Name")
スクリプトの詳細については、Extension framework API のマニュアルを参照してください。Extension framework API のドキュメントを参照するには、[Parasoft] メニューの [ヘルプ] をクリックし、『Parasoft SOAtest Extensibility API』というタイトルのブックを探します。
Info | ||
---|---|---|
| ||
たとえば、次の画像のようなテストがあるとします。 テーブル データ ソースの名前は Data Source Name です。図には表されていませんが、次のように構成されています。
スクリプトからこれらのいずれかのデータ ソースを使用するには、Extension ツールの構成パネルの上部でデータ ソースを選択し、[データ ソースの使用] オプションをオンにします。 注意SOAtest 6.1 より前の古いバージョンで作成されたファイルを開くと、Browser Data Bank Tool の列名が自動的に Extracted: xyz (xyz は指定された列名) という形式に変換されることに注意してください。これは、Extracted: xyz を参照する従来のスクリプトをサポートするためです。Browser Data Bank で列名を xyz または abc などに変更できます。 スクリプトの詳細については、Extension framework API のマニュアルを参照してください。[Parasoft] メニューの [ヘルプ] をクリックし、『Parasoft SOAtest Extensibility API』というタイトルのブックを探します。 |
言語別ヒント
Anchor | ||||
---|---|---|---|---|
|
- スクリプトの [クラス] フィールドに Java クラスを指定する場合、クラスパス上に存在するコンパイル済みクラスを指定する必要があります。[クラスパスの変更] リンクをクリックすると表示される設定ページでクラスパスを指定できます。
- 使用するクラスがパッケージの一部である場合、クラス名のほかに完全なパッケージ名を指定する必要があります (例:
java.lang.String
)。 - SOAtest または Virtualize 内で変更されリコンパイルされたクラスを使用するスクリプトがある場合、メソッドが呼び出されると、SOAtest または Virtualize はクラスをリロードし、最新のクラスを使用してオブジェクトを作成します。次の接頭辞で始まるパッケージのクラスに対しては、この機能は適用され ません。
- sun.
- com.sun.
- org.omg.
- javax.
- sunw.
- java.
- com.parasoft.
- webtool.
- wizard.
- 修正およびリコンパイルされたクラスを手動でリロードするには、[クラスのリロード] をクリックします。
Anchor | ||||
---|---|---|---|---|
|
- レガシーの SOAtest JavaScript エミュレーションは FESI をベースにしています。Oracle Nashorn など他のスクリプトエンジンを使用することを推奨します。詳細については以下を参照してください。
- JavaScript メソッドまたは JavaScript ツールからクラスパス上に存在する Java クラスおよびメソッドを呼び出せます。
たとえば、Nashorn を使用していて、JavaScript から SOAtest 拡張 API の Application.report() を呼び出すには、次のように参照します。
Java.type("com.parasoft.api.Application"): var Application = Java.type("com.parasoft.api.Application") Application.report("Message", "Result Window")
推奨しないレガシーエンジンを使用して、JavaScript から SOAtest 拡張 API の Application.report() を呼び出すには、次のように参照する必要があります。
Packages.com.parasoft.api.Application.report()
また、名前の前にPackages
を付けることで、次のように Application.report と Java クラスがあるパッケージ名を参照することもできます。var Application = Packages.com.parasoft.api.Application Application.report("Message", "Result Window")
- 指定されたスクリプトが有効で実行可能かをチェックするには (またはメソッド エントリを [メソッド] ボックスに追加するには)、スクリプトの指定に使用したオプションに応じて [ファイル] または [テキスト] テキスト フィールドを右クリックし、ショートカット メニューの [評価] をクリックします。
Anchor | ||||
---|---|---|---|---|
|
Jython の書き方や Jython から Java クラスを呼び出す方法などの Jython (Java と統合された Jython の実装) の詳細については、http://www.jython.org を参照してください。SOAtest および Virtualize には Jython 2.5.2 が付属しています。
- Jython スクリプトを使用する場合、[設定] パネルの [スクリプト] タブで jython.home および jython.path 変数を指定しなければならない場合があります。この 2 つの変数は、Jython モジュールを探すために使用されるので、Jython モジュールをインポートしていない Jython コードは、これらの変数を設定せずに使用できます。jython.home には Jython のインストールディレクトリを指定します。jython.path は、jython.home/Lib ディレクトリ以外の場所にあるモジュールのパスを追加するために使用されます。jython.path には複数のパスを指定できますが、jython.home には 1 つのディレクトリだけを指定します。jython.home および jython.path 変数を設定した場合、変更を反映するには、SOAtest または Virtualize を再起動する必要があります。
- 他のモジュールをインポートする場合、まだ Jython 2.5.2 をインストールしていなければ、jython.org から Jython 2.5.2 をダウンロードしてインストールする必要があります。Linux の場合、java -jar jython_installer-2.5.2.jar を実行します。Windows の場合、jython_installer-2.5.2.jar をダブルクリックします。
- 指定されたスクリプトが有効で実行可能かをチェックするには (またはメソッド エントリを [メソッド] ボックスに追加するには)、スクリプトの指定に使用したオプションに応じて [ファイル] または [テキスト] テキスト フィールドを右クリックし、ショートカット メニューの [評価] をクリックします。
Anchor | ||||
---|---|---|---|---|
|
次のコードは Groovy スクリプトのサンプルです。
Code Block |
---|
import com.parasoft.api.*; boolean customAssertion(Object input, ScriptingContext context) { String value = context.getValue("Books", "title"); Application.showMessage("Value from data source is " + value) Application.showMessage("Value from SOAP response is " + input.toString()) return input.toString().contains(value); } |
Anchor | ||||
---|---|---|---|---|
|
JSR 223 「Scripting for the Java Platform」仕様を実装する任意のスクリプト エンジンを認識するよう SOAtest を構成できます。 Oracle Nashorn はデフォルトで利用可能です。その他のエンジンを追加できます。
Anchor | ||||
---|---|---|---|---|
|
Oracle Nashorn ECMAScript エンジンは Java に含まれているため、デフォルトで利用可能です。次のコードは Oracle Nashorn スクリプトのサンプルです。
Code Block |
---|
var Application = Java.type("com.parasoft.api.Application") function customAssertion(input, context) { value = context.getValue("Books", "title"); Application.showMessage("Value from data source is " + value) Application.showMessage("Value from SOAP response is " + input.toString()) return input.toString().contains(value); } |
Mozilla Rhino JavaScript
Mozilla Rhino は、Java ランタイムに含まれるオリジナルの ECMAScript エンジンです。 Mozilla Rhino は Oracle Nashorn の前身であり、 Java 8 で Oracle Nashorn に切り替わりました。バージョン 9.10 より前の SOAtest/Virtualize には Java 7 が付属しており、Mozilla Rhino が含まれていました。Mozilla Rhino エンジンを使用する以前のバージョンの SOAtest/Virtualize で保存されたスクリプトは、現在のバージョンでは、Mozilla 互換拡張をロードした Oracle Nashorn エンジンで実行されます。この互換拡張は、このような目的のために Nashorn の一部として Oracle が提供しています。互換拡張をロードすることで、以前と同様にスクリプトは機能し続けますが、実行時パフォーマンスは大幅に向上しました。
現在、Mozilla Rhino を使って保存したスクリプトは、[言語] ボックスで JavaScript (Mozilla Rhino compatible) と表示されます。これは、Mozilla 互換拡張がある Nashorn でスクリプトが実行することを表します。新規にスクリプトを作成した場合、JavaScript (Mozilla Rhino compatible) オプションは表示されません。JavaScript (Oracle Nashorn) だけが表示されますが、これは Mozilla 言語拡張をロードしません。互換拡張をロードする必要がある場合は、スクリプトの先頭に
load("nashorn:mozilla_compat.js");
を追加してください。詳細は https://wiki.openjdk.java.net/display/Nashorn/Rhino+Migration+Guide#RhinoMigrationGuide-Compatibility-script を参照してください。
Mozilla Rhino は Oracle Nashorn に切り替わったため、Mozilla Rhino の使用は推奨しません。ただし、Mozilla Rhino は他の JSR 223 互換スクリプトエンジンと同様に SOAtest で使用できます (「その他の JSR 223 スクリプト言語」を参照)。Mozilla Rhino に含まれる次の 2 つの jar ファイルを [システムプロパティ] の下の [設定] パネルでクラスパスに追加する必要があります。Rhino js.jar および js-engine.jar詳細については https://wiki.openjdk.java.net/display/Nashorn/Using+Rhino+JSR-223+engine+with+JDK8 を参照してください。
ビルド済み jar ファイルは maven central からも取得できます。
http://search.maven.org/#search%7Cga%7C1%7Cg%3A%22org.mozilla%22%20a%3A%22rhino%22
- http://search.maven.org/#search%7Cga%7C1%7Ca%3A%22rhino-js-engine%22
Anchor | ||||
---|---|---|---|---|
|
その他の JSR 223 スクリプト言語を利用可能にするには、スクリプト エンジンをクラスパスに追加します([Parasoft] 設定パネルに移動し、[システム プロパティ] エリアに追加します )。
たとえば、JSR 223 を実装する JRuby スクリプト エンジンを追加できます。それには、http://jruby.org/ から JRuby をダウンロードしてクラスパスに配置します。
次のコードは JRuby スクリプトのサンプルです。
Code Block |
---|
require 'java' Application = com.parasoft.api.Application def doSomething(input, context) Application.showMessage("hello world") end |
その他の拡張に関するリソース
ユーザー定義のカスタム スクリプトを実行する Extension ツールを作成し、適用する方法の詳細については「Extension Tool (カスタム スクリプト)for Custom Scripting」を参照してください。