HOW TO:建立 Web 效能測試的自訂擷取規則
您可以建立自己的擷取規則。 若要執行這項操作,可以從擷取規則類別中衍生自己的規則。 擷取規則衍生自 ExtractionRule 基底類別。
Visual Studio Ultimate提供了一些預先定義的擷取規則。 如需詳細資訊,請參閱在 Web 效能測試中使用驗證規則和擷取規則。
注意事項 |
---|
您也可以建立自訂驗證規則。如需詳細資訊,請參閱建立和使用負載和 Web 效能測試的自訂外掛程式。 |
需求
- Visual Studio Ultimate
若要建立自訂擷取規則
開啟包含 Web 效能測試的測試專案。
(選擇性) 建立個別的類別庫專案,以存放擷取規則。
重要
您可以在測試所在的同一個專案中建立類別。不過,如果要重複使用規則,最好是建立個別的類別庫專案,以存放規則。如果您要建立個別的專案,必須完成本程序中的選擇性步驟。
(選擇性) 在類別庫專案中,加入 Microsoft.VisualStudio.QualityTools.WebTestFramework dll 的參考。
建立從 ExtractionRule 類別衍生的類別。 實作 Extract 和 RuleName 成員。
(選擇性) 建立新的「類別庫」專案。
(選擇性) 在測試專案中,加入包含自訂擷取規則之類別庫專案的參考。
在 [測試專案] 中,使用 [Web 效能測試編輯器] 開啟 Web 效能測試。
若要加入自訂擷取規則,請以滑鼠右鍵按一下 Web 效能測試要求,然後選取 [加入擷取規則]。
[加入擷取規則] 對話方塊隨即出現。 您會在 [選取規則] 清單中看到您的自訂驗證規則,以及預先定義的驗證規則。 選取自訂擷取規則,然後點選 [確定]。
執行您的 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 performance 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 performance 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 performance 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 performance 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 的屬性 (Attribute),其值與使用者提供的 Name 屬性 (Property) 值相同。 如果找到屬性相符的標籤,就會試著擷取 value 屬性 (如果存在) 所含的值。 如果這個屬性存在,就會擷取標籤的名稱和值,然後加入至 Web 效能測試內容中。 此擷取規則通過。
請參閱
工作
參考
Microsoft.VisualStudio.TestTools.WebTesting.Rules