HOW TO:建立 Web 效能測試編輯器的自訂 HTTP 內容編輯器
這個主題適用於:
Visual Studio Ultimate |
Visual Studio Premium |
Visual Studio Professional |
Visual Studio Express |
---|---|---|---|
您可以建立自訂內容編輯器,讓您編輯 Web 服務要求的字串內容或二進位內容,例如 SOAP、REST、asmx、wcf、RIA 和其他 Web 服務要求類型。
您可以實作兩種類型的編輯器:
字串內容編輯器:這個編輯器是使用 IStringHttpBodyEditorPlugin 介面實作。
二進位內容編輯器:這個編輯器是使用 IBinaryHttpBodyEditorPlugin 介面實作。
這些介面包含在 Microsoft.VisualStudio.TestTools.WebTesting 命名空間中。
建立 Windows 控制項程式庫專案
使用 Windows 控制項程式庫專案建立使用者控制項
在 Visual Studio Ultimate 中,按一下 [檔案] 功能表上的 [新增],然後選取 [專案]。
[新增專案] 對話方塊隨即出現。
在 [已安裝的範本] 底下依據您的程式設計偏好選取 [Visual Basic] 或 [Visual C#],然後選取 [Windows]。
注意事項 此範例使用 Visual C#。
在範本的清單中,選取 [Windows Form 控制項程式庫]。
在 [名稱] 文字方塊中輸入名稱,例如 MessageEditors,然後按一下 [確定]。
注意事項 此範例使用 MessageEditors。
專案會加入至新的方案中,而且設計工具中會出現名為 UserControl1.cs 的 UserControl。
從 [工具箱] 的 [通用控制項] 分類底下,將 RichTextBox 拖曳至 UserControl1 介面上。
按一下 RichTextBox 控制項右上角的 [動作] 標籤圖像 (),然後選取並且 [停駐於父容器中]。
在 [方案總管] 中,以滑鼠右鍵按一下 [Windows Form 程式庫] 專案,然後選取 [屬性]。
在 [屬性] 中,選取 [應用程式] 索引標籤。
在 [目標 Framework] 下拉式清單中選取 [.NET Framework 4]。
[目標 Framework 變更] 對話方塊隨即出現。
按一下 [是]。
在 [方案總管] 中,以滑鼠右鍵按一下 [參考] 節點,然後選取 [加入參考]。
接著會顯示 [加入參考] 對話方塊。
按一下 [.NET] 索引標籤並向下捲動,然後選取 [Microsoft.VisualStudio.QualityTools.WebTestFramework],再按一下 [確定]。
如果 [設計工具檢視] 未保持開啟狀態,請在 [方案總管] 中以滑鼠右鍵按一下 [UserControl1.cs],然後選取 [設計工具檢視]。
以滑鼠右鍵按一下設計介面,然後選取 [檢視程式碼]。
(選擇性) 將類別和建構函式的名稱從 UserControl1 變更為有意義的名稱,例如 MessageEditorControl:
注意事項 範例中會使用 MessageEditorControl。
namespace MessageEditors { public partial class MessageEditorControl : UserControl { public MessageEditorControl() { InitializeComponent(); } } }
加入下列屬性,以便取得並設定 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 控制項程式庫專案中加入類別
將類別加入至專案。 它會用來實作 IStringHttpBodyEditorPlugin 和 IBinaryHttpBodyEditorPlugin 介面。
此程序之程式碼的概觀
前述程序中建立的 MessageEditorControl UserControl 會具現化為 messageEditorControl:
private MessageEditorControl messageEditorControl
messageEditorControl 執行個體會裝載於 CreateEditor 方法建立的外掛程式對話方塊內。 此外,messageEditorControl 的 RichTextBox 中會填入 IHttpBody 的內容。 不過,除非 SupportsContentType 傳回 true,否則無法建立外掛程式。 以此編輯器為例,如果 IHttpBody 中的 ContentType 包含 "xml",則 SupportsContentType 會傳回 true。
當完成編輯字串內容而且使用者按一下外掛程式對話方塊中的 [確定] 時,便會呼叫 GetNewValue,以取得做為字串的已編輯文字,並且更新 [Web 測試效能編輯器] 之要求中的 [字串內容]。
建立類別並實作 IStringHttpBodyEditorPlugin 介面程式碼
在 [方案總管] 中,以滑鼠右鍵按一下 [Windows Form 控制項程式庫] 專案,並選取 [加入新項目]。
接著會顯示 [加入新項目] 對話方塊。
選取 [類別]。
在 [名稱] 文字方塊中輸入有意義的類別名稱,例如 MessageEditorPlugins。
按一下 [加入]。
Class1 會加入至專案,並顯示在 [程式碼編輯器] 中。
在 [程式碼編輯器] 中,加入下列 using 陳述式:
using Microsoft.VisualStudio.TestTools.WebTesting;
撰寫或複製下列程式碼,以便從 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
按一下 [建置] 功能表上的 [建置 <Windows Form 控制項程式庫專案名稱>]。
結束 Visual Studio Ultimate。
注意事項 嘗試複製之前,必須先結束 Visual Studio Ultimate 的所有執行個體,以確保 DLL 檔不會遭到鎖定。
從您專案的 bin\debug 資料夾將產生的 .dll 檔 (例如 MessageEditors.dll) 複製到 %ProgramFiles%\Microsoft Visual Studio 10.0\Common7\IDE\PrivateAssemblies\WebTestPlugins。
啟動 Visual Studio Ultimate。
.dll 應該在 Visual Studio Ultimate 中註冊。
使用 Web 效能測試驗證外掛程式
測試您的外掛程式
建立測試專案。
建立 Web 效能測試,並且在瀏覽器中輸入 Web 服務的 URL,例如 http://dev.virtualearth. net/webservices/v1/metadata/searchservice/dev.virtualearth. net.webservices.v1.search.wsdl。
完成錄製時,在 [Web 效能測試編輯器] 中展開 Web 服務的要求,並選取 [字串內容] 或 [二進位內容]。
在 [屬性] 視窗中,選取 [字串內容] 或 [二進位內容],然後按一下省略符號 (…)。
[編輯 HTTP 內容資料] 對話方塊隨即顯示。
現在您可以編輯資料,然後按一下 [確定]。 這樣會叫用適用的 GetNewValue 方法,以更新 IHttpBody 中的內容。
編譯程式碼
驗證 Windows 控制項程式庫專案的目標 Framework 是 .NET Framework 4。 根據預設,Windows 控制項程式庫專案的目標為 .NET Framework 4 Client Framework,其中不允許包含 Microsoft.VisualStudio.QualityTools.WebTestFramework 參考。
如需詳細資訊,請參閱專案設計工具、應用程式頁 (C#)。