ヘッダーをスキップ
Oracle® Functional Testing OpenScriptユーザーズ・ガイド
バージョン9.31
B62630-03
  目次へ移動
目次
索引へ移動
索引

前
 
次
 

17 共有データ・モジュールの使用

この章では、OpenScript共有データ・モジュールの使用手順について説明します。このモジュールでは、共有データ・キューを使用してデータをスクリプト間で受け渡しできます。

17.1 共有データ・モジュールについて

共有データ・モジュールは、他のテスト・モジュールを拡張してメッセージ・キューやハッシュ・マップ機能を提供する、OpenScript基本モジュールの拡張モジュールです。

共有データは、一般に、Oracle Load Testingで仮想ユーザーとして実行される負荷テスト・スクリプト間のデータの受渡しに使用されます。共有データは、コマンドラインから実行される機能テスト・スクリプト間のデータの受渡しにも使用できます。

仮想ユーザーは、メッセージ・オブジェクトをキューに配置し、同じキューからメッセージ・オブジェクトを取得します。仮想ユーザーは、ハッシュ・マップの作成、既存マップの取得、ハッシュ・マップへのキー/値の追加を行うこともできます。異なるエージェントやマシンの同じキューまたはハッシュ・マップに対して、メッセージ・オブジェクトの追加と取得も可能です。

17.1.1 共有データ・モジュールの主な機能

共有データ・モジュールには、次の機能があります。

  • 詳細設定: 共有データ接続の詳細設定は、OpenScriptの「再生」詳細設定で設定することができます。

  • メッセージ・キュー操作: メッセージ・キューを作成、ピーク、およびポーリングします。

  • ハッシュ・マップ操作: ハッシュ・マップの作成や、ハッシュマップに対するキー/値データの出し入れを行います。

  • 共有データ・モジュールAPI: 共有データ・モジュールAPIには追加のプログラミング機能を提供するsharedDataクラスが含まれます。

17.2 共有データ詳細設定の設定

共有データ詳細設定を設定するには、次のようにします。

  1. OpenScriptを起動します。

  2. 「ビュー」メニューから「OpenScript 詳細設定」を選択します。

  3. 「OpenScript」ノード配下の「再生」カテゴリを開きます。

  4. 「共有データ」を選択します。

  5. 共有データ詳細設定を次のように設定します。

    OATS 認証: 共有キューと仮想ユーザー間の通信の確立に使用する認証資格証明を指定します。

    • グローバル共有データ・アクセス資格証明の有効化: 選択すると、共有データ・アクセス資格証明が有効になります。「アドレス」「ユーザー名」および「パスワード」を指定します。

    • アドレス: 共有データ・サービスに使用するWeb ApplicationサーバーのOracle Load Testingのアドレスを指定します。

    • ユーザー名: 認証に使用するユーザー名を指定します。Oracle Application Testing Suite構成で変更しないかぎり、デフォルト名はoatsです。

    • パスワード: 認証に使用するパスワードを指定します。「スクリプト データを暗号化する」設定が選択されている場合は、「一般」詳細設定の「暗号化」設定で指定したパスワードと同じパスワードにします。

    共有データ アクション: 共有データに対するアクションを指定します。

    • タイムアウト: 共有データに対するアクションが発生するまで最大何秒待機するとタイムアウトするかを指定します。

  6. 「OK」をクリックします。

17.3 共有データ・サービスの使用

この項では、共有データ・サービスの有効化および使用方法について説明します。

17.3.1 基本的なシナリオ

共有データ・サービスを使用する際の基本的なシナリオは、次のとおりです。

  • キュー・モード: アイテムが順次キューに格納されます。スクリプトはキューの最初または最後のデータ・アイテムを取得できます。他のアイテムにランダムにアクセスすることはできません。

    スクリプトAは100の仮想ユーザーによって実行され、この仮想ユーザーは共有データ・キューにメッセージ・オブジェクトを追加するメッセージ・プロデューサとして機能します。

    スクリプトBは別の100仮想ユーザーによって実行され、この仮想ユーザーは共有データ・キューからメッセージ・オブジェクトを取得するコンシューマとして機能します。

    コンシューマ仮想ユーザーは、キューの情報の最初または最後からオブジェクトを取得します。キューが空の場合、コンシューマ仮想ユーザーはタイムアウトに達するまでブロックされます。オブジェクトを取得可能になると、コンシューマ仮想ユーザーは再開されます。

  • ハッシュ・マップ・モード: キーを使用して任意のアイテムにアクセスできます。ハッシュ・マップがあらかじめキーのマッピングを含んでいることもあります。ハッシュ・マップは、新しいアイテムをハッシュ・マップに追加する前にチェックする必要があります。

    スクリプトAは100の仮想ユーザーによって実行され、この仮想ユーザーがキー/値オブジェクトを共有データ・ハッシュ・マップに追加します。

    スクリプトBは別の100仮想ユーザーによって実行され、この仮想ユーザーが共有データ・ハッシュ・マップからキーによって値を取得します。

    指定したキーがマップされている値を仮想ユーザーが取得できない場合、仮想ユーザーはタイムアウトに達するまで、またはキー/値がマップに追加されるまでブロックされます。

17.3.2 共有データ・サービスの有効化

共有データ・サービスを有効にするには、次のようにします。

  1. OpenScriptを起動します。

  2. 既存のスクリプトを開くか、新しいスクリプトを作成して記録します。

  3. 「スクリプト」メニューから「スクリプト プロパティ」を選択します。

  4. 「モジュール」カテゴリを選択します。

  5. 「共有データ」モジュールを選択します。

  6. 「OK」をクリックします。次のように、共有データ・サービスがJavaコードのスクリプト・クラスに追加されます。

    @ScriptService oracle.oats.scripting.modules.sharedData.api.SharedDataService sharedData;
    

    共有データ・サービスを有効にした後、パスワード暗号化と接続パラメータを設定してから、共有データAPIを使用してメッセージ・キューやハッシュ・マップを操作できます。メッセージ・キューやハッシュ・マップの作成および操作には、Javaコード・ビューでsharedDataクラスを使用します。

17.3.3 パスワード暗号化の設定

パスワード暗号化は、「一般」詳細設定で設定します。パスワード暗号化を設定するには、次のようにします。

  1. 「ビュー」メニューから「OpenScript 詳細設定」を選択します。

  2. 「OpenScript」ノード配下の「一般」カテゴリを開きます。

  3. 「暗号化」を選択します。

  4. 共有データ・サービスへの接続で隠されたパスワードか暗号化されたパスワードを使うには、「スクリプト データを隠す」または「スクリプト データを暗号化する」を選択します。

  5. 「スクリプト データを暗号化する」を選択した場合は、パスワードを入力します。

  6. 「OK」をクリックします。

17.3.4 接続パラメータの設定

接続パラメータは、共有データ・サービスおよび認証の設定に使用するOracle Load Testingサーバーを指定します。負荷テストの際、共有データ・サービスはテストを実行しているOracle Load Testingコントローラでしか実行できません。接続パラメータを設定するには、次のようにします。

  1. 共有データ・サービスが有効であり、パスワード暗号化が前述したように指定されていることを確認してください。

  2. 接続パラメータを設定するスクリプト・ノードを選択します。

  3. 「スクリプト」メニューで「追加」を選択し、「その他」を選択します。

  4. 「共有データ」フォルダを開きます。

  5. 「接続パラメータ設定」を選択し、「OK」をクリックします。

  6. 接続パラメータを次のように設定します。

    アドレス: 共有データ・サービスに使用するマシンのアドレスを指定します。たとえば、t3://localhost:8088やt3://machinename.us.oracle.com:8088のようになります。

    ユーザー名: 認証に使用するユーザー名を指定します。Oracle Application Testing Suite構成で変更しないかぎり、デフォルト名はoatsです。

    パスワード: 認証に使用するパスワードを指定します。

  7. 「OK」をクリックします。接続パラメータ・ノードがスクリプト・ツリーに追加されます。

  8. Javaコード・ビューの接続パラメータは、sharedData.setConnectionParametersプロシージャで実行されるコードで構成されています。

    sharedData.setConnectionParameters("t3://localhost:8088", "oats",
      decrypt("L4I57b+KpnI2BQSRKPG88w=="));
    

接続パラメータの設定後、Javaコード・ビューで共有データAPIを使用して、メッセージ・キューやハッシュ・マップ内のデータを操作できます。

17.3.5 共有データ・キューの作成

共有データ・キューを作成するには、次のようにします。

  1. スクリプト・プロジェクトを作成します。

  2. 共有データ・サービスが有効であり、すでに説明したようにパスワード暗号化と接続パラメータが指定されていることを確認します。

  3. Javaコード・ビューを開き、キューを作成したいスクリプトに、ライフ・タイム値を指定したsharedData.createQueueコードを次のように挿入します。

    info("Create queueA with life time of 10 minutes");
    sharedData.createQueue("queueA", 10);
    

    キューの最大数は1000です。キューの最大容量は65535です。この最大値を超えると例外が発生します。ライフ・タイムの期限が切れると、キューは破棄されます。

17.3.6 共有データ・キャッシュへのデータの挿入

キューに追加できる値の種類は、次のとおりです。

  • 文字列

  • ブール値

  • 整数

  • Long

  • Double

  • Float

  • 上記のデータ型のリスト

  • ユーザー定義のシリアライズ可能なJavaオブジェクト

既存のキューにデータを挿入するには、次のようにします。

  1. すでに説明したように、共有データ・サービスを設定してキューを作成します。

  2. Javaコード・ビューを開き、キューにデータを挿入したいスクリプトに、値を指定したsharedData.offerFirstまたはsharedData.offerLastコードを次のように挿入します。

    int iterationNum = getIteration().getTotalIterationsCompleted() + 1;
    info("Insert data at the front of an existing queueA");
    sharedData.offerFirst("queueA", "first" + iterationNum);
    

    または

    int iterationNum = getIteration().getTotalIterationsCompleted() + 1;
    info("Insert data at the end of an existing queueA");
    sharedData.offerLast("queueA", "last" + iterationNum);
    
    info("parameter type - String");
    sharedData.offerFirst("queueA", "value");
    
    info("parameter type - list of Strings");
    ArrayList<String> listOfStr = new ArrayList<String>();
    listOfStr.add(0, "val1");
    listOfStr.add(1, "val2");
    sharedData.offerFirst("queueA", listOfStr);
    ArrayList<String> queueValue = (ArrayList<String>) 
       sharedData.pollFirst("queueA");
    
    info("parameter type - boolean");
    sharedData.offerFirst("queueA", true);
    
    info("parameter type - int");
    sharedData.offerFirst("queueA", 10);
    
    info("parameter type - double");
    sharedData.offerFirst("queueA", 10.5);
    
    info("parameter type - long");
    sharedData.offerFirst("queueA", 100);
    

17.3.7 共有データ・キューからのデータの取得

キューからデータを取得するには、次のようにします。

  1. すでに説明したように、共有データ・サービスを設定してキューを作成し、キューにデータを挿入します。

  2. Javaコード・ビューを開き、キューからデータを取得したいスクリプトに、データの取得に使用する共有データ・メソッドを挿入します。共有データ・サービスには、次のように長さおよびピークの取得(データの取得)と、データのポーリング(データの取得と削除)を行うメソッドが含まれています。

    info("Get the length of queueA");
    int actualLength = sharedData.getLengthOfQueue("queueA");
    
    info("Get the most current item of queueA");
    String queueValue1 = (String) sharedData.peekFirst("queueA");
    
    info("Get the most current item of queueA - timeout after 5 seconds");
    String queueValue2 = (String) sharedData.peekFirst("queueA", 5000);
    
    info("Get the oldest item of queueA");
    String queueValue1 = (String) sharedData.peekLast("queueA");
    
    info("Get the oldest item of queueA - timeout after 5 seconds");
    String queueValue2 = (String) sharedData.peekLast("queueA", 5000);
    
    info("Get and remove the most current item from queueA");
    String pollValue1 = (String) sharedData.pollFirst("queueA");
    
    info("Remove the most current item from queueA - Timeout after 5 seconds");
    String pollValue2 = (String) sharedData.pollFirst("queueA", 5000);
    
    info("Remove the oldest item from queueA");
    String pollValue1 = (String) sharedData.pollLast("queueA");
    
    info("Remove the oldest item from queueA - Timeout after 5 seconds");
    String pollValue2 = (String) sharedData.pollLast("queueA", 5000);
    
    info("Waiting for an existing value 100 in queueA");
    boolean isFound1 = sharedData.waitFor("queueA", 100);
    
    info("Waiting for an existing value 100 in queueA - timeout afer 5 seconds");
    boolean isFound2 = sharedData.waitFor("queueA", 100, 5000);
    
  3. キューからデータを使用するスクリプトに、他のカスタム・コードを追加します。

17.3.8 共有データ・キューのクリア

データを使用するスクリプトが終了したら、キューをクリアします。

共有データ・キューをクリアするには、次のようにします。

  1. Javaコード・ビューを開き、キューをクリアしたいスクリプトに、クリアするキューの名前を指定したsharedData.clearQueueコードを次のように挿入します。

    info("Clear queueA");
    sharedData.clearQueue("queueA");
    

17.3.9 共有キューの破棄

データを使用するスクリプトが終了したら、キューを破棄します。キューを破棄すると、キューのデータとそのリスナーが開放され、キューに割り当てられていたメモリーが開放されます。

共有データ・キューを破棄するには、次のようにします。

  1. Javaコード・ビューを開き、キューを破棄したいスクリプトに、破棄するキューの名前を指定したsharedData.destroyQueueコードを次のように挿入します。

    info("Destroy queueA");
    sharedData.destroyQueue("queueA");
    

17.3.10 共有データ・ハッシュ・マップの作成

共有データ・ハッシュ・マップを作成するには、次のようにします。

  1. スクリプト・プロジェクトを作成します。

  2. 共有データ・サービスが有効であり、すでに説明したようにパスワード暗号化と接続パラメータが指定されていることを確認します。

  3. Javaコード・ビューを開き、ハッシュ・マップを作成したいスクリプトに、ライフ・タイム値を指定したsharedData.createMapコードを次のように挿入します。

    info("Create mapA with life time of 10 minutes");
    sharedData.createMap("mapA", 10);
    

    ハッシュ・マップの最大数は1000です。ハッシュ・マップの最大容量は65535です。この最大値を超えると例外が発生します。ライフ・タイムの期限が切れると、ハッシュ・マップは破棄されます。

17.3.11 共有データ・ハッシュ・マップへのデータの挿入

ハッシュ・マップに追加できる値の種類は、キューの場合と同じです。データ型のリストについては、「共有データ・キューへのデータの挿入」を参照してください。

既存のハッシュ・マップにデータを挿入するには、次のようにします。

  1. すでに説明したように、共有データ・サービスを設定してハッシュ・マップを作成します。

  2. Javaコード・ビューを開き、ハッシュ・マップにデータを挿入したいスクリプトに、キーと値を指定したsharedData.putToMapコードを次のように挿入します。

    int iterationNum = getIteration().getTotalIterationsCompleted() + 1;
    info("put key/value pair to an existing mapA");
    sharedData.putToMap("mapA", "key" + iterationNum, "value" + iterationNum);
    
    info("parameter type - String");
    sharedData.putToMap("mapA", "key", "value");
    String mapValue = (String) sharedData.getFromMap("mapA", "key");
    
    info("parameter type - list of Strings");
    ArrayList<String> listOfStr = new ArrayList<String>();
    listOfStr.add(0, "val1");
    listOfStr.add(1, "val2");
    sharedData.putToMap("mapA", "key", listOfStr);
    ArrayList<String> mapVal = (ArrayList<String>) sharedData.getFromMap("mapA", 
       "key");
    
    info("parameter type - boolean");
    sharedData.putToMap("mapA", "key", true);
    
    info("parameter type - int");
    sharedData.putToMap("mapA", "key", 10);
    
    info("parameter type - double");
    sharedData.putToMap("mapA", "key", 10.5);
    
    info("parameter type - long");
    sharedData.putToMap("mapA", "key", 100);
    

17.3.12 共有データ・ハッシュ・マップからのデータの取得

ハッシュ・マップからデータを取得するには、次のようにします。

  1. すでに説明したように、共有データ・サービスを設定してキューを作成し、ハッシュ・マップにデータを挿入します。

  2. Javaコード・ビューを開き、ハッシュ・マップからデータを取得したいスクリプトに、データの取得に使用する共有データ・メソッドを挿入します。共有データ・サービスには、次のようにハッシュ・マップのキーを取得し、ハッシュ・マップに対してデータの取得と削除を行うメソッドが含まれています。

    info("Get all keys of mapA");
    String [] lsKey = sharedData.getKeysOfMap("mapA");
    
    info("Get key/value pair from mapA");
    String actualValue = (String) sharedData.getFromMap("mapA", "key");
    
    info("Get key/value pair from mapA - timeout after 5 seconds");
    String actualValue1 = (String) sharedData.getFromMap("mapA", "key", 5000);
    
    info("Remove key/value pair from mapA");
    String removeValue = (String) sharedData.removeFromMap("mapA", "key");
    
    info("Remove key/value pair from mapA - timeout after 5 seconds");
    String removeValue1 = (String) sharedData.removeFromMap("mapA", "key", 5000);
    
  3. ハッシュ・マップからデータを使用するスクリプトに、他のカスタム・コードを追加します。

17.3.13 共有データ・ハッシュ・マップのクリア

データを使用するスクリプトが終了したら、ハッシュ・マップをクリアします。

共有データ・ハッシュ・マップをクリアするには、次のようにします。

  1. Javaコード・ビューを開き、ハッシュ・マップをクリアしたいスクリプトに、クリアするマップの名前を指定したsharedData.clearMapコードを次のように挿入します。

    info("Clear mapA");
    sharedData.clearMap("mapA");
    

17.3.14 共有データ・ハッシュ・マップの破棄

データを使用するスクリプトが終了したら、ハッシュ・マップを破棄します。ハッシュ・マップを破棄すると、マップのデータとそのリスナーが開放され、マップに割り当てられていたメモリーが開放されます。

共有データ・ハッシュ・マップを破棄するには、次のようにします。

  1. Javaコード・ビューを開き、ハッシュ・マップを破棄したいスクリプトに、破棄するマップの名前を指定したsharedData.destroyMapコードを次のように挿入します。

    info("Destroy mapA");
    sharedData.destroyMap("mapA");
    

17.4 共有データAPIの使用

共有データ・モジュールには、共有データ・アクション用のスクリプトのAPI (アプリケーション・プログラミング・インタフェース)が含まれます。共有データAPIを使用して、Oracle Load Testingで仮想ユーザーとして実行される負荷テスト・スクリプト間でデータを受渡しできます。共有データは、コマンドラインから実行される機能テスト・スクリプト間のデータの受渡しにも使用できます。共有データ・モジュールに固有のコマンドは、"sharedData"クラスに属しています。共有データ・サービスを他のタイプのスクリプトと使用するには、個別に有効にする必要があります。また、その他の有効なクラス(サービス)の他のコマンドや汎用Javaコマンドも、スクリプトで利用できます。

共有データ・モジュールAPIの例は次のとおりです。

setConnectionParameters APIメソッドはスクリプトのツリー・ビューを使用して追加することができます。Javaコード・ビューを使用してさらにメソッドを追加することができます。