自己动手创建Web测试验证规则

”Web测试”是由一系列 HTTP 请求组成,通过发出 HTTP 请求在协议层工作的测试类型。在VSTS中自带了若干个预先定义好的验证规则,例如在返回的页面上寻找某些字符,返回的文档中是否包含某些Tag,等等。前一段时间在测试一个安全过滤器,这个过滤器的基本功能就是过滤用户输入中的一些有可能构成安全隐患的内容,例如<script>标签的内容,JS内容等等。按照预先给出的测试用例执行完测试以后,OK,没有问题,不过在上线一个小时后发现一个问题,就是经过安全过滤器输出的内容会比原来输入的内容多了两个字符–“rn”,这个问题一下就修复好了,Trim一下。然后我就要给原来的测试加上对于这个问题的回归测试实现。很不巧,Web测试没有一个对返回内容长度进行验证的验证规则,不过微软提供了创建自定义验证规则的接口,我们可以创建一个验证ContentLength的规则。

1. 创建一个新的类库项目,这个项目是一个独立的可重用的类库,所创建的Web测试插件可以在不同的包含有Web测试的项目中使用。其实可以跟上一篇文章说的WebTest Plugin公用一个类库项目

2. 在该类库项目中添加对“Microsoft.VisualStudio.QualityTools.WebTestFramework”的引用

3. 在该类库项目中创建一个从ValidationRule派生出的类

4. 重写基类的Validate方法

5. 打开包含有Web Test的项目,并且在该项目中引用刚才添加的包含有自定义验证规则的类库项目

6. 打开需要调用自定义验证规则的Web测试,点击”Add Validation Rule”,选择刚才编写好的验证规则。

现在看看在自定义验证规则中添加参数,让用户输入相应的参数,从而使得验证规则更加灵活。

public class ResponseContentLength : ValidationRule
{
	public int Length { get; set; }                   //输入的长度
	public bool PassIfEqualsToContentLength { get; set; }

	public override void Validate(object sender, ValidationEventArgs e)
	{
		if (e.Response != null)
		{
			e.IsValid = !((e.Response.ContentLength == Length) ^ PassIfEqualsToContentLength);
		}
		if (!e.IsValid)
		{
			e.Message = string.Format("The length of the ContentLength: {0} is not equal to the expected result: {1}.", e.Response.ContentLength, Length);
		}
	}
}

如果我们添加该自定义规则,那么会提示我们输入两个参数,一个是Length,另一个是一个布尔值;如果Response中的ContentLength和设置的Length相等,并且该布尔值设置为True,那么这个验证规则就算是通过。如图:

5-26-2009-10-26-01-am

Leave a Reply

Your email address will not be published. Required fields are marked *