共用方式為


HOW TO:建立 Web 效能測試編輯器的自訂 HTTP 內容編輯器

這個主題適用於:

Visual Studio Ultimate

Visual Studio Premium

Visual Studio Professional 

Visual Studio Express

標題適用於 標題不適用於 標題不適用於 標題不適用於

您可以建立自訂內容編輯器,讓您編輯 Web 服務要求的字串內容或二進位內容,例如 SOAP、REST、asmx、wcf、RIA 和其他 Web 服務要求類型。

您可以實作兩種類型的編輯器:

這些介面包含在 Microsoft.VisualStudio.TestTools.WebTesting 命名空間中。

建立 Windows 控制項程式庫專案

使用 Windows 控制項程式庫專案建立使用者控制項

  1. 在 Visual Studio Ultimate 中,按一下 [檔案] 功能表上的 [新增],然後選取 [專案]。

    [新增專案] 對話方塊隨即出現。

  2. 在 [已安裝的範本] 底下依據您的程式設計偏好選取 [Visual Basic] 或 [Visual C#],然後選取 [Windows]。

    注意事項注意事項

    此範例使用 Visual C#。

  3. 在範本的清單中,選取 [Windows Form 控制項程式庫]。

  4. 在 [名稱] 文字方塊中輸入名稱,例如 MessageEditors,然後按一下 [確定]。

    注意事項注意事項

    此範例使用 MessageEditors。

    專案會加入至新的方案中,而且設計工具中會出現名為 UserControl1.cs 的 UserControl

  5. 從 [工具箱] 的 [通用控制項] 分類底下,將 RichTextBox 拖曳至 UserControl1 介面上。

  6. 按一下 RichTextBox 控制項右上角的 [動作] 標籤圖像 (智慧標籤圖像),然後選取並且 [停駐於父容器中]。

  7. 在 [方案總管] 中,以滑鼠右鍵按一下 [Windows Form 程式庫] 專案,然後選取 [屬性]。

  8. 在 [屬性] 中,選取 [應用程式] 索引標籤。

  9. 在 [目標 Framework] 下拉式清單中選取 [.NET Framework 4]。

  10. [目標 Framework 變更] 對話方塊隨即出現。

  11. 按一下 []。

  12. 在 [方案總管] 中,以滑鼠右鍵按一下 [參考] 節點,然後選取 [加入參考]。

  13. 接著會顯示 [加入參考] 對話方塊。

  14. 按一下 [.NET] 索引標籤並向下捲動,然後選取 [Microsoft.VisualStudio.QualityTools.WebTestFramework],再按一下 [確定]。

  15. 如果 [設計工具檢視] 未保持開啟狀態,請在 [方案總管] 中以滑鼠右鍵按一下 [UserControl1.cs],然後選取 [設計工具檢視]。

  16. 以滑鼠右鍵按一下設計介面,然後選取 [檢視程式碼]。

  17. (選擇性) 將類別和建構函式的名稱從 UserControl1 變更為有意義的名稱,例如 MessageEditorControl:

    注意事項注意事項

    範例中會使用 MessageEditorControl。

    namespace MessageEditors
    {
        public partial class MessageEditorControl : UserControl
        {
            public MessageEditorControl()
            {
                InitializeComponent();
            }
        }
    }
    
  18. 加入下列屬性,以便取得並設定 RichTextBox1 中的文字。 IStringHttpBodyEditorPlugin 介面將使用 EditString,而 IBinaryHttpBodyEditorPlugin 將使用 EditByteArray:

            public String EditString
            {
                get
                {
                    return this.richTextBox1.Text;
                }
                set
                {
                    this.richTextBox1.Text = value;
                }
            }
    
    public byte[] EditByteArray
            {
                get
                {
                    return System.Convert.FromBase64String(richTextBox1.Text);
                }
                set
                {
                    richTextBox1.Text = System.Convert.ToBase64String(value, 0, value.Length);
                }
            }
    

在 Windows 控制項程式庫專案中加入類別

將類別加入至專案。 它會用來實作 IStringHttpBodyEditorPluginIBinaryHttpBodyEditorPlugin 介面。

此程序之程式碼的概觀

前述程序中建立的 MessageEditorControl UserControl 會具現化為 messageEditorControl:

private MessageEditorControl messageEditorControl

messageEditorControl 執行個體會裝載於 CreateEditor 方法建立的外掛程式對話方塊內。 此外,messageEditorControl 的 RichTextBox 中會填入 IHttpBody 的內容。 不過,除非 SupportsContentType 傳回 true,否則無法建立外掛程式。 以此編輯器為例,如果 IHttpBody 中的 ContentType 包含 "xml",則 SupportsContentType 會傳回 true。

當完成編輯字串內容而且使用者按一下外掛程式對話方塊中的 [確定] 時,便會呼叫 GetNewValue,以取得做為字串的已編輯文字,並且更新 [Web 測試效能編輯器] 之要求中的 [字串內容]。

建立類別並實作 IStringHttpBodyEditorPlugin 介面程式碼

  1. 在 [方案總管] 中,以滑鼠右鍵按一下 [Windows Form 控制項程式庫] 專案,並選取 [加入新項目]。

  2. 接著會顯示 [加入新項目] 對話方塊。

  3. 選取 [類別]。

  4. 在 [名稱] 文字方塊中輸入有意義的類別名稱,例如 MessageEditorPlugins。

  5. 按一下 [加入]。

    Class1 會加入至專案,並顯示在 [程式碼編輯器] 中。

  6. 在 [程式碼編輯器] 中,加入下列 using 陳述式:

    using Microsoft.VisualStudio.TestTools.WebTesting;
    
  7. 撰寫或複製下列程式碼,以便從 IStringHttpBodyEditorPlugin 介面具現化 XmlMessageEditor 類別,並實作需要的方法:

        /// <summary>
        /// Editor for generic text based hierarchical messages such as XML and JSON.
        /// </summary>
        public class XmlMessageEditor : IStringHttpBodyEditorPlugin
        {
            public XmlMessageEditor()
            {
            }
    
            /// <summary>
            /// Determine if this plugin supports the content type.
            /// </summary>
            /// <param name="contentType">The content type to test.</param>
            /// <returns>Returns true if the plugin supports the specified content type.</returns>
            public bool SupportsContentType(string contentType)
            {
                return contentType.ToLower().Contains("xml");
            }
    
            /// <summary>
            /// Create a UserControl to edit the specified bytes.  
            /// This control will be hosted in the
            /// plugin dialog which provides OK and Cancel buttons.
            /// </summary>
            /// <param name="contentType">The content type of the BinaryHttpBody.</param>
            /// <param name="initialValue">The bytes to edit.  The bytes are the payload of a BinaryHttpBody.</param>
            /// <returns>A UserControl capable of displaying and editing the byte array value of the specified content type.</returns>
            public object CreateEditor(string contentType, string initialValue)
            {
                messageEditorControl = new MessageEditorControl();
                messageEditorControl.EditString = initialValue;
                return this.messageEditorControl;
            }
    
            /// <summary>
            /// Gets the edited bytes after the OK button is clicked on the plugin dialog.
            /// </summary>
            public string GetNewValue()
            {
                return messageEditorControl.EditString;
            }
    
            private MessageEditorControl messageEditorControl;
        }
    

將 IBinaryHttpBodyEditorPlugin 加入至類別

實作 IBinaryHttpBodyEditorPlugin 介面。

此程序之程式碼的概觀

IBinaryHttpBodyEditorPlugin 介面的程式碼實作類似前述程序中涵蓋的 IStringHttpBodyEditorPlugin。 不過,二進位版會使用位元組陣列處理二進位資料,而不會使用字串。

第一個程序中建立的 MessageEditorControl UserControl 會具現化為 messageEditorControl:

private MessageEditorControl messageEditorControl

messageEditorControl 執行個體會裝載於 CreateEditor 方法建立的外掛程式對話方塊內。 此外,messageEditorControl 的 RichTextBox 中會填入 IHttpBody 的內容。 不過,除非 SupportsContentType 傳回 true,否則無法建立外掛程式。 以此編輯器為例,如果 IHttpBody 中的 ContentType 包含 "msbin1",則 SupportsContentType 會傳回 true。

當完成編輯字串內容而且使用者按一下外掛程式對話方塊中的 [確定] 時,便會呼叫 GetNewValue,以取得做為字串的已編輯文字,並且更新 [Web 測試效能編輯器] 之要求中的 [BinaryHttpBody.Data]。

將 IBinaryHttpBodyEditorPlugin 加入至類別

  • 在前述程序中加入的 XmlMessageEditor 類別底下撰寫或複製下列程式碼,以便從 IBinaryHttpBodyEditorPlugin 介面具現化 Msbin1MessageEditor 類別,並實作需要的方法:

    /// <summary>
        /// Editor for MSBin1 content type (WCF messages)
        /// </summary>
        public class Msbin1MessageEditor : IBinaryHttpBodyEditorPlugin
        {
            /// <summary>
            /// 
            /// </summary>
            public Msbin1MessageEditor()
            {
            }
    
            /// <summary>
            /// Determine if this plugin supports a content type.
            /// </summary>
            /// <param name="contentType">The content type to test.</param>
            /// <returns>Returns true if the plugin supports the specified content type.</returns>
            public bool SupportsContentType(string contentType)
            {
                return contentType.ToLower().Contains("msbin1");
            }
    
            /// <summary>
            /// Create a UserControl to edit the specified bytes.  This control will be hosted in the
            /// plugin dialog which provides OK and Cancel buttons.
            /// </summary>
            /// <param name="contentType">The content type of the BinaryHttpBody.</param>
            /// <param name="initialValue">The bytes to edit.  The bytes are the payload of a BinaryHttpBody.</param>
            /// <returns>A UserControl capable of displaying and editing the byte array value of the specified content type.</returns>
            public object CreateEditor(string contentType, byte[] initialValue)
            {
                messageEditorControl = new MessageEditorControl();
                messageEditorControl.EditByteArray = initialValue;
                return messageEditorControl;
            }
    
            /// <summary>
            /// Gets the edited bytes after the OK button is clicked on the plugin dialog.
            /// </summary>
            public byte[] GetNewValue()
            {
                return messageEditorControl.EditByteArray;
            }
    
            private MessageEditorControl messageEditorControl;
            private object originalMessage;
        }
    

建置和部署外掛程式

建置和部署針對 IStringHttpBodyEditorPlugin 和 IBinaryHttpBodyEditorPlugin 產生的 DLL

  1. 按一下 [建置] 功能表上的 [建置 <Windows Form 控制項程式庫專案名稱>]。

  2. 結束 Visual Studio Ultimate。

    注意事項注意事項

    嘗試複製之前,必須先結束 Visual Studio Ultimate 的所有執行個體,以確保 DLL 檔不會遭到鎖定。

  3. 從您專案的 bin\debug 資料夾將產生的 .dll 檔 (例如 MessageEditors.dll) 複製到 %ProgramFiles%\Microsoft Visual Studio 10.0\Common7\IDE\PrivateAssemblies\WebTestPlugins。

  4. 啟動 Visual Studio Ultimate。

    .dll 應該在 Visual Studio Ultimate 中註冊。

使用 Web 效能測試驗證外掛程式

測試您的外掛程式

  1. 建立測試專案。

  2. 建立 Web 效能測試,並且在瀏覽器中輸入 Web 服務的 URL,例如 http://dev.virtualearth. net/webservices/v1/metadata/searchservice/dev.virtualearth. net.webservices.v1.search.wsdl。

  3. 完成錄製時,在 [Web 效能測試編輯器] 中展開 Web 服務的要求,並選取 [字串內容] 或 [二進位內容]。

  4. 在 [屬性] 視窗中,選取 [字串內容] 或 [二進位內容],然後按一下省略符號 (…)。

    [編輯 HTTP 內容資料] 對話方塊隨即顯示。

  5. 現在您可以編輯資料,然後按一下 [確定]。 這樣會叫用適用的 GetNewValue 方法,以更新 IHttpBody 中的內容。

編譯程式碼

  • 驗證 Windows 控制項程式庫專案的目標 Framework 是 .NET Framework 4。 根據預設,Windows 控制項程式庫專案的目標為 .NET Framework 4 Client Framework,其中不允許包含 Microsoft.VisualStudio.QualityTools.WebTestFramework 參考。

    如需詳細資訊,請參閱專案設計工具、應用程式頁 (C#)

請參閱

工作

HOW TO:建立要求層級外掛程式

HOW TO:建立 Web 效能測試的自訂擷取規則

HOW TO:建立 Web 效能測試的自訂驗證規則

HOW TO:建立負載測試外掛程式

HOW TO:建立 Web 效能測試程式碼

參考

IStringHttpBodyEditorPlugin

CreateEditor

SupportsContentType

GetNewValue

IBinaryHttpBodyEditorPlugin

CreateEditor

SupportsContentType

GetNewValue

IHttpBody

ContentType

UserControl

RichTextBox

其他資源

建立和使用負載和 Web 效能測試的自訂外掛程式

HOW TO:建立 Web 效能測試結果檢視器的 Visual Studio 增益集