Web アプリケーションの解析ルールの例

サンプル Web アプリケーション ShopIt は、セッション ID を含むフォーム定義によって、Silk Performer Recorder にコンテキストなしの WebPageUrl() 関数を生成させる意図で作成したものです。これは、JavaScript で URL を組み立てることによって実現されています。記録ルールを使用せずに ShopIt を記録すると、ハードコーティングされたセッション ID を含むスクリプトが生成されます。

この HTTP 解析ルールの例では、セッション ID を含むフォーム定義によって、コンテキストなしの WebPageUrl() 関数が生成されています。[スクリプトの試行] を実行すると、ハードコードされたセッション ID が原因で再生エラーが発生します。

TrueLog Explorer のセッション処理カスタマイズ機能では、次のようにスクリプトを変更することによって、この問題を解決します。

var
  sFormSid1     : string (100);
  sSessionInfo1  : string (100);

  ...

  WebParseDataBoundEx(sSessionInfo1, STRING_COMPLETE,
    "name=\"", 5, "\"", WEB_FLAG_IGNORE_WHITE_SPACE, 1);
  WebPageLink("Check out", "ShopIt - Check Out"); // Link 3
  Print("sSessionInfo1: " + sSessionInfo1);

  ...

  sFormSid1 := sSessionInfo1;
  WebPageUrl(sParsedUrl,
    "Unnamed page", SHOPITV60_KINDOFPAYMENT_ASP004);

  ...

dclform
  ...
  SHOPITV60_KINDOFPAYMENT_ASP004:
    "choice"                    := "CreditCard",
    "price"                     := "115.8",
//     "sid"                       := "858891471";
    "sid"                       := sFormSid1;

カスタム Recorder の詳細

カスタマイズが完了して、スクリプトが正しく実行されるようになりました。しかし、今後記録されるスクリプトでも、毎回カスタマイズを行わなければならないという問題が残ります。

HTTP 解析ルールを利用すると、今後は、この種のカスタマイズを Silk Performer Recorder に自動的に行わせることができます。つまり、手動の操作なしで、記録スクリプトを自動生成できます。

それには、各セッション ID の解析方法を調査する必要があります。TrueLog Explorer によって提示されたカスタマイズを見ると、セッション ID が最初に発生した API 呼び出しがわかります。また、各セッション ID を解析するために使用できる境界もわかります。

TrueLog Explorer を使用して、HTML コード内でセッション ID が最初に出現する場所を見つけます。

<script LANGUAGE="JavaScript">
  function doProcess(mylink)
  {
    scheme="http://";
    server="lab3";
    serverport="";
    path="/ShopItV60/";
    file="kindofpayment.asp?";
    name="858891471";
      price="115.8";
    choice="CreditCard";
    mylink.href=scheme + server + serverport + path + file + "choice=" +
      choice + "&price=" + price + "&sid=" + name;
  }
</script>   

TrueLog Explorer によって識別された左境界 name=" と 右境界 " は、セッション ID を抽出するためには妥当な選択です。

これで、HTTP 解析ルールの初期バージョンを Recorder 用に書き込むことができます。

<?xml version="1.0" encoding="UTF-8"?>
<RecordingRuleSet>

  <HttpParsingRule>
    <Name>ShopIt V5.1 Session Id</Name>

    <Search>
      <SearchIn>Body</SearchIn>
      <LB>
        <Str>name=&quot;</Str>
      </LB>
      <RB>
        <Str>&quot;</Str>
      </RB>
    </Search>

    <ScriptGen>
      <VarName>ShopItSessionId</Varname>
    </ScriptGen>
  
  </HttpParsingRule>

</RecordingRuleSet>

ShopIt のセッション ID は、HTTP のレスポンス ヘッダーには存在しないので、レスポンス ボディだけを検索するように指定します (Search\SearchIn 属性を使用)。

左境界 (Search\LB\Str 属性で指定) を検索して、セッション ID を見つけるように設定します。
注: XML では、引用符 (") は、特殊文字列 &quot; を使用してエンコードされます。

セッション ID の終りには、単一引用符が付きます。これは、Search\RB\Str 属性で指定します。ここで、再び、引用符がエンコードされています。

最後に、解析結果を格納する変数の名前を定義しています。この名前は、ScriptGen\VarName 属性を使用して指定します。

このルール ファイルをすべてのプロジェクトでグローバルに利用できるようにするには、Silk PerformerInclude ディレクトリに保存します。ファイル名は任意の長さにできますが、ファイルの拡張子は .xrl にする必要があります。この記録ルールを 1 つのプロジェクトだけで使用する場合は、このファイルを、特定の Silk Performer プロジェクトの Documents ディレクトリに保存します。