OpenScriptを使用すると、スクリプト・データ入力をパラメータ化し、データ駆動型テスティングを実行できます。OpenScriptでは、次のデータ・ソース・タイプが使用されます。
データバンク: スクリプト・パラメータに対する入力を指定する、1つ以上の外部カンマ区切り値(CSV)またはテキスト(TXT)ファイル。複数のデータバンク・ファイルを1つのスクリプトにアタッチすることができ、ユーザーは、スクリプト再生中にOpenScriptでデータを割り当てる方法を指定できます。スクリプト再生反復により、連続して、ランダムに、データをシャッフルして、データバンクを繰り返すことができます。データバンクは、機能テスト・スクリプトおよび負荷テスト・スクリプトで使用できます。詳細は、4.2項「スクリプト・データバンクの使用」を参照してください。
データベース: データバンクのCSVファイルまたはTXTファイルと同じフォーマットのOracle Databaseからデータを抽出するSQL問合せ。詳細は、4.2項「スクリプト・データバンクの使用」を参照してください。
データ・テーブル: 行と列でデータを指定するスプレッドシート・テーブル。テーブル内のデータは、手動で入力するか、Excelスプレッドシート・ファイルからインポートできます。データ・テーブルAPIは、機能テスト・スクリプト内でテーブルのデータにプログラムでアクセスするためのメソッドを提供します。データ・テーブルは、機能テスト・スクリプトで使用できます。詳細は、4.3項「データ・テーブルの使用」を参照してください。
共有データ・サービス: 共有データ・キューまたはハッシュ・マップを使用して、仮想ユーザー・エージェント間でデータを共有するためのメソッドを提供する共有データ・モジュールAPI。共有データ・サービスは、負荷テスト・スクリプトで使用されます。共有データ・サービスの使用の詳細は、第17章「共有データ・モジュールの使用」を参照してください。
データ駆動型テスティング(パラメータ化)を使用すると、自動化されたデータ駆動型テストを簡単かつ効率的に作成できます。
OpenScriptのモジュールは、テスト用アプリケーションの各ページで定義されたパラメータをスクリプトに記録します。データ・ソースを使用して入力データを保持し、スクリプトの実行時にアプリケーションにパラメータとして自動的に提供することができます。OpenScriptデータ・パラメータ化機能を使用すると、スクリプト・パラメータの変数値を定義し、データバンク・ファイル、データベースまたはデータ・テーブルの値を変数値のかわりに使用できます。
再生時には、アプリケーションのパラメータにデータ・ソースの値が挿入されます。データバンク・ファイルは、任意の単純なテキスト・エディタ、スプレッドシート、ワード・プロセッサまたはデータベース・アプリケーションを使用して、簡単に作成または変更できます。ユーザーは、高度な自動回帰テストを作成し、様々な入力データを使用してアプリケーションを徹底的にテストすることができます。
データ入力のパラメータ化: ユーザーは、記録されたスクリプト入力をパラメータ化し、スクリプトGUIビューまたはコード・ビューでデータ駆動型テスティングを実行することができます。この入力は、Webアプリケーションのフォーム・フィールド入力、あるいは他のタイプのパラメータ化可能なスクリプト入力です。パラメータ化可能な入力には次のタイプがあります。
ユーザーが入力した任意の入力データ(検索フィールドに入力したデータをパラメータ化する場合)
テスト・ケース値(再生時に様々な入力を使用して比較できるように、検証用のテキスト文字列をパラメータ化する場合)
記録されたナビゲーション(再生時に様々なホスト・サーバーに移動できるように、開始ナビゲーションをパラメータ化する場合)
記録された確認済のユーザー・アクション/オブジェクト(再生時に様々なリンクをクリックできるように、リンク・オブジェクト・パスをパラメータ化する場合)
データ入力ソース: ユーザーは、外部CSVファイルやデータ・テーブル/Excelファイル、データベース(データベース問合せを使用してデータベース・テーブルから入力を抽出)などのその他の外部データソースから入力値を取得できます。
データ・パラメータ化GUIビュー: ユーザーは、パラメータ化する入力と入力の取得元となるデータソースを、変数置換GUIインタフェースを通じて設定できます。たとえば、ツリー・ビュー内の「Page [4] Ticker List」のticker問合せ文字列パラメータは、変数値{{fmstocks_data.ticker,ter}}に設定されています。
変数{{fmstocks_data.ticker,orcl}}において、fmstocks_dataはデータバンク・ファイル名、.tickerはデータバンク・ファイル内のフィールド名、orclは記録された値です。
データ・パラメータ化コード・ビュー・コマンド: ユーザーは、パラメータ化する入力と入力の取得元となるデータソースを、コード・ビューでのデータ・パラメータ化を通じて指定できます。
たとえば、ツリー・ビュー内の「Page [4] Ticker List」のticker問合せ文字列パラメータは、コード・ビューでは次のようにhttp.get
メソッド・コード内にhttp.querystring(http.param("ticker", "{{fmstocks_data.ticker,orcl}}")
として表示されます(わかりやすいように改行とスペースが追加されています)。
beginStep("[4] Ticker List", 3422); { http.get(6, "http://testserver2/fmstocks/{{LINK_1_3,TickerList.asp}}", http.querystring(http.param("ticker", "{{fmstocks_data.ticker,orcl}}"), http.param("company", "")), null, true, "ASCII", "ASCII"); } endStep()
データバンクを使用して無制限のサイズの入力データを保持し、Webアプリケーションに自動的に提供することができます。再生時には、Webページのパラメータにデータバンク・ファイルの値が挿入されます。データバンクおよびスクリプト・パラメータのショートカット・メニュー・オプションを使用すると、スクリプトのパラメータをデータバンク・ファイルのフィールドに変数名としてマップできます。
データバンクを使用するようにスクリプトを設定する必要があります。「スクリプト」メニューの「スクリプト プロパティ」オプションを使用して、アセット・プロパティでスクリプトとともに使用するデータバンク・ファイルを指定します。スクリプトは、複数のデータバンク・ファイルを使用するように設定できます。
記録したスクリプトにパラメータを使用するナビゲーションが含まれている場合、「問合せストリング」ノードの下にパラメータ・ノードが表示されます。
コード・ビューでは、これらのパラメータはhttp.querystring
パラメータのhttp.param
パラメータの中に表示されます。
スクリプトとともに使用するデータバンクを設定すると、「データバンク 次レコード取得: データバンク名」ノードとJavaコードがスクリプトに追加されます。
データバンクにマップするスクリプト・パラメータ・ノードを選択し、右クリックのショートカット・メニューにある「変数の置換」オプションを使用して、パラメータにマップするデータバンク・フィールド名を選択します。データバンク・ファイルとフィールドの名称がスクリプト・ツリーのパラメータ・ノードに表示されます。
コード・ビューでは、この変数はhttp.querystring
パラメータのhttp.param
パラメータの中に表示されます。
データバンクのレコードを使用して再生するには、再生の反復を使用します。カスタム・コードを使用してデータバンク・レコードをループし、変数に値を割り当てることもできます。
スクリプトで使用するレコードをデータバンクから取得するには、スクリプトで使用するデータバンクを設定する必要があります。
スクリプトで使用するデータバンクを設定するには:
スクリプト・プロジェクトを開くか、作成します。
「スクリプト」メニューから「スクリプト プロパティ」を選択します。
「スクリプト アセット」タイプを選択します。スクリプト・アセットの追加の詳細は、3.3.6項「スクリプト・アセットの追加」を参照してください。
「データバンク」を選択します。
「追加」をクリックします。
「データバンク」を選択します。
「CSV ファイル」または「データベース」を選択します。データバンクをCSVまたはデータベース(SQL)として定義すると、データバンクを他のタイプには変更できなくなります。
CSVファイルの場合:
「マイ リポジトリ」ツリーから「リポジトリ」を選択します。
リポジトリでデータバンク・ファイルを選択します。
「タイプ」を「データバンク」(*.csv, *.txt)に設定します。
タイプ: スクリプトに追加するデータバンク・ファイルのタイプ(*.csv、*.txt)を示します。
使用する「文字セット」を選択します。
文字セット: データバンク・ファイルに使用されている文字セット・エンコードを示します。ここで示される、データバンク.csvファイルの文字セット・エンコードは、ユーザー・マシンのネイティブな文字セットです。米国のマシンの場合、示されるエンコードはcp1252です。東ヨーロッパのマシンの場合、示されるエンコードはcp1251です。UTF-8エンコードで保存し、データバンク・ファイルにUnicodeバイト・オーダー・マーク(BOM)が付加されている場合は、OpenScriptがBOMを検出し、エンコードをUTF-8に設定します。データバンク・ファイルに使用されている文字セットが、ユーザー・マシンの文字セットとも、BOMが付加されるUTF-8とも異なる場合は、文字セットを修正する必要があります。そうしないと、データバンクは正しく読み取られず、スクリプト・エラーが発生する可能性があります。「文字セット」リストで正しい文字セットを選択するか、またはフィールドに正しい文字セットを入力します。
再生時に、エージェントが次の順番に従って、データバンク・ファイルを読み込む際の文字セットを判定します。
ファイルがBOM付きのUTF-8エンコードである場合は、そのエンコードが使用されます。
アセットの設定時に指定された文字セットが使用されます。
文字セットの指定がない場合(9.1スクリプト)は、UTF-8エンコードが使用されます。
データバンクに使用する別名を入力するか、デフォルトの別名のままにします。デフォルトの別名は、.CSVデータバンク・ファイルの名前です。
別名: データバンクに使用する別名を指定します。データバンク・ファイル名がデフォルトになります。データバンクの別名は、データバンク・レコード取得ノードをスクリプト・ツリーに追加するときに表示される名称です。
相対パス・オプションを設定します。「現在のスクリプトの相対パス」および「リポジトリの相対パス」オプションは、現在のスクリプトが指定のスクリプト・アセットを検索するときの方法を示します。アセットをリポジトリから選択した場合は、「リポジトリの相対パス」オプションを選択すると、[Repository: Default] Default!/WebTutor
のようなリポジトリ・パスに基づいて、スクリプト・アセットが検索されます。「現在のスクリプトの相対パス」オプションを選択すると、../WebTutor
のような相対パスに基づいてスクリプト・アセットが検索されます。スクリプトを移動または共有すると、スクリプト相対パスはリポジトリ相対パスよりも位置情報が崩れやすいため、「現在のスクリプトの相対パス」オプションを選択することはお薦めしません。
スクリプト・アセットをチーム内または分散環境で使用する際は次のガイドラインに従ってください。
アセットを参照またはアセットを保存する際に絶対パスを使用しないでください。Oracle Load Testingでは絶対パスはサポートされていません。
OpenScript、Oracle Test Manager、Oracle Load Testingおよび全コマンドライン・エージェントではすべて、リポジトリの共有されている同じ名前およびパスを使用してください。
別のリポジトリ内のアセットを相対パスで参照しないでください。
「OK」をクリックします。
「OK」をクリックして、データバンク・ファイルを追加します。
データベースの場合、「データバンク・データベース・アセット」ダイアログ・ボックスが表示されます。このダイアログ・ボックスでは、データバンクとして使用するデータベースと問合せを指定できます。データベースの適切な設定については、データベース管理者にお問い合せください。指定できるオプションは次のとおりです。
「データベース ドライバ」を指定します。
Oracle Thin: このドライバ・オプションは、Oracleデータベースに適用されます。
ホスト名: データベースを実行しているマシンのホスト名を指定します。JDBC:ODBCまたはカスタム・ドライバ設定の場合には、このオプションを指定する必要はありません。
ポート: 選択したドライバのポートを指定します。たとえば、Oracle Thin JDBCドライバのデフォルト・ポートは1521です。必要に応じてポート番号を変更してください。JDBC:ODBCまたはカスタム・ドライバ設定の場合には、このオプションを指定する必要はありません。
サービス名: Oracleデータベースに使用されるサービス名を入力します。
ODBC: このドライバ・オプションは、SQLデータベース、Oracleデータベース、およびJDBC:ODBCブリッジ・ドライバの接続先データベースのオプションとして使用できます。
データ・ソース: ODBCドライバのデータ・ソースを指定します。
URL、ユーザー名、パスワード、問合せ文字列、およびデータベース別名を指定します。
URL: データベースへの接続に使用するURLを指定します。
問合せ: データバンク値として必要なすべての行を返す単一のSQL問合せを指定します。SQL問合せにはPL/SQLコードもSQL*Plusコードも含めることができません。通常のSQLのみ指定可能です。スクリプトで処理可能なカラム名(データバンクのフィールド)が返されるように、問合せを指定する必要があります。
データベース型のデータバンクのサイズが大きくても、テストではレコードの一部分しか使用しない場合は、データベースから取得するレコードの件数を減らすために、SQL問合せでWhere句を使用してください。たとえば、データベースのレコード件数が20万件で、レコード201から順番に201から301まで100件だけ取得する必要がある場合は、Select * From LargeTable Where id > 200 AND id < 302
のような問合せを使用します。レコードは1から始まり、idは取得する範囲です。これで、データバンクの処理時間が短縮され、データベースから取得するレコードの件数を減らすことができます。
データベースから返される結果が意図した順番になるように、問合せにOrder By句を使用してください。たとえば、カラムのid
、firstName
、lastName
が次のようなデータになっているデータベース・テーブルがある場合です。
1, John, Smith 2, Jane, Doe [...] 400, Maria, Sanchez [...] 200000, Sachin, Rajaram
Select * From users
という問合せを使用すると、問合せの結果が順番に並ばないため、データバンクの最初のレコードは、「1, John, Smith」ではなく、「400, Maria」になります。Select * From users Order By id
という問合せを使用すれば、意図したとおりに、最初のデータバンク・レコードは「1, John, Smith」になります。
別名: データバンクに使用する別名を指定します。データバンクの別名は、データバンク・レコード取得ノードをスクリプト・ツリーに追加するときに表示される名称です。
「テスト」をクリックしてデータベースへの接続を検証します。
「OK」をクリックします。
「OK」をクリックして、データバンク・ファイルを追加します。データバンクとしてデータベースを使用する場合は、テストを開始する前にすべてのデータのコピーが取得され、インデックス化されます。データはテスト中にライブでは読み込まれません。データバンクを使用するスクリプトの再生については、4.2.4項「スクリプトの反復再生」を参照してください。
データバンク・ファイルは、データバンクに固有のフォーマット・ルールおよびExcel形式から導出されたルールを付加したカンマ区切り値ファイル(".csv"または".txt")です。また、データバンクは、.csvデータバンク・ファイル・フォーマット・ルールに準拠するデータを生成する適切な問合せを使用して、データベースから取得されるデータの場合もあります。
アセット・スクリプト・プロパティからデータバンク・ファイルを開くと、テキスト・エディタ・ビューにデータバンク・ファイルが開きます。データバンク・ファイルは、テキスト・エディタ・ビューで直接編集できます。また、別のテキスト・エディタまたは.csv形式のテキスト・ファイルにエクスポートできるスプレッドシートを使用して、データバンク・ファイルを作成、編集することもできます。
一般的なデータバンク・ファイル・フォーマット・ルールは、次のとおりです。
データバンクの1行目は、フィールド・ヘッダー(カラム・タイトル)を定義します。フィールド・ヘッダー・デリミタとしてカンマを使用します(スペースは使用しません)。フィールド・ヘッダー名はユーザーが定義します。たとえば、FirstName,LastName,Mail,Phone
は、1つのデータバンク・ファイルに4つのフィールド・ヘッダーを定義します。フィールド・ヘッダーをスクリプト・コードで参照して有効なデータバンク変数を指定できます。たとえば、別名がmyDBのデータバンクの1行目にフィールド・ヘッダーuser
およびpassword
が指定されている場合、データバンク変数のdb.myDB.user
およびdb.myDB.password
は、myDBデータバンクを使用するように設定されたスクリプトでは有効です。
フィールド・ヘッダーに続くファイル内の各行は、データバンク・レコードを定義します。
行末には、改行(LF)文字または復帰改行(CR LF)文字を指定できます。
各データバンク・レコードは、フィールド・データ(カラム)で構成されます。フィールド・デリミタとしてカンマを使用します(レコードごとに1行、カンマの前後にスペースは使用しません)。たとえば、John,Smith,JohnS@company.com,x993
は、フィールド・ヘッダーFirstName,LastName,Mail,Phone
に対応するデータバンク・レコードのフィールド・データを定義します。
各データバンク・レコードには、フィールド・ヘッダー数として同じ数のフィールドが必要です。たとえば、データバンク・ファイルの行1にFirstName,LastName,Mail,Phone
という4つのフィールド・ヘッダーがある場合、行2からnまでの各データバンク・レコードでは各レコードに4つのフィールド・データ列が必要です。john,smith,JohnS@company.com,x993
は正しいデータバンク・フィールド・データ・レコードです。しかし、john,smith,JohnS@company.com
には3つのフィールドしか含まれていないため、このレコードは誤りです。フィールド列を空白のままにする場合は追加のカンマを挿入します。たとえば、Sachin,Bhat,,x783
のようになります。次に例を示します。
FirstName,LastName,Mail,Phone John,Smith,JohnS@company.com,x993 Mary,Ellen,MaryE@company.com,x742 Sachin,Bhat,,x783
引用符("
)は、データバンク・レコード内に含まれる改行文字(LF、CR)またはカンマ(,)に対するエスケープ文字として使用します。エスケープされたレコードはすべて、LF、CRまたはカンマが含まれているかどうかに関係なく、引用符で囲んだ後にカンマまたはCR/LFを続ける必要があります。たとえば、データ値にカンマが含まれる場合、次のように値を引用符で囲みます。
John,Smith,"Anytown, MA",(603) 993-0000
次に示すように、新しい行を引用符で囲むこともできます。
field1,"field2 contains two lines: Line one. Line two.",field3
引用符をエスケープ文字としてではなく引用符として使用するには、それ自体をエスケープします。正しいフォーマットは""
です。レコードの途中にある引用符は、常にエスケープする必要があります。次に例を示します。
THIS IS BEGINNING AND ""THIS IS END""
このレコードは正しいフォーマットです。次にレコードを示します。
THIS IS BEGINNING AND "THIS IS END"
このレコードは正しいフォーマットではありません。
空の行は除外され、無視されます。
CSVファイルの文字エンコードは、ファイルの先頭の(オプションの)バイト・オーダー・マーク(BOM)で判断されます。Notepad++またはExcelなどのプログラムでは、ユーザーがUTF-8などの特定のエンコード文字セットを指定してテキスト・ドキュメントを保存すると、このバイト・オーダー・マークが設定されます。バイト・オーダー・マークが指定されていない場合、ユーザーがデータバンク・アセットをスクリプトに追加する際、CSVリーダーではデータバンク・アセットに割り当てられた文字セットが使用されるか、バージョン9.2より前のレガシー・データバンクのファイルの読取りには、現行プラットフォームのデフォルトの文字セット(たとえば、ほとんどのWindowsの英語版インストール環境ではcp1252)が使用されます。
スクリプト・プロジェクトを開くか、作成します。
スクリプト・アセット・プロパティのスクリプトで使用するデータバンクを設定します。
データバンク・レコードを使用するスクリプト・ノードを選択します。
「スクリプト」メニューを選択した後、「追加」サブメニューから「その他」を選択します。
「一般」ノードを開いて、「データバンク 次レコード取得」を選択します。
データバンクを選択するか、または「新規」をクリックして、新しいデータバンクを追加します。
レコードを選択します。
「OK」をクリックします。
データバンクの別名を選択して、レコードの取得元となるデータバンク・ファイルを指定します。
「OK」をクリックします。「GetNextDatabankRecord: databank alias」ノードがスクリプトに追加されます。
選択したレコードのタイプに応じて、getDatabank("
databank alias
").
method
();
が、Javaコード・ビューのスクリプト・コードに追加されます。
getDatabank("customer").getNextDatabankRecord(); getDatabank("customer").getFirstRecord(); getDatabank("customer").getLastRecord(); getDatabank("customer").getRecord(5);
データバンク変数と置換するスクリプト・ツリーのパラメータ・ノードを右クリックして、「変数の置換」を選択します。
必要に応じて「データバンク」ノードを開き、入力パラメータ・データとして使用するデータバンク・フィールドを選択します。
「終了」をクリックします。
スクリプト・ノードの名前/値ペアが、データバンクの別名、フィールド名および変数値として記録された値を示すために変更されます。次に例を示します。
login = {{db.customer,login,ta906}}
Javaコード・ビューで、パラメータ・コードが、データバンクの別名、フィールド名、および変数値として記録された値を示すために変更されます。次に例を示します。
http.postdata(http.param("login", "{{db.customer,login,ta906}}")
一度スクリプトを再生して正しく再生されることを確認するには、「再生」ツールバー・ボタンをクリックします。
Javaコード・ビューでは、getDatabank("
databank alias
")
が使用可能なその他のAPIメソッドを使用して、データバンクから特定のレコードを取得できます。この項では、使用可能なメソッドの例について説明します。
ここで説明するAPIメソッドは、「ランダム」およびレコードのシャッフルのデータベースの反復設定と競合します。「ランダム」またはレコードのシャッフル反復設定を指定した状態で、メソッドを使用すると、「incompatible with db setting」というデータバンク例外がスローされます。
これらのAPIコールを使用して取得したレコードは、全レコードの使用件数の中にカウントされません。「レコードの終了時」反復設定が「ユーザーの停止」に設定されている場合は、スクリプトが無限ループになる可能性がありますが、これらのAPIコールを使用してレコードを読み込めるのは、スクリプトのみです。
次の例では、getDatabankRecordCount()
メソッドを使用して、customerデータバンクのレコード件数を取得し、結果ビューに値を表示します。
int recordCount = getDatabank("customer").getDatabankRecordCount(); String count = Integer.toString(recordCount); info("Record Count = " + count );
次の例では、getRecord(
n
)
メソッドを使用して、customerデータバンクの特定レコードを取得し、結果ビューに値を出力します。
getDatabank("customer").getRecord(5);
次の例では、For
構文を使用して、データバンクの全レコードを1件ずつ取得します。
int recordCount = getDatabank("customer").getDatabankRecordCount(); for (int i=1; i<=recordCount; i++) { info("Record count = " + Integer.toString(i) + " of " + Integer.toString(recordCount)); getDatabank("fmstocks_data").getRecord(i); }
OpenScriptでは、スクリプトのナビゲーションを繰り返し再生できます。反復は、データバンクの有無にかかわらず実行可能です。
OpenScriptを起動します。
再生するスクリプトを開きます。
4.2.1項「データバンクの設定」の説明に従って、データバンクを使用するようにスクリプトを設定します。
「スクリプト」メニューから「反復」を選択するか、ツールバー・ボタンをクリックします。表示されるダイアログ・ボックスには次のオプションがあります。
データバンクの使用: 選択すると、スクリプトの再生にデータバンクが使用されます。スクリプトにデータバンクが設定されると、次の設定が表示されます。
名前: データバンク・ファイルの別名が一覧表示されます。
範囲: スクリプトの再生に使用するデータバンク・レコードの範囲がリストされます。このリストは、各データバンク・ファイルに選択された「範囲」オプションに対応しています。
開始: スクリプトの再生に使用するデータバンク・レコードの開始がリストされます。このリストは、各データバンク・ファイルに指定された「開始レコード」オプションに対応しています。
レコード選択: スクリプトの再生用のデータバンク・レコードの選択状況がリストされます。このリストは、各データバンク・ファイルに選択された「次レコード選択」設定に対応しています。
レコード終了時: スクリプトの再生中にデータバンク・ファイルがレコード外になったとき実行するアクションがリストされます。このリストは、各データバンク・ファイルに選択された「レコード終了時」設定に対応しています。
データ: 各データバンク・ファイルの「開始レコード」にあるデータがリストされます。
データバンク ソース: このセクションには、選択したデータバンクについて次の情報が表示されます。
別名: 選択したデータバンク・ファイルの別名と行数が表示されます。
タイプ: 選択されているデータバンク・ファイルのタイプが表示されます。データバンクは、CVSテキスト・ファイルかデータベースです。
ソース: CSVテキスト・ファイルのパスおよびファイル名、またはデータベース・データバンクに使用するまたはデータベース問合せを示します。ファイル・サイズの上限はありませんが、推奨する最大サイズは200MBです。インデックスの生成時間のみ制限があります。データバンクは、デフォルトでは、30秒以内にインデックスの生成が可能でなければなりません。この設定は、「一般」詳細設定の「データバンク セットアップ タイムアウト」設定で行います。
データバンク設定: このセクションで、選択したデータバンクに使用する設定を示します。
次のレコードに進む: スクリプト再生時に、仮想ユーザーが次のデータバンク・レコードに移動するタイミングを指定します。再生されるマスター・スクリプトは常に、反復が発生するときに起動されるスクリプトです。指定できるオプションは次のとおりです。
スクリプトがレコードを要求時: データバンク・レコードは、スクリプトの再生中にスクリプトが明示的にレコードを要求するたびに移動します。レコード・リクエストは、getDatabank(
alias
).getNextRecord()
メソッドを呼び出すスクリプトJavaコードに対応しています。これがデフォルトの動作です。
発生ごと: スクリプトがそのスクリプトのデータバンク・カラム(データバンク・フィールド)を参照するとき、データバンク・レコードが移動します。レコード・リクエストは、{{db.fmstocks_data.ticker}}
のようにパラメータ化された値を評価するスクリプトJavaコードに対応しています。すべてのカラムが次のレコードに移動するように指定することも、特定のデータバンク・カラムだけが次のレコードに移動するように指定することもできます。たとえば、firstName
フィールドを持つ従業員データバンクがあり、firstName
カラムが「列」値として指定されている場合、データバンク・レコードはスクリプトJavaコードの{{db.employees.firstName}}
値がスクリプト再生時に評価されるときにのみ移動します。データバンク・フィールド名を「列」値として選択するか、すべてのフィールドでデータバンク・レコードが移動するように<Any>を選択します。
スクリプト反復ごと: データバンク・レコードは、データバンクを含んでいるスクリプトが次の反復再生を開始する前に移動します。
次のレコードの選択: データバンク・レコードが移動するときにデータバンクから新しいレコードを選択する方法を指定します。指定できるオプションは次のとおりです。
連続: データバンク・レコードは、指定範囲の開始から連続して1つずつ増分されます。複数の仮想ユーザーが実行されているときは、すべての仮想ユーザー間でレコードが連続的に配分されます。
ランダム: データバンクからランダムにデータバンク・レコードが選択されます。すべてのレコードを使い切らずに、同じレコードを複数回使用することができます。ランダムにレコードを選択できるのは、インデックス化が可能なデータバンクのみです。データバンクを設定するとき、データバンク・ファイルが大きすぎてインデックス化できない場合、「ランダム」とレコードをシャッフルのオプションは使用できません。「ランダム」を選択した場合、「レコード終了時」設定は適用されません。
シャッフル: データバンク・レコードは、データバンクからランダムに選択され、いったん選択されたレコードが再び選択されることはありません。この設定は、カードがなくなるまでトランプの中からカードをランダムに抜くことに似ています。シャッフル・モードは、データバンクのレコード件数が200,000件より少ない場合にのみサポートされています。データバンクのレコード件数が200,000件を超える場合は、実際のデータ・ファイルの値をシャッフルするか、「ランダム」モードを使用する必要があります。
シードの使用: 「ランダム」またはシャッフル・モードで使用する乱数シードを指定します。複数のテストで同じシードを使用すると、すべてのテストで同じ順序の乱数が生成されます。0を指定するか何も指定しない場合、シードは現在の時刻に基づいて自動的に生成されます。
レコード終了時: 指定された範囲のデータバンク・レコードがすべて使用されて新しいレコードがリクエストされた場合に、仮想ユーザーがとるアクションを指定します。指定できるオプションは次のとおりです。
範囲内でループ: 指定された範囲のレコードがすべて使用されると範囲内の最初のレコードに戻り、レコードの分配を続行します。仮想ユーザーが永久に実行されないようにするには、「最大反復数」設定を使用します。
同じレコードを保持: 範囲内のレコードがすべて使用された後でリクエストされた最後のレコードが使い続けられます。それ以上のレコードはデータバンクからリクエストされません。すべてのレコードが使用された後では、JavaコードでのgetNextDatabankRecord()
の呼出しは無視されます。仮想ユーザーがgetRecord(
n
)
、getLastRecord()
またはgetFirstRecord()
を使用して個々のレコードをリクエストできるようにするには、カスタムのJavaコードを使用します。
ユーザーの停止: 範囲内のレコードがすべて使用された後で、次にデータバンクからレコードがリクエストされたとき、仮想ユーザーはただちに実行を停止されます。「最大反復数」設定で反復が何回に指定されていても、仮想ユーザーは停止します。
開始レコード: 最初に使用するデータバンク・レコードを指定します。データバンクの最初のレコードは1です。開始レコードは、指定したレコード範囲内になければなりません。たとえば、「指定レコード」を選択して範囲を「5:10」に設定した場合、開始レコードは5以上10以下にする必要があります。
「データバンクの使用」を選択します。
スクリプトに複数のデータベースが設定されている場合には、設定を指定するデータバンク・ファイルを選択します。
データバンク・ファイルの設定を指定します。
再生を停止する反復数のオプションを選択し、任意の再生の反復回数を指定します。
「OK」をクリックします。
コンソール・ビューでスクリプト再生の進捗状況を確認できます。結果ビューでスクリプト再生の結果を確認できます。
一部の設定は組合せることができません。一部の設定を組合せると、スクリプトの実行時に例外が発生する可能性があります。反復オプションを使用するときに注意が必要なケースは次のとおりです。
「次レコード選択」が「ランダム」に設定されている場合は、「レコード終了時」オプションを使用できません。ランダムが選択されていると、ランダムなレコードが無制限に発生します。
全レコードを使い切った後でも、「レコード終了時」が「同じレコードを保持」に設定されていれば、仮想ユーザーはgetRecord(
n
)
を使用して特定のレコードをリクエストすることは可能です。
getRecord(
n
)
、getFirstRecord()
およびgetLastRecord()
Javaコード・メソッドを使用しても、getNextDatabankRecord()
で使用されているレコード・カーソルは移動されません。したがって、次のような結果になります。
getNextDatabankRecord();// returns 1 getRecord(7);// returns 7 getNextDatabankRecord();//returns 2, not 7
「次のレコードの選択」がレコードのシャッフルまたは「ランダム」に設定されている場合は、getRecord(
n
)
、getFirstRecord()
およびgetLastRecord()
Javaコード・メソッドを起動すると、例外がスローされます。
データバンクのインデックスが生成されていない状態で、getRecord(
n
)
、getFirstRecord()
およびgetLastRecord()
Javaコード・メソッドを起動した場合は、例外がスローされます。
「乱数シードを使用する」は、「次レコード選択」がレコードのシャッフルまたは「ランダム」に設定されている場合にのみ使用できます。
データバンクのインデックスが生成不可能な場合は、特定のデータバンクの範囲および開始インデックスが設定されないことがあります。
次レコード選択: : レコードのシャッフルおよび「ランダム」オプションは、データバンクのインデックスが生成可能な場合にのみ設定できます。
「次レコード選択」のレコードのシャッフルは、データバンクのインデックスが生成可能な場合、およびレコード件数が200,000件よりも少ない場合にのみ設定できます。
データ・テーブル・ビューは、機能テスト・スクリプト用のスプレッドシートのようなデータ・テーブルです。データ・テーブル・コンテンツを変更するには、再生前にセルにデータを手動で入力するか、Excelファイルをインポートするかします。
データ・テーブルAPIでは、スクリプトの再生時に機能テスト・スクリプト内で、プログラムによってテーブルのデータにアクセスする方法が提供されます。
スクリプトを再生して結果ビューで結果を選択すると、詳細ビューの「結果データ テーブル」タブに、スクリプトの再生結果データが表示されます。データ・テーブルおよび結果データ・テーブルは、Excelファイルにエクスポートできます。
次の項では、機能テスト・スクリプト内でのデータ・テーブルの使用方法を説明します。
データ・テーブル・サービスは、データ・テーブルAPIを使用してデータ・テーブルに格納されているデータにプログラムでアクセスできるようにします。
データ・テーブル・サービスを有効にするには:
機能テスト・スクリプトを記録します。
「スクリプト」メニューから「スクリプト プロパティ」を選択します。
「モジュール」を選択します。
「データ テーブル」オプションを選択し、「OK」をクリックします。
「表示」メニューから「データ表」を選択し、データ表ビューを表示します。
データは、個々のセル・コンテンツを編集してデータ・テーブルに手動で入力できます。データ・テーブル・セルを右クリックすると、「編集」ショートカット・メニューを開くことができます。
データ・テーブルにデータを手動で入力するには:
機能テスト・スクリプトのデータ・テーブル・サービスを有効にし、データ・テーブル・ビューを表示します。
テーブル・セルを右クリックし、ショートカット・メニューから選択します。データ・テーブルの編集右クリック・メニューを使用すると、データ・テーブルにデータを手動で追加できます。ショートカット・メニューでは、次のオプションが使用できます。
編集: 選択したセルをテキスト編集モードに変更します。セルにデータを入力し、[Enter]を押します。
切取り: 選択したセルからデータを切り取ります。
コピー: 選択したセルのテキストをクリップボードにコピーします。
貼り付け: クリップボードから選択したセルにテキストを貼り付けます。
削除: 選択したセルからテキストを削除します。
前に行を挿入: 新しい行をテーブルの選択した行の前に挿入します。
後に行を挿入: 新しい行をテーブルの選択した行の後に挿入します。
行の削除: 選択した行を表から削除します。
前にカラムを挿入: 新しいカラムをテーブルの選択したカラムの前に挿入します。
後にカラムを挿入: 新しいカラムをテーブルの選択したカラムの後に挿入します。
カラム名の変更: 選択したカラムの新しいヘッダー名を指定するためのダイアログ・ボックスが開きます。
カラム削除: 選択したカラムを表から削除します。
テーブル・セルにデータを入力し、[Enter]を押します。
ワークシート・ショートカット・メニューのオプションを使用すると、データ・テーブルに対してワークシートの追加および削除ができます。
データ・テーブルに対してワークシートの追加および削除を行うには:
データ・テーブル・ビューでワークシート・タブを右クリックし、ワークシート・ショートカット・メニューを開きます。データ・テーブルのワークシート右クリック・メニューを使用すると、データ・テーブルに対してワークシートを手動で追加および削除できます。ワークシート・ショートカット・メニューには次のオプションがあります。
前にシートを挿入: ワークシート・タブをデータ・テーブルの選択したワークシート・タブの前に挿入します。
後にシートを挿入: ワークシート・タブをデータ・テーブルの選択したワークシート・タブの後に挿入します。
シート名の変更: 選択したワークシート・タブの新しい名前を指定するためのダイアログ・ボックスが開きます。
シートの削除: データ・テーブルから選択したワークシートを削除します。削除を確認する確認ダイアログ・ボックスが表示されます。
データ・テーブルに対するワークシートの追加または削除に応じて、ワークシート・ショートカット・メニューのオプションを使用します。
データは、Excelスプレッドシート・ファイルからデータ・テーブルにロードできます。
Excelスプレッドシート・ファイルからデータをロードするには:
機能テスト・スクリプトのデータ・テーブル・サービスを有効にし、データ・テーブル・ビューを表示します。
データ・テーブル・ビューの「インポート」ツールバー・ボタンをクリックします。「データ テーブル インポート」ダイアログ・ボックスには、次のオプションがあります。
ファイル: インポートするファイルの名前を指定します。「参照」ボタンをクリックしてファイルを選択します。
シート: 選択したスプレッドシート・ファイルのワークシートがリストされます。チェック・ボックスを選択または選択解除して、インポートするワークシートを指定します。
既存シートに上書き: 選択すると、データ・テーブルにある同じ名前の既存のワークシートは上書きされます。
カラム名に先頭行を使用する: 選択すると、インポートするスプレッドシート・ファイルの1行目がカラム名として使用され、デフォルトのカラム名は置換されます。
インポートするファイルを入力または選択します。
インポートするワークシートを選択します。
上書きオプションと先頭行の使用オプションを選択または選択解除します。
「OK」をクリックします。
データ・テーブルのデータは、Excelスプレッドシート・ファイルにエクスポートできます。
データ・テーブルからスプレッドシート・ファイルにデータをエクスポートするには:
機能テスト・スクリプトのデータ・テーブル・サービスを有効にし、データ・テーブル・ビューを表示します。
データ・テーブル・ビューの「エクスポート」ツールバー・ボタンをクリックします。「データ テーブルを Excel ファイルにエクスポートする」ダイアログ・ボックスには、次のオプションがあります。
シート: データ・テーブルのワークシートがリストされます。チェック・ボックスを選択または選択解除して、エクスポートするワークシートを指定します。
ファイル: インポートするファイルの名前を指定します。「参照」ボタンをクリックして、名前およびファイルを保存する場所を指定します。
フルパス: データ・テーブル・データがエクスポートされるフルパスおよびファイル名が表示されます。
ファイル名を指定するか、「参照」ボタンを使用して、新しいファイルを保存します。
「OK」をクリックします。
データ・テーブル・コンテンツは、スクリプト再生時に次の方法で変更できます。
ブレークポイントによって再生が一時停止しているときに手動で変更します。
例外によって再生が一時停止しているときに手動で変更します。
「一時停止」ツールバー・ボタンを使用して再生を一時停止しているときに手動で変更します。
datatable
APIを使用して実行時にプログラムで変更します。
データ・テーブルに対する変更は、スクリプト再生結果の一部としてしか保存されません。データ・テーブルおよび結果データ・テーブルは、Excelファイルにエクスポートできます。
以降の項では、datatable
APIを使用してデータ・テーブルのデータをプログラムで変更する方法の例を示します。
datatable
APIを使用すると、スクリプトの再生時にデータ・テーブルの値をプログラムで取得、設定できます。以降の例に、datatable
APIのgetValue()
メソッドとsetValue()
メソッドを使用して値を取得、設定する方法を示します。
次のスクリプト・コードの例では、現在のワークシートの行1、列Aのセルの値を取得し、結果ビューに値を表示します。
Object cellValue1 = datatable.getValue(1, "A"); info("cell value = " + cellValue1.toString());
次のスクリプト・コードの例では、「Sheet1」ワークシートの行1、列Aのセルの値を取得し、結果ビューに値を表示します。
Object cellValue2 = datatable.getValue("Sheet1", 1, "A"); info("cell value = " + cellValue2.toString());
次のスクリプト・コードの例では、行1、列Aのセルの値をブール値true
に設定します。
datatable.setValue(1, "A", true);
次のスクリプト・コードの例では、行1、列Aのセルの値をdouble値10.5
に設定します。
datatable.setValue(1, "A", 10.5);
次のスクリプト・コードの例では、行1、列Aのセルの値を文字列値myString
に設定します。
datatable.setValue(1, "A", "myString");
次のスクリプト・コードの例では、「Sheet1」の行1、列Aのセルの値をブール値true
に設定します。
datatable.setValue("Sheet1", 1, "A", true);
次のスクリプト・コードの例では、「Sheet1」の行1、列Aのセルの値をdouble値10.5
に設定します。
datatable.setValue("Sheet1", 1, "A", 10.5);
次のスクリプト・コードの例では、「Sheet1」の行1、列Aのセルの値を文字列値myString
に設定します。
datatable.setValue("Sheet1", 1, "A", "myString");
datatable
APIを使用すると、スクリプトの再生時にデータ・テーブルの行および列をプログラムで追加、削除できます。以降の例に、datatable
APIのaddColumn()
、deleteColumn()
、insertRow()
およびdeleteRow()
の各メソッド使用して行および列を追加、削除する方法を示します。
次のスクリプト・コードの例では、New Column
という新しい列を現在のワークシートの最後の列に後に追加します。
datatable.addColumn("New Column");
次のスクリプト・コードの例では、New Column
という新しい列を現在のワークシートの、インデックス値が0
の列の前に追加します。
datatable.addColumn("New Column", 0);
次のスクリプト・コードの例では、New Column
という新しい列を「Sheet1」ワークシートの最後の列に後に追加します。
datatable.addColumn("Sheet1", "New Column");
次のスクリプト・コードの例では、New Column
という新しい列を「Sheet1」ワークシートの、インデックス値が0
の列の前に追加します。
datatable.addColumn("Sheet1", "New Column", 0);
次のスクリプト・コードの例では、列A
を現在のワークシートから削除します。
datatable.deleteColumn("A");
次のスクリプト・コードの例では、列A
を「Sheet1」ワークシートから削除します。
datatable.deleteColumn("Sheet1", "A");
datatable
APIを使用すると、スクリプトの再生時にワークシートをプログラムで追加、削除できます。以降の例に、datatable
APIのaddSheet()
メソッドとdeleteSheet()
メソッドを使用してワークシートを追加、削除する方法を示します。
datatable
APIを使用すると、スクリプトの再生時にシート、行および列の数をプログラムで取得できます。以降の例に、datatable
APIのgetSheetCount()
、getRowCount()
およびgetColumnCount()
の各メソッドを使用してシート、行および列の数を取得する方法を示します。
次のスクリプト・コードの例では、データ・テーブルからシート数を取得し、結果ビューに値を表示します。
int sheetCount = datatable.getSheetCount(); info("Sheet count = " + sheetCount);
次のスクリプト・コードの例では、現在のワークシートから行数を取得し、結果ビューに値を表示します。
int rowCount = datatable.getRowCount(); info("row count = " + rowCount);
次のスクリプト・コードの例では、「Sheet1」ワークシートから行数を取得し、結果ビューに値を表示します。
int rowCount1 = datatable.getRowCount("Sheet1"); info("row count Sheet1 = " + rowCount1);
次のスクリプト・コードの例では、「Sheet1」ワークシートから列数を取得し、結果ビューに値を表示します。
int columnCount = datatable.getColumnCount("Sheet1"); info("column count Sheet1 = " +columnCount);
次のスクリプト・コードの例では、インデックスが0
のワークシートから列数を取得し、結果ビューに値を表示します。
int columCount0 = datatable.getColumnCount(0); info("column count Sheet index 0 = " + columnCount);
datatable
APIを使用すると、スクリプトの再生時に現在のシート、行および列をプログラムで取得できます。以降の例に、datatable
APIのgetCurrentSheet()
メソッドとgetCurrentRow()
メソッドを使用してシート、現在のシート、行および列を取得する方法を示します。
datatable
APIを使用すると、スクリプトの再生時に次の行および前の行をプログラムで設定できます。以降の例に、datatable
APIのsetNextRow()
メソッドとgetCurrentRow()
メソッドを使用して次の行および前の行を設定する方法を示します。
datatable
APIを使用すると、スクリプトの再生時にスプレッドシート・ドキュメントおよびワークシートをプログラムでインポート、エクスポートできます。以降の例に、datatable
APIのimportExcel()
、importSheet()
、exportToExcel()
およびexportSheet()
の各メソッドを使用してスプレッドシート・ファイルおよびワークシートをインポート、エクスポートする方法を示します。
次のスクリプト・コードの例では、myXls.xls
Excelスプレッドシート・ドキュメントをデータ・テーブルにインポートします。
datatable.importExcel("c:\\myXls.xls");
次のスクリプト・コードの例では、「SourceSheet」ワークシートのみをmyXls.xls
Excelスプレッドシート・ドキュメントからインポートし、そのワークシートを「DestinationSheet」という名前でデータ・テーブルに追加します。
datatable.importSheet("c:\\myXls.xls", "SourceSheet", "DestinationSheet");
次のスクリプト・コードの例では、myXls.xls
Excelスプレッドシート・ドキュメントからすべてのワークシートをインポートし、同じ名前のシートは上書きしてデータ・テーブルに追加します。
datatable.importSheets("c:\\myXls.xls", true);
次のスクリプト・コードの例では、myXls.xls
Excelスプレッドシート・ドキュメントから指定したリストのワークシートをインポートし、同じ名前のシートは上書きしてデータ・テーブルに追加します。
import java.util.List; import java.util.ArrayList; //[...] List<String> sheetList = new ArrayList<String>(); sheetList.add("Sheet1"); sheetList.add("Sheet2"); datatable.importSheets("c:\\myXls.xls", sheetList, true);
次のスクリプト・コードの例では、myXls.xls
Excelスプレッドシート・ドキュメントから指定したリストのワークシートをインポートし、同じ名前のシートは上書きして、1行目を使用してデータ・テーブルに追加します。
import java.util.List; import java.util.ArrayList; //[...] List<String> sheetList = new ArrayList<String>(); sheetList.add("Sheet1"); sheetList.add("Sheet2"); datatable.importSheets("c:\\myXls.xls", sheetList, true, true);
次のスクリプト・コードの例では、myXls.xls
Excelスプレッドシート・ドキュメントをデータ・テーブルからファイルにエクスポートします。
datatable.exportToExcel("c:\\myXls.xls");
次のスクリプト・コードの例では、「SourceSheet」ワークシートのみを「DestinationSheet」という名前でデータ・テーブルからmyXls.xls
Excelスプレッドシート・ドキュメントにエクスポートします。
datatable.exportSheet("c:\\myXls.xls", "SourceSheet", "DestinationSheet");
次のスクリプト・コードの例では、myXls.xls
Excelスプレッドシート・ドキュメントからすべてのワークシートをインポートし、同じ名前のシートは上書きしてデータ・テーブルに追加します。
datatable.importSheets("c:\\myXls.xls", true);
次のスクリプト・コードの例では、指定したリストのワークシートをデータ・テーブルからmyXls.xls
Excelスプレッドシート・ドキュメントにエクスポートします。
import java.util.List; import java.util.ArrayList; //[...] List<String> sheetList = new ArrayList<String>(); sheetList.add("Sheet1"); sheetList.add("Sheet2"); datatable.exportSheets("c:\\myXls.xls", sheetList);