做过单元测试的朋友都知道,几乎每一个单元测试的框架都提供了类似于TestInitialize、TestCleanup这样的操作,可以在测试的开始和完成测试以后让我们处理一些问题,例如初始化一些数据,或者销毁一些数据等操作。在VSTS中有一种测试类型叫”Web测试”,它由一系列 HTTP 请求组成,通过发出 HTTP 请求在协议层工作。Web测试没有单独的TestInitialize、TestCleanup操作,但是VSTS所提供的Web Test插件能够帮助我们完成这样的工作。以下是MSDN对Web测试的定义:
使用 Web 测试插件,可以隔离代码并在 Web 测试中的主要声明性语句外部重用代码。自定义的 Web 测试插件为在运行 Web 测试时调用某些代码提供了途径。在每个测试迭代中,Web 测试插件都要运行一次。此外,如果重写测试插件中的 PreRequest 或 PostRequest 方法,这些请求插件将分别在每个请求之前或之后运行。
可见Web测试插件给使用者带来了很大的灵活性,下面就看看如何创建一个Web测试插件。
1. 创建一个新的类库项目,这个项目是一个独立的可重用的类库,所创建的Web测试插件可以在不同的包含有Web测试的项目中使用。
2. 在该类库项目中添加对“Microsoft.VisualStudio.QualityTools.WebTestFramework”的引用,该Dll是在.NET选项卡上
3. 在该类库项目中从WebTestPlugin派生出一个自定义的Web测试插件类
4. 重写相关的基类方法,例如 PreRequest、 PreWebTest、 PostWebTest等
5. 打开包含有Web Test的项目,并且在该项目中引用刚才添加的包含有自定义Web测试插件的类库项目
6. 打开需要调用Web测试插件的Web测试,点击”Add Web Test Plug-in”,选择刚才编写好的Web插件,完成。
以下是一个Web测试插件的实例代码,该插件重写了PreWebTest方法,所以会在Web测试执行之前运行一次。改插件的作用就是在每次运行Web测试之前,会读取一个配置文件,然后把相关的配置写到Web测试的Context中。
public class FilterRuleWebPlugin : Microsoft.VisualStudio.TestTools.WebTesting.WebTestPlugin { static readonly string key = "RuleName"; public override void PreWebTest(object sender, PreWebTestEventArgs e) { base.PreWebTest(sender, e); //Add the new context if (!e.WebTest.Context.ContainsKey(key)) { e.WebTest.Context.Add(key, string.Empty); } string filter = GetFilter(); if (string.IsNullOrEmpty(filter)) { e.WebTest.Context[key] = "default"; } else { e.WebTest.Context[key] = filter; } } private string GetFilter() { string filter = string.Empty; XmlDocument doc = new XmlDocument(); try { doc.Load("Config.xml"); if (doc != null) { filter = doc.SelectSingleNode("Settings/Filter").InnerText; } } catch (Exception) { return "LoadFilterError"; } return filter; } }
我们还可以在Web测试插件中定义一些公开的属性(Property),利用公开的属性,可以在运行Web测试之前对一些参数的输入进行指定。
VSTS的Web测试用起来挺方法,功能也挺强大,如果大家在使用的过程中遇到什么不爽的事情,可以尝试自己编写Web测试插件来改变那些不爽的状态。;-)Web测试插件还有很多的应用场景,今天抛砖引玉啊。