動的値の相関

このトピックでは、スクリプト内の動的データを相関するために使用されるプロセスについて説明します。

このトピックの内容:

相関について

サーバーからブラウザーに送信されるWebページには、クライアントが後の要求 (たとえばタイムスタンプを含む可能性のあるセッションID) で送る必要がある動的データが含まれていることがよくあります。このデータは、ページにアクセスするたびに変更されます。

ビジネスプロセスを記録した後、スクリプトにはサーバー応答に動的な値が含まれることがあります。スクリプトが再生されると、これらの記録された値がサーバーに送信されます。ただし、Webサーバーは、これらの値が再生セッションで有効でないため、拒否します。一般的に、これが起こるとテストは失敗します。

再生を成功させるには、スクリプトで次のことを行う必要があります。

  • ヘッダーを含むサーバー応答で動的データを探します。
  • その動的データを抽出して保存します。
  • 記録セッションのハードコードされた動的データを、現在の再生セッションのデータで置き換えます。

記録された動的な値の位置を特定、抽出、および再生時に有効な値で置換するこのプロセスは、「相関」と呼ばれます。

DevWebエンジンは、事前定義された相関ルールを適用するか、記録されたデータに対してレコードスキャンを実行することにより、スクリプト生成中に相関を処理します。

先頭に戻る

相関方法

動的値の自動相関には、ルールベースのスキャンとレコードベースのスキャンの2つの方法があります。どちらのスキャンも、抽出オブジェクトと適用オブジェクトを使用して、生成されたコードに相関を追加します。

標準設定では、ルールスキャンと記録スキャンは無効になっています。これらはgenerator_config.ymlファイル (またはVuGen記録オプション > コード生成) で有効にします。

ルールベースの相関

DevWebエンジンは、標準的な環境で動的な値を相関させるための、事前に定義された拡張可能なルールのセットを実装します。これらのルールは、相関ルールディレクトリの<correlation_rules>.ymlファイルで定義されています。

コード生成中に、オフラインスクリプトジェネレーターは、*.yml相関ルールファイルで見つかったすべてのアクティブ化されたルールをロードし、相関ルールに一致する値についてサーバーの応答をスキャンします。一致する値が見つかると、値を抽出してパラメーターに保存するためのステップがWeb要求に追加されます。

次に、スクリプトコードからその値がスキャンされ、一致したものがパラメーターへの参照に置き換えられます。

ルールベースの相関:

<DevWebルートフォルダー>\generator_config.ymlファイルのcorrelationセクション:

  • rulesScanEnabledtrueに設定して、ルールスキャンを有効にします。
  • スクリプトに表示される抽出値のスキャンタイムアウトや最大長など、関連する他の相関パラメーターの標準設定を変更します。

相関ルールファイルの定義の詳細については、相関ルールの使用を参照してください。

記録ベースの相関

DevWebエンジンは、自動レコードベースの相関を提供します。レコードスキャンが有効になっている場合、コード生成段階で、エンジンはサーバーの応答を自動的にスキャンして相関がないか確認します。この検索は、内部エンジンの構成設定に基づいています。

一致する値が見つかると、ルールスキャン相関の場合と同じように、値を抽出してパラメーターに保存するステップがWeb要求に追加されます。ルールスキャンと記録スキャンの両方が有効になっている場合、ルールスキャンが優先されます。つまり、両方のスキャンで同じ値が識別された場合、エンジンはルールベースの相関を適用します。

レコードスキャンによって追加される抽出オブジェクトタイプは、境界式または正規表現 (定義された優先抽出オブジェクトタイプに応じて)、または検出されたコンテンツタイプに適した抽出オブジェクト (HTML、JSON、XPath抽出オブジェクトなど) です。

注: 記録スキャンでは、事前定義された設定を使用してコンテンツとパターンをフィルタリングし、相関候補の検出に役立てます。これらの構成は、<DevWebルートフォルダー>\resources\CorrelationEngine\record_scan_config.ymlファイルで定義されています。

このファイルは変更しないことをお勧めします。変更が必要な場合は、record_scan_config.ymlファイルを新しい場所にコピーし、コピーに変更を加えます。次に、以下に説明するように、recordScanConfigDirectoryキーのパスを変更します。

ルールベースの相関の使用:

  1. <DevWebルートフォルダー>\generator_config.ymlファイルのcorrelationセクション:

    • recordScanEnabledtrueに設定して、レコードスキャンを有効にします。
    • 必要に応じて、extractorTypeプロパティのプレーンテキストの優先抽出オブジェクトタイプをboundaryまたはregexpに変更します。
    • 必要に応じて、recordScanConfigDirectoryプロパティのパスを更新します。
    • スクリプトに表示される抽出値のスキャンタイムアウトや最大長など、関連する他の相関パラメーターの標準設定を変更します。
  2. スクリプトを記録します。レコードスキャンによって追加された抽出オブジェクトは、コメントに示されています。

  3. コード生成後、生成ログ..\<スクリプトフォルダー>\codegenを使用して、見つかった候補が実際の相関であるかどうかを識別できます。

先頭に戻る

抽出オブジェクトと適用オブジェクト

DevWebエンジンの相関は、抽出オブジェクトおよび適用オブジェクトに基づいています。抽出オブジェクトは、ルールベースまたはレコードベースのスキャンに基づくコード生成中に自動的に追加できます。またはスクリプトに手動で追加します。

サーバーの応答をスキャンするとき、オフラインスクリプトジェネレーターは、識別された動的な値ごとに抽出オブジェクトを追加します。これにより、値を抽出してパラメーターに保存できます。次に、スクリプトコードからその値がスキャンされ、一致したものがパラメーターへの参照に置き換えられます。

ヒント: ログレベル (rts.yml内) がdebugまたはtraceに設定されている場合、抽出オブジェクトの置換がログに報告されます。ログメッセージには、抽出オブジェクトが適用されるスクリプト内の各場所と、各インスタンスに使用される代替値が記録されます。

適用オブジェクトタイプ

次の表に、使用可能な適用オブジェクトの種類を示します。

サポートされているパラメーターの定義は、次のとおりです。適用オブジェクトパラメーター

適用オブジェクトタイプ 説明 サポートされているパラメーター
simple 抽出された値を、抽出オブジェクトから作成された動的パラメーターに置き換えます。置換は、元の応答 (抽出オブジェクトを含むサーバー応答) に対する後続の要求で発生する可能性があります。
  • occurrence (任意)
  • scope (任意)
  • fieldName (任意)
boundary 定義された境界 (左と右) の間で抽出された値を、抽出オブジェクトから作成された動的パラメーターに置き換えます。置換は、元の応答 (抽出オブジェクトを含むサーバー応答) に対する後続の要求で発生する可能性があります。
  • leftBoundary (必須)
  • rightBoundary (必須)
  • occurrence (任意)
  • scope (任意)
  • caseInsensitive (任意)
  • fieldName (任意)
regexp 正規表現に従って抽出された値を、抽出オブジェクトから作成された動的パラメーターに置き換えます。置換は、元の応答 (抽出オブジェクトを含むサーバー応答) に対する後続の要求で発生する可能性があります。
  • expression (必須)
  • flags (任意)
  • occurrence (任意)
  • scope (任意)
  • groupNumber (任意)
  • fieldName (任意)
none

スクリプトで抽出オブジェクトの生成を有効にするが、抽出された値をスクリプトに適用しない場合に使用します。

これにより、標準設定の動作が回避されます。DevWebが抽出された値を適用する場所を見つけられない場合、抽出オブジェクトは生成されません。

n/a

適用オブジェクトパラメーター

以下に、適用オブジェクトパラメーターの定義を示します。各適用オブジェクトタイプでサポートされているパラメーターを確認するには、上記の適用オブジェクトタイプを参照してください。

expression 文字列 正規表現。
flags 文字列 正規表現のフラグ。
leftBoundary 文字列 境界。
rightBoundary 文字列 境界。
caseInsensitive ブール値

大文字と小文字を区別しない比較を使用して境界を検索します。

標準設定: true

occurrence 文字列/数値

置き換える値の出現:

  • all:: 見つかったすべての出現が置き換えられます。
  • first: 最初の出現が置き換えられます。
  • last: 最後の出現が返されます。
  • 置き換える値の位置を定義する数値。ここで、0は最初の出現を定義します。したがって、たとえば、2は3番目の出現を置き換えます。

occurrenceが定義されていない場合、最初の出現が置き換えられます。

scope

文字列

値が置き換えられる関連HTTP部分: urlquerystringheadersbody、またはall

標準設定: all

fieldName 文字列のリスト

scope領域内のフォーカスを定義する1つまたは複数のキー。

たとえば、scopeの値がheadersであるが、特定のヘッダーMyHeaderに置換を含める場合は、fieldName[“ MyHeader”] に設定します。

先頭に戻る

相関ルールの使用

Rules-based相関スキャンは、相関ルール定義ファイル<correlation_rules>.ymlで定義されたルールを使用します。カスタマイズされた相関ルールファイルを作成して、特定のDevWebスクリプトのルールを追加および編集します。

相関ルールファイルは (標準設定では) <DevWebのルートフォルダー>\CorrelationRules\ フォルダーにあります。このフォルダーには、ASP.NETテスト環境、correlation_ASP_NET.yml用に事前定義された相関ルールが含まれます。このファイルを編集するか、コピーを作成してテンプレートとして使用できます。テスト環境の必要に応じて、ルール定義を編集および拡張します。以下のサンプルファイルを参照することもできます。

各相関ルールグループには、抽出オブジェクトと適用オブジェクトが含まれます。ファイル内で、各ルールグループを有効または無効にしたり、相関ルールファイル全体を有効または無効にしたりできます。ルールスキャンがgenerator_config.ymlで有効になっている場合、コード生成中にオフラインスクリプトジェネレーターはCorrelationRulesフォルダー内のすべての*.ymlファイルをスキャンし、有効なすべてのルールを読み込みます。

ヒント: 次のビデオを確認します: チュートリアル#7: 相関

相関ルールを使用するには、次の手順を実行します。

  1. テスト環境の相関ルールファイル (* .yml) を定義します。ファイルを標準設定の<DevWebのルートフォルダー>\CorrelationRules\フォルダーまたは別の場所に保存します。

  2. スクリプトを記録する前に、相関* .ymlファイルで必要なすべての相関ファイルとルールグループが有効になっていることを確認してください。
  3. <DevWebルートフォルダー>\generator_config.ymlファイルで相関パラメーターを構成します。これには、rulesScanEnabledtrueに設定し、相関ルールファイルに別のフォルダーを使用している場合は、rulesDirectoryパスを変更します。(上記のルールベースの相関を参照してください。)
  4. スクリプトを記録します。ルールに一致するものが見つかると、値の抽出オブジェクトがスクリプトに追加されます。

サンプルファイル

次に、注釈付きの<correlation_rules>.ymlファイルの例を示します。

categories: 
  - name: category1                   #The name of the category, not used in code, this is for the user
    enabled: true                     #Allows the user to enable or disable all the rules in a category
    rules:                            #A list of rules
      - name: myRule1                 #The name of the rule, used in the code the user writes to identify the rule.Must be unique across all categories
        type: boundary                #The type of rule.Can be "boundary", "regexp", "json", "xpath"
        enabled: true                 #Allows the user to enable and disable particular rules
        options:                      #The options particular to this rule type
           leftBoundary: abc          #Left boundary of the boundary-based correlation
           rightBoundary: efg         #Right boundary of the boundary-based correlation
           caseInsensitive: false     #Search boundaries using case-insensitive comparison (default: true)
           scope: all                 #Scope define the required HTTP part: headers, body, or all Default: all
        appliers: 
          - type: simple              #The type of the applier.One of "simple", "boundary", "regexp" or "none" which prevent apply automatically
            scope: headers            #Scope define the required HTTP part: url, querystring, headers, body, or all Default: all
            options: 
              occurrence: first       #Occurrence focus on how many items to apply on all, first, last or valid number
              fieldName: ["cookie"]   #Field Name allow the applier to focus on one or more key entries
      - name: myRule2
        type: regexp
        enabled: true
        options: 
           expression: "[0..9]*"      #The regular expression.See https://github.com/google/re2/wiki/Syntax for details
           flags: "im"                #The flags of the regular expression
           groupNumber: 0             #The group number (Default: 1 - for the first group)
           scope: body                #Scope define the required HTTP part: headers, body, or all Default: all
        appliers: 
          - type: boundary
            scope: url
            options: 
              leftBoundary: le>            #Left boundary of the boundary based correlation
              rightBoundary: </t            #Right boundary of the boundary based correlation
              caseInsensitive: false         #Search boundaries using case-insensitive comparison (default: true)
  - name: category2
    enabled: true
    rules: 
      - name: myRule3
        type: json
        enabled: true
        options: 
           path: abc                        #The JSONPath.See http://goessner.net/articles/JsonPath/ for details
        appliers: 
          - type: regexp
            scope: all
            options: 
              expression: "\\w+(.*?)\\w+"      #The regular expression see https://github.com/google/re2/wiki/Syntax for details
              flags: "i"                       #The flags of the regular expression, please note the group number is default 1 no need to define it
              occurrence: first
      - name: anotherRule3                     #Appliers section is optional on this case it will use the Default Applier
        type: xpath
        enabled: true
        options: 
          path: //myEntry                      #The XPath, see https://godoc.org/gopkg.in/xmlpath.v2 for details

ルールに適用オブジェクトが定義されていない場合は、標準設定の適用オブジェクトが使用されます。

appliers: 
  - type: simple
    scope: all
    options: 
      occurrence: all

先頭に戻る

関連項目: