次の方法で共有


方法 : カスタム抽出規則を作成する

更新 : 2007 年 11 月

独自の抽出規則を作成できます。これを行うには、抽出規則クラスから独自の規則を派生します。抽出規則は、ExtractionRule 基本クラスから派生します。

Visual Studio Team System Test Edition には、定義済みの抽出規則がいくつかあります。詳細については、「抽出ルールの概要」を参照してください。

ms243179.alert_note(ja-jp,VS.90).gifメモ :

また、カスタム検証規則を作成することもできます。詳細については、「検証規則について」を参照してください。

カスタム抽出規則を作成するには

  1. Web テストを含むテスト プロジェクトを開きます。

  2. (省略可能) 抽出規則を格納する個別のクラス ライブラリ プロジェクトを作成します。

    ms243179.alert_caution(ja-jp,VS.90).gif重要 :

    このクラスは、テストが含まれているプロジェクトと同じプロジェクトに作成できます。ただし、規則を再利用する予定がある場合は、規則を格納する個別のクラス ライブラリ プロジェクトを作成することをお勧めします。個別のプロジェクトを作成するには、ここで省略可能として説明されている手順を実行する必要があります。

  3. (省略可能) クラス ライブラリ プロジェクトに、Microsoft.VisualStudio.QualityTools.WebTestFramework.dll への参照を追加します。

  4. ExtractionRule クラスから派生するクラスを作成します。Extract メンバと RuleName メンバを実装します。

  5. (省略可能) 新しいクラス ライブラリ プロジェクトをビルドします。

  6. (省略可能) テスト プロジェクトで、カスタム抽出規則を含むクラス ライブラリ プロジェクトへの参照を追加します。

  7. テスト プロジェクトで、Web テスト エディタを使用して Web テストを開きます。

  8. カスタム抽出規則を追加するには、Web テスト要求を右クリックし、[抽出規則の追加] をクリックします。

    [抽出規則の追加] ダイアログ ボックスが表示されます。定義済みの検証規則と共に、カスタム検証規則が [規則の選択] ボックスに表示されます。カスタム抽出規則を選択し、[OK] をクリックします。

  9. Web テストを実行します。

使用例

次のコードは、カスタム抽出規則の実装を示しています。この抽出規則では、指定された入力フィールドから値を抽出します。この例を、独自のカスタム抽出規則のひな形として使用してください。

using System;
using System.Collections.Generic;
using Microsoft.VisualStudio.TestTools.WebTesting;
using System.Globalization;

namespace ClassLibrary2
{
    //-------------------------------------------------------------------------
    // This class creates a custom extraction rule named "Custom Extract Input"
    // The user of the rule specifies the name of an input field, and the
    // rule attempts to extract the value of that input field.
    //-------------------------------------------------------------------------
    public class CustomExtractInput : ExtractionRule
    {
        /// Specify a name for use in the user interface.
        /// The user sees this name in the Add Extraction dialog box.
        //---------------------------------------------------------------------
        public override string RuleName
        {
            get { return "Custom Extract Input"; }
        }

        /// Specify a description for use in the user interface.
        /// The user sees this description in the Add Extraction dialog box.
        //---------------------------------------------------------------------
        public override string RuleDescription
        {
            get { return "Extracts the value from a specified input field"; }
        }

        // The name of the desired input field
        private string NameValue;
        public string Name
        {
            get { return NameValue; }
            set { NameValue = value; }
        }

        // The Extract method.  The parameter e contains the Web test context.
        //---------------------------------------------------------------------
        public override void Extract(object sender, ExtractionEventArgs e)
        {
            if (e.Response.HtmlDocument != null)
            {
                foreach (HtmlTag tag in e.Response.HtmlDocument.GetFilteredHtmlTags(new string[] { "input" }))
                {
                    if (String.Equals(tag.GetAttributeValueAsString("name"), Name, StringComparison.InvariantCultureIgnoreCase))
                    {
                        string formFieldValue = tag.GetAttributeValueAsString("value");
                        if (formFieldValue == null)
                        {
                            formFieldValue = String.Empty;
                        }

                        // add the extracted value to the Web test context
                        e.WebTest.Context.Add(this.ContextParameterName, formFieldValue);
                        e.Success = true;
                        return;
                    }
                }
            }
            // If the extraction fails, set the error text that the user sees
            e.Success = false;
            e.Message = String.Format(CultureInfo.CurrentCulture, "Not Found: {0}", Name);
        }
    }
}
Imports System
Imports System.Collections.Generic
Imports Microsoft.VisualStudio.TestTools.WebTesting
Imports System.Globalization

Namespace ClassLibrary2

    '-------------------------------------------------------------------------
    ' This class creates a custom extraction rule named "Custom Extract Input"
    ' The user of the rule specifies the name of an input field, and the
    ' rule attempts to extract the value of that input field.
    '-------------------------------------------------------------------------
    Public Class CustomExtractInput
        Inherits ExtractionRule

        ' Specify a name for use in the user interface.
        ' The user sees this name in the Add Extraction dialog box.
        '---------------------------------------------------------------------
        Public Overrides ReadOnly Property RuleName() As String
            Get
                Return "Custom Extract Input"
            End Get
        End Property

        ' Specify a description for use in the user interface.
        ' The user sees this description in the Add Extraction dialog box.
        '---------------------------------------------------------------------
        Public Overrides ReadOnly Property RuleDescription() As String
            Get
                Return "Extracts the value from a specified input field"
            End Get
        End Property

        ' The name of the desired input field
        Private NameValue As String
        Public Property Name() As String
            Get
                Return NameValue
            End Get
            Set(ByVal value As String)
                NameValue = value
            End Set
        End Property

        ' The Extract method.  The parameter e contains the Web test context.
        '---------------------------------------------------------------------
        Public Overrides Sub Extract(ByVal sender As Object, ByVal e As ExtractionEventArgs)

            If Not e.Response.HtmlDocument Is Nothing Then

                For Each tag As HtmlTag In e.Response.HtmlDocument.GetFilteredHtmlTags(New String() {"input"})

                    If String.Equals(tag.GetAttributeValueAsString("name"), Name, StringComparison.InvariantCultureIgnoreCase) Then

                        Dim formFieldValue As String = tag.GetAttributeValueAsString("value")
                        If formFieldValue Is Nothing Then

                            formFieldValue = String.Empty
                        End If

                        ' add the extracted value to the Web test context
                        e.WebTest.Context.Add(Me.ContextParameterName, formFieldValue)
                        e.Success = True
                        Return
                    End If
                Next
            End If
            ' If the extraction fails, set the error text that the user sees
            e.Success = False
            e.Message = String.Format(CultureInfo.CurrentCulture, "Not Found: {0}", Name)
        End Sub
    End Class
end namespace

Extract メソッドに、抽出規則の中心的な機能が含まれています。前の例の Extract メソッドは、この抽出規則の対象となる要求が生成する応答を示す ExtractionEventArgs を受け取ります。応答には、応答内のすべてのタグを含む HtmlDocument が含まれています。入力タグは、HtmlDocument からフィルタで除外されます。各入力タグについて、Name プロパティに対してユーザーが指定した値を持つ name という属性があるかどうか、確認されます。一致する属性を持つタグが見つかった場合、value 属性が存在すれば、 その value 属性に含まれている値の抽出が試みられます。存在する場合、タグの名前と値が抽出され、Web テスト コンテキストに追加されます。抽出規則が成功します。

参照

処理手順

方法 : Web テストに抽出規則を追加する

チュートリアル : 検証規則と抽出ルールを Web テストに追加する

方法 : カスタム検証規則を作成する

参照

ExtractionRule

Microsoft.VisualStudio.TestTools.WebTesting.Rules

ExtractAttributeValue

ExtractFormField

ExtractHttpHeader

ExtractRegularExpression

ExtractText

ExtractHiddenFields