如何:为 Web 性能测试结果查看器创建 Visual Studio 外接程序
本主题适用于:
Visual Studio 旗舰版 |
Visual Studio 高级专业版 |
Visual Studio 专业版 |
Visual Studio 学习版 |
---|---|---|---|
您可以使用以下命名空间来扩展 Web 性能测试结果查看器的 UI:
此外,您还需要添加对位于 %ProgramFiles%\Microsoft Visual Studio 10.0\Common7\IDE\PrivateAssemblies 文件夹中的 LoadTestPackage.dll 的引用。
- 若要扩展 Web 性能测试结果查看器的 UI,必须创建 Visual Studio 外接程序和用户控件。 下面的过程说明如何创建外接程序、用户控件以及如何实现扩展 Web 性能测试结果查看器的 UI 所需的类。
创建或打开包含 ASP.NET Web 应用程序和测试项目的解决方案
准备扩展 Web 性能测试结果查看器
创建或打开一个可用来进行试验的非生产解决方案,该解决方案中应包含一个 ASP.NET Web 应用程序以及一个带有针对 ASP.NET Web 应用程序的一个或多个 Web 性能测试的测试项目。
提示
您可以遵循演练:创建简单的 Web 应用程序和演练:记录和运行 Web 性能测试中的过程,创建 ASP.NET Web 应用程序和包含 Web 性能测试的测试项目。
创建 Visual Studio 外接程序
外接程序是在 Visual Studio 集成开发环境 (IDE) 中运行的已编译的 DLL。 编译有助于保护知识产权和提高性能。 虽然可以手动创建外接程序,但您可能会发现使用“外接程序向导”更为简便。 此向导创建一个功能全面但却很基本的外接程序,创建完该程序后可立即运行它。 “外接程序向导”生成基本程序后,可向其添加代码并对其进行自定义。
“外接程序向导”让您可以为外接程序提供显示名称和说明。 这两项内容都将出现在**“外接程序管理器”中。 还可以选择让向导生成代码,用于向“工具”菜单中添加可打开外接程序的命令。 您也可以选择为外接程序显示一个自定义“关于”**对话框。 向导完成时,将生成只有一个实现外接程序的类的新项目。 该类名为“Connect”。
您将在本主题末尾使用**“外接程序管理器”**。
有关更多信息,请参见创建外接程序和向导。
使用“外接程序向导”创建外接程序
在解决方案资源管理器中,右击该解决方案,单击**“添加”,然后选择“新建项目”**。
将显示“新建项目”对话框。
在**“已安装的模板”下,展开“其他项目类型”并选择“扩展性”**。
在模板列表中,选择**“Visual Studio 外接程序”**。
在“名称”下,键入外接程序的名称。 例如“WebPerfTestResultsViewerAddin”。
单击**“确定”**。
此时 Visual Studio 外接程序向导将启动。
单击**“下一步”**。
在**“选择编程语言”**页上,选择要用于编写外接程序的编程语言。
提示
本主题使用 Visual C# 编写代码示例。
在**“选择应用程序主机”**页上,选择“Microsoft Visual Studio 2010”并清除“Microsoft Visual Studio 2010 宏”。
单击**“下一步”**。
在**“输入名称和说明”**页中键入外接程序的名称和说明。
创建了外接程序后,其名称和说明将显示在**“外接程序管理器”的“可用外接程序”**列表中。 向外接程序的说明中添加足够的详细信息,以便用户能够了解外接程序的功能、工作方式等信息。
单击**“下一步”**。
在**“选择外接程序选项”页上,选择“我希望我的外接程序在宿主应用程序启动时加载”**。
清除其余复选框。
在**“选择‘帮助’中的‘关于’信息”页上,可指定是否将有关外接程序的信息显示在“关于”对话框中。 如果您确实希望显示此信息,则选中“是的,我希望我的外接程序提供‘关于’对话框信息”**复选框。
可以添加到 Visual Studio 的**“关于”**对话框中的信息包括版本号、支持详细信息和授权数据等信息。
单击**“下一步”**。
所选的选项将显示在**“摘要”页上供您检查。 如果感到满意,请单击“完成”以创建外接程序。 如果要更改某些内容,请单击“上一步”**按钮。
将创建新的解决方案和项目,并且新外接程序的 Connect.cs 文件将显示在代码编辑器中。
在完成下面的创建将由此 WebPerfTestResultsViewerAddin 项目引用的用户控件的过程后,您将向 Connect.cs 文件添加代码。
创建了外接程序后,必须先向 Visual Studio 注册此外接程序,然后才能在**“外接程序管理器”**中激活它。 使用具有 .addin 文件扩展名的 XML 文件来执行此操作。
.addin 文件描述了 Visual Studio 在**“外接程序管理器”中显示外接程序所需的信息。 在 Visual Studio 启动时,它会查找 .addin 文件位置,获取任何可用的 .addin 文件。 如果找到相应文件,则会读取 XML 文件,并向“外接程序管理器”**提供在单击外接程序进行启动时所需的信息。
使用外接程序向导创建外接程序时,会自动创建一个 .addin 文件。
有关更多信息,请参见外接程序注册。
外接程序文件位置
外接程序向导会自动创建 .addin 文件的两个副本,如下所示:
.Addin 文件位置 |
.Dll 文件位置 |
说明 |
---|---|---|
根项目文件夹 \Documents\Visual Studio 2010\Projects\MyAddin1\MyAddin1\ |
本地路径 (MyAddin1.dll) |
用于部署外接程序项目。 包含在项目中以方便编辑,并使用本地路径安装以进行 XCopy 式部署。 |
外接程序文件夹 \Documents\Visual Studio 2010\Addins\ - 或 - 共享文档位置\Addins\ |
项目调试文件夹 (例如,\ Documents\Visual Studio 2010 Projects\MyAddin1\MyAddin1\bin\) |
用于在调试环境中运行外接程序。 应该始终指向当前生成配置的输出路径。 |
创建 Windows 窗体控件库项目
在前面过程中创建的 Visual Studio 外接程序将引用 Windows 窗体控件库项目来创建 UserControl 类的实例。
有关更多信息,请参见 Windows 窗体控件。
创建要在 Web 测试结果查看器中使用的控件
在解决方案资源管理器中,右击该解决方案,单击**“添加”,然后选择“新建项目”**。
将显示**“新建项目”**对话框。
在**“已安装的模板”下,展开“Visual Basic”或“Visual C#”,然后选择“Windows”**。
提示
本主题使用 Visual C# 编写代码示例。
在模板列表中,选择**“Windows 窗体控件库”**。
在**“名称”**下,键入外接程序的名称。 例如,WebPerfTestResultsViewerControl。
单击**“确定”**。
将在“解决方案资源管理器”中添加 Windows 窗体控件库项目 WebPerfTestResultsViewerControl,并在设计模式下显示 UserControl1.cs。
从“工具箱”中将 DataGridView 拖动到 userControl1 的图面上。
单击 DataGridView 的右上角的操作标记符号 (),并按照以下步骤操作:
单击**“在父容器中停靠”**。
清除**“启用添加”、“启用编辑”、“启用删除”和“启用列重新排序”**复选框。
单击**“添加列”**。
将显示**“添加列”**对话框。
在**“类型”下拉列表中,选择“DataGridViewTextBoxColumn”**。
清除**“标题文本”**中的文本“Column1”。
单击**“添加”**。
单击**“关闭”**。
在“属性”窗口中,将 DataGridView 的**“(Name)”**属性更改为“resultControlDataGridView”。
右击设计图面并选择**“查看代码”**。
UserControl1.cs 文件将显示在代码编辑器中。
将实例化的 UserControl 类的名称从 UserContro1 更改为 resultControl:
namespace WebPerfTestResultsViewerControl { public partial class resultControl : UserControl { public resultControl() { InitializeComponent(); }
在下一过程中,您将向 WebPerfTestResultsViewerAddin 项目的引用 resultControl 类的 Connect.cs 文件添加代码。
您稍后将向 Connect.cs 文件添加一些附加代码。
向 WebPerfTestResultsViewerAddin 添加代码
向 Visual Studio 外接程序添加代码来扩展 Web 测试结果查看器
在解决方案资源管理器中,右击 WebPerfTestResultsViewerAddin 项目中的**“引用”节点,然后选择“添加引用”**。
在**“添加引用”对话框中,单击“.NET”**选项卡。
向下滚动并选择**“Microsoft.VisualStudio.QualityTools.WebTestFramework”和“System.Windows.Forms”**。
单击**“确定”**。
再次右击**“引用”节点,然后选择“添加引用”**。
在**“添加引用”对话框中单击“浏览”**选项卡。
单击**“查找范围”**下拉列表,并导航到 %ProgramFiles%\Microsoft Visual Studio 10.0\Common7\IDE\PrivateAssemblies,然后选择 Microsoft.VisualStudio.QualityTools.LoadTestPackage.dll 文件。
单击**“确定”**。
右击“WebPerfTestResultsViewerAddin”项目节点,然后选择**“添加引用”**。
在**“添加引用”对话框中单击“项目”**选项卡。
在**“项目名称”下选择“WebPerfTestResultsViewerControl”项目,然后单击“确定”**。
如果 Connect.cs 文件仍未打开,请在解决方案资源管理器中,右击“WebPerfTestResultsViewerAddin”项目中的**“Connect.cs”文件,然后选择“查看代码”**。
在 Connect.cs 文件中,添加以下 Using 语句:
using System.IO; using System.Windows.Forms; using System.Collections.Generic; using Microsoft.VisualStudio.TestTools.LoadTesting; using Microsoft.VisualStudio.TestTools.WebTesting; using WebPerfTestResultsViewerControl;
向下滚动到 Connect.cs 文件的底端。 如果打开 Web 性能测试结果查看器的多个实例,则需要为 UserControl 添加 GUID 列表。 稍后您将添加使用此列表的代码。
您稍后将编码的 OnDiscconection 方法中使用另一个字符串列表。
private DTE2 _applicationObject; private AddIn _addInInstance; private Dictionary<Guid, List<UserControl>> m_controls = new Dictionary<Guid, List<UserControl>>(); private List<string> temporaryFilePaths = new List<string>();
Connect.cs 文件从 IDTExtensibility2 类对名为 Connect 的类进行实例化,还包括一些用于实现 Visual Studio 外接程序的方法。 其中一种方法为 OnConnection 方法,用于接收有关外接程序正在加载的通知。 在 OnConnection 方法中,您将使用 LoadTestPackageExt 类为 Web 性能测试结果查看器创建扩展性包。 将下面的代码添加到 OnConnection 方法:
public void OnConnection(object application, ext_ConnectMode connectMode, object addInInst, ref Array custom) { _applicationObject = (DTE2)application; _addInInstance = (AddIn)addInInst; // Create a load test packge extensibility class. LoadTestPackageExt loadTestPackageExt = _applicationObject.GetObject("Microsoft.VisualStudio.TestTools.LoadTesting.LoadTestPackageExt") as LoadTestPackageExt; // Process open windows. foreach (WebTestResultViewer webTestResultViewer in loadTestPackageExt.WebTestResultViewerExt.ResultWindows) { WindowCreated(webTestResultViewer); } // Create event handlers. loadTestPackageExt.WebTestResultViewerExt.WindowCreated += new EventHandler<WebTestResultViewerExt.WindowCreatedEventArgs>(WebTestResultViewerExt_WindowCreated); loadTestPackageExt.WebTestResultViewerExt.WindowClosed += new EventHandler<WebTestResultViewerExt.WindowClosedEventArgs>(WebTesResultViewer_WindowClosed); loadTestPackageExt.WebTestResultViewerExt.SelectionChanged += new EventHandler<WebTestResultViewerExt.SelectionChangedEventArgs>(WebTestResultViewer_SelectedChanged); }
将下面的代码添加到 connect 类,以便为在 OnConnection 方法中添加的 loadTestPackageExt.WebTestResultViewerExt.WindowCreated 事件处理程序和 WebTestResultViewerExt_WindowCreated 方法调用的 WindowCreated 方法创建 WebTestResultViewerExt_WindowCreated 方法。
void WebTestResultViewerExt_WindowCreated(object sender, WebTestResultViewerExt.WindowCreatedEventArgs e) { // New control added to new result viewer window. WindowCreated(e.WebTestResultViewer); } private void WindowCreated(WebTestResultViewer viewer) { // Instantiate an instance of the resultControl referenced in the WebPerfTestResultsViewerControl project. resultControl resultControl = new resultControl(); // Add to the dictionary of open playback windows. System.Diagnostics.Debug.Assert(!m_controls.ContainsKey(viewer.TestResultId)); List<UserControl> userControls = new List<UserControl>(); userControls.Add(resultControl); // Add Guid to the m_control List to manage Result viewers and controls. m_controls.Add(viewer.TestResultId, userControls); // Add tabs to the playback control. resultControl.Dock = DockStyle.Fill; viewer.AddResultPage(new Guid(), "Sample", resultControl); }
将下面的代码添加到 connect 类,以便为在 OnConnection 方法中添加的 loadTestPackageExt.WebTestResultViewerExt.SelectionChanged 事件处理程序创建 WebTestResultViewer_SelectedChanged 方法:
void WebTestResultViewer_SelectedChanged(object sender, WebTestResultViewerExt.SelectionChangedEventArgs e) { foreach (UserControl userControl in m_controls[e.TestResultId]) { // Update the userControl in each result viewer. resultControl resultControl = userControl as resultControl; if (resultControl != null) // Call the resultControl's Update method (This will be added in the next procedure). resultControl.Update(e.WebTestRequestResult); } }
将下面的代码添加到 connect 类,以便为在 OnConnection 方法中添加的 loadTestPackageExt.WebTestResultViewerExt.WindowClosed 事件处理程序创建 WebTesResultViewer_WindowClosed 方法:
void WebTesResultViewer_WindowClosed(object sender, WebTestResultViewerExt.WindowClosedEventArgs e) { if (m_controls.ContainsKey(e.WebTestResultViewer.TestResultId)) { m_controls.Remove(e.WebTestResultViewer.TestResultId); } }
现在 Visual Studio 外接程序的代码已完成,您需要向 WebPerfTestResultsViewerControl 项目中的 resultControl 添加 Update 方法。
向 WebPerfTestResultsViewerControl 添加代码
有关更多信息,请参见 Windows 窗体控件开发基础知识。
向用户控件添加代码
在“解决方案资源管理器”中右击 WebPerfTestResultsViewerControl 项目节点,然后选择**“属性”**。
选择**“应用程序”选项卡,然后单击“目标框架”下拉列表,选择“.NET Framework 4”**并关闭“属性”。
为支持扩展 Web 性能测试结果查看器所需的 dll 引用,此操作是必需的。
在解决方案资源管理器中,在 WebPerfTestResultsViewerControl 项目中右击**“引用”节点,然后选择“添加引用”**。
在**“添加引用”对话框中,单击“.NET”**选项卡。
向下滚动并选择**“Microsoft.VisualStudio.QualityTools.WebTestFramework”**。
单击**“确定”**。
在 UserControl1.cs 文件中,添加以下 Using 语句:
using Microsoft.VisualStudio.TestTools.WebTesting; using Microsoft.VisualStudio.TestTools.WebTesting.Rules;
添加 Update 方法,然后从 Connect.cs 文件中的 WebPerfTestResultsViewerAddin WebTestResultViewer_SelectedChanged 方法调用该方法并传递 WebTestRequestResult。 Update 方法使用在 WebTestRequestResult 中传递给它的各种属性填充 DataGridView。
public void Update(WebTestRequestResult WebTestResults) { // Clear the DataGridView when a request is selected. resultControlDataGridView.Rows.Clear(); // Populate the DataGridControl with properties from the WebTestResults. this.resultControlDataGridView.Rows.Add("Request: " + WebTestResults.Request.Url.ToString()); this.resultControlDataGridView.Rows.Add("Response: " + WebTestResults.Response.ResponseUri.ToString()); foreach (RuleResult ruleResult in WebTestResults.ExtractionRuleResults) { this.resultControlDataGridView.Rows.Add("Extraction rule results: " + ruleResult.Message.ToString()); } foreach (RuleResult ruleResult in WebTestResults.ValidationRuleResults) { this.resultControlDataGridView.Rows.Add("Validation rule results: " + ruleResult.Message.ToString()); } foreach (WebTestError webTestError in WebTestResults.Errors) { this.resultControlDataGridView.Rows.Add("Error: " + webTestError.ErrorType.ToString() + " " + webTestError.ErrorSubtype.ToString() + " " + webTestError.ExceptionText.ToString()); } }
生成 WebPerfTestResultsViewerAddin 解决方案
生成解决方案
- 在**“生成”菜单上,选择“生成解决方案”**。
注册 WebPerfTestResultsViewerAddin 外接程序
使用外接程序管理器注册外接程序
在**“工具”菜单上选择“外接程序管理器”**。
将显示**“外接程序管理器”**对话框。
在**“可用外接程序”列中,选中 WebPerfTestResultsViewerAddin 外接程序对应的复选框,然后清除“启动”列和“命令行”**列下方的复选框。
单击**“确定”**。
有关更多信息,请参见如何:使用外接程序管理器控制外接程序。
使用“生成 WebPerfTestResultsViewerAddin 外接程序”运行 Web 性能测试
为 Web 测试结果查看器运行新的 VS 外接程序
运行 Web 性能测试,您将会看到在 Web 性能测试结果查看器中显示的 WebPerfTestResultsViewerAddin 外接程序的标题为“Sample”的新选项卡。
单击此选项卡可查看在 DataGridView 中显示的属性。
安全性
为了防止恶意外接程序自动激活进而改进安全性,Visual Studio 在名为**“外接程序/宏的安全性”的“工具选项”**页中提供了一些设置。
另外,该选项页使您可以指定供 Visual Studio 在其中搜索 .AddIn 注册文件的文件夹。 这种方式可让您对可读取 .AddIn 注册文件的位置进行限制,从而改进了安全性。 这种方式可防止无意中使用 .AddIn 恶意文件。
外接程序安全性设置
Add-in/Macros Security, Environment, Options Dialog Box中与外接程序安全性相关的设置如下所示:
允许加载外接程序组件。 默认为选中。 在选中时,允许在 Visual Studio 中加载外接程序。 在未选中时,禁止在 Visual Studio 中加载外接程序。
允许从 URL 加载外接程序组件。 默认为未选中。 在选中时,允许从外部网站加载外接程序。 在未选中时,禁止在 Visual Studio 中加载远程外接程序。 如果某个外接程序由于某种原因无法加载,则无法从网站加载它。 此设置只控制外接程序 DLL 的加载。 .Addin 注册文件必须始终位于本地系统上。
有关更多信息,请参见外接程序安全性。
请参见
任务
参考
Microsoft.VisualStudio.TestTools.LoadTesting
Microsoft.VisualStudio.TestTools.WebTesting
Microsoft.VisualStudio.TestTools.WebTesting.Rules