VuGen JavaScript エンジンの使用
適用対象: C 言語で記述された Web HTTP/HTML および SAP - Web 仮想ユーザ・スクリプトのみ。
VuGen JavaScript エンジンとは
通常,Web 仮想ユーザ・スクリプトには C コードが含まれています。組み込みの JavaScript エンジンでは,JavaScript コードのスニペットを C コードに挿入できます。
仮想ユーザ・スクリプトでの JavaScript の使用により可能な実行内容
Web - HTTP/HTML または SAP - Web 仮想ユーザ・スクリプトに JavaScript コードを挿入することで,クライアントとサーバ間で送信する要求メッセージや応答メッセージに含める文字列を操作できます。通常,文字列の操作は相関およびパラメータ化を行う場合に役に立ちます。典型的な文字列の操作には,10 進数から 16 進数への変換,Base64 のエンコードおよびデコード,URL のエンコードおよびデコード,JSON 形式データ内のオブジェクト値へのアクセスなどがあります。
注: 組み込まれた DFE(データ形式拡張機能)を使用すると,これらの文字列の操作手順の多くを実行できます。詳細については,「データ形式拡張機能(DFE) - 概要」 を参照してください。
クライアント側の論理が JavaScript で実装されている場合,JavaScript コードを仮想ユーザ・スクリプトに挿入すると便利な場合があります。元のクライアント側の JavaScript コードのスニペットを仮想ユーザ・スクリプトに挿入することで,JavaScript 論理を C コードに書き直し,それを仮想ユーザ・スクリプトに含める手間を省くことができます。
仮想ユーザ・スクリプトで JavaScript コードを使用して,XMLHTTPRequest を実行できます。その場合,標準の Javascript API を使用して HTTP または HTTPS 要求を生成し,送信できます。そのような API には,非同期の要求の送信,応答を処理するコールバックの割り当て,XML 形式の応答の読み取りなどが含まれます。XMLHTTPRequest のこうした使用方法では,web_url または web_custom_request などのアクション・ステップへの呼び出しが置き換えられる場合があります。
JavaScript スニペットを使用する理由
C コードのみを使用して必要な機能を達成することも可能ですが,JavaScript を仮想ユーザ・スクリプトに含めることは,次の点において有効な場合があります。
- JavaScript は C よりも直感的で,実装が容易である。
- JavaScript の正規表現ライブラリによる正規表現の作業に関する課題が簡略化されている。
- 文字列操作を支援する JavaScript ライブラリが多く存在する。
- クライアント側の論理は通常 JavaScript で実装されます。元の JavaScript コードのスニペットを挿入することで,JavaScript クライアント論理を C コードに変換する手間を省くことができます。
すべてのプロトコルの仮想ユーザ・スクリプトで JavaScript エンジンを使用することが可能かどうか
可能ではありません。JavaScript エンジンでは,Web - HTTP/HTML または SAP - Web 仮想ユーザ・スクリプトにのみ JavaScript を挿入できます。
JavaScript エンジンが役に立つシナリオの例
次のシナリオでは,JavaScript コードを仮想ユーザ・スクリプトに含めると有効な場合があります。
クライアントとサーバ間で送信される要求および応答メッセージには,Base64 コード化スキームを使用してエンコードされるデータが含まれています。このデータはエンコードされるため,raw データをパラメータ化または相関することは通常困難で,不可能な場合もあります。パラメータ化または相関を可能にするためにデータをデコードし,サーバに送信する前に再びエンコードする必要があります。JavaScript スニペットを仮想ユーザ・スクリプトに含めることで,必要な Base64 のデコードおよびエンコード機能を備えた外部の JavaScript ライブラリにアクセスできます。
注: 組み込まれた DFE(データ形式拡張機能)を使用すると,Base64 のデコードおよびエンコードを実装できます。詳細については,「データ形式拡張機能(DFE) - 概要」 を参照してください。
このシナリオでは,クライアントとサーバ間で送信される要求および応答メッセージに,JavaScript URL エンコードを使用してエンコードされる URL が含まれています。JavaScript スニペットを仮想ユーザ・スクリプトに含めることで,必要なデコードおよびエンコードの手順を実行する JavaScript encodeURI() および decodeURI() 関数にアクセスできます。
注: 組み込まれたエンコード DFE(データ形式拡張機能)を使用すると,URL のデコードを実装できます。詳細については,「データ形式拡張機能(DFE) - 概要」 を参照してください。
このシナリオでは,クライアントとサーバ間で送信される要求および応答メッセージに,JSON 形式のデータが含まれています。JSON 形式のデータ内のオブジェクトにアクセスする場合,JavaScript スニペットを仮想ユーザ・スクリプト内部に含めることで,JavaScript eval() 関数にアクセスできます。
注: 組み込まれた JSON-To-XML DFE(データ形式拡張機能)を使用すると JSON 形式のデータ内のオブジェクトにアクセスできます。詳細については,「データ形式拡張機能(DFE) - 概要」 を参照してください。
仮想ユーザ・スクリプトで JavaScript コードを使用すると,XMLHTTPRequest を実行して,指定のサイトから株価をダウンロードできます。XMLHTTPRequest の実行例については,「JavaScript エンジン: XMLHTTPRequest の例」を参照してください。
特定の Web サイトにアクセスする場合,仮想ユーザはユーザ名と暗号化されたパスワードを送信する必要があります。サーバはサーバ・ハッシュをブラウザに送信して,ブラウザが必要な暗号化パスワードを生成できるようにします。ハッシュを生成するためのコードは複雑です。このコードは JavaScript 内に存在します。この JavaScript コードを仮想ユーザ・スクリプトに含めることで,JavaScript 論理を C コードに書き直す必要がなくなります。
Javascript コードを実行するために仮想ユーザ・スクリプトで使用できる API 関数
JavaScript を仮想ユーザ・スクリプトに含めるために使用できる API 関数を次に示します。
-
web_js_run: 指定した JavaScript コードを実行します。
-
web_js_reset: JavaScript コンテキストをクリアします。
web_js_run 関数は,JavaScript コードを仮想ユーザ・スクリプトに含めるために使用します。web_js_run 関数を使用すると,必要な JavaScipt コードを仮想ユーザ・スクリプトに挿入するか,必要な JavaScript コードを含むファイルを参照することができます。
次に,JavaScript コードを仮想ユーザに直接含める方法の例を示します。
web_js_run( "Code=xor((LR.getParam('buffer'), 0xFFFF));", "ResultParam=param", LAST);
次に,JavaScript コードを含むファイルを呼び出すことで JavaScript コードを含める方法の例を示します。
web_js_run( "File=XMLHTTPRequest_sync_sample.js;", "ResultParam=param", LAST);
上記の関数の詳細およびそれらの使用方法については,関数リファレンスを参照してください。
任意の「内部」API 関数にアクセスする JavaScript の使用
仮想ユーザ・スクリプト内の JavaScript では,JavaScript コード内の web_js_run 関数から直接呼び出すことができる数多くの「内部」の API 関数にアクセスできます。これらの関数は,主にパラメータの管理を目的として使用されますが,指定のメッセージのログ記録,データの記録,XMLHTTPRequest の実行を行うために使用することもできます。
API 関数 |
説明 |
引数 |
---|---|---|
LR.advanceParam
(parameter) |
指定したパラメータをファイルの次の値に進めます。
|
parameter: 進めるパラメータの名前。パラメータのタイプはファイルまたは一意の数値である必要があります。
|
LR.setParam(name, value)
|
文字列をパラメータに保存します(パラメータが存在しない場合は作成します)。
|
name: 値の保存先となるパラメータの名前。
value: 値。
|
LR.freeParam(name) | 実行時に動的なパラメータを削除し,バッファを解放します。 |
name: パラメータ名。
|
LR.getParam(name)
|
指定したパラメータの値を返します。
|
name: パラメータ名。
|
LR.log(text, level)
|
メッセージを記録します。
|
text: メッセージ。
level: 次のいずれかになります。
例: LR.log("text", "Error");
|
LR.userDataPoint(name, value)
|
分析に使用するユーザ定義データ・ポイントを記録します。
|
name: データ・ポイントの名前。データ・ポイント名の先頭を HTTP,NON_HTTP,RETRY,mic_,stream_,mms_ の文字列にしないでください。
value: 数値。
|
仮想ユーザに対して Javascript エンジンを有効にする方法
仮想ユーザ・スクリプト内から JavaScript を実行するには,その仮想ユーザ・スクリプトに対して JavaScript エンジンを有効にする必要があります。JavaScript エンジンを有効にするには,[再生]>[実行環境設定]>[インターネット プロトコル]>[基本設定]ビューを開きます。[JavaScript]セクションに移動し,[JavaScript コードの実行を有効にする]オプションを選択します。
注: このオプションを有効にすると,スクリプト内に JavaScript ステップが存在しない場合でも JavaScript ランタイム・エンジンが作成されます。
JavaScript エンジンの設定方法
製品のカスタム JavaScript エンジンを設定するには,仮想ユーザ・スクリプトの実行環境設定を使用します。
JavaScript エンジン(JSE)の実効環境設定にアクセスするには,[再生]>[実行環境設定]>[インターネット プロトコル]>[基本設定]を選択して,[JavaScript]セクションを展開します。
- JavaScript エンジンのランタイム・サイズ: 割り当てられた Javascript エンジンのランタイム・メモリのサイズをキロバイトで指定します。数多くの仮想ユーザを実行している場合は,この値を増やさなければならない場合があります。
- JavaScript エンジンのスレッドごとのスタック・サイズ: JavaScript エンジンのメモリ内の各仮想ユーザ・スレッドのサイズをキロバイトで指定します。大きなオブジェクトまたは深いスタック呼び出しについては,この値を増やさなければならない場合があります。
ユーザ・インタフェースの詳細については,「[基本設定]ビュー -[インターネット プロトコル]」を参照してください。
VuGen の JavaScript エンジンと VuGen の JavaScript プロトコル間の接続
VuGen の JavaScript エンジンと VuGen の JavaScript プロトコルの間には,接続は存在しません。
トラブルシューティング
JavaScript エンジンのサポートを実装することが困難な場合は,次の項目を確認して解決を試みます。
- VuGen の JavaScript エンジンが有効になっていることを確認します。詳細については,LoadRunner JavaScript エンジンを有効にする方法を参照してください。
- JavaScript の制限により,1 つの関数に追加できるオペランドは最大 9,000 です。たとえば文字列を結合する場合,"str1"+"str2"+"str3"+..."str9000" のように,最大 9,000 個の文字列を追加できます。
-
メモリの問題
- 実行環境設定の[反復ごとに新規ユーザをシミュレートする]>[反復ごとにキャッシュをクリアする]を選択すると,各反復の最初に web_js_reset が自動的に呼び出されます。
- [反復ごとに新規ユーザをシミュレートする]>[反復ごとにキャッシュをクリアする]を設定していない場合は,仮想ユーザ・スクリプトで保存済みのコンテキストが不要となっているポイントに web_js_reset の呼び出しを挿入して,過度のメモリ消費を回避します。
web_js_reset 関数の詳細については,関数リファレンスを参照してください。
実行環境設定の詳細については,実行環境設定ビューのオプションの下にあるヒントを参照してください。
-
パフォーマンスの問題
パフォーマンスの問題が発生している場合は,JavaScript の実行環境設定を変更します。詳細については,「[基本設定]ビュー -[インターネット プロトコル]」 を参照してください。