Visual Studio Team System 提供了强大的负载测试功能。
一个负载测试应该有几部分组成:
1.方案:主要是对该负载测试中包含的WebTest的比重、浏览器情况、网络组合、用户数的设置;
2.计数器:性能计数器
3.运行设置:负载测试的结果记录,thinktime的设置,采样速率等等。采样速率是指客户端的每间隔多长时间获取一次数据,默认为5s
1.创建WebTest,创建一个负载测试的前提是先创建其需要的WebTests,新建时经常会出现 “浏览器扩展当前在Internet Explorer中处于禁用状态”之类的错误,可以先不考虑此问题,可以按照其提示的信息,点击确定后,从浏览器的 查看->浏览器栏 -> Web测试记录器 ,并开始记录。在浏览器中输入要进行的web测试地址,并可以进行与数据库的交互操作。最后停止记录,最自动生成WebTest。
2.优化WebTest,对于在浏览器中生成的WebTest有一些公用的参数可以提取出来,如服务器地址,通用的querystring,规则大概有以下几点:
1).用户登录类的数据需要进行处理,如:通过在WebTest的Head里加上人员的LoginName 信息,服务器端可以通过更改配置文件来允许测试,impersonate=true,或者在HttpModule过滤时对请求做处理,比如对于HttpRequest中只要Head包含某个用户的信息,就以此用户为登录用户。
2).添加上下文参数:每一个请求都包含相似的内容时,添加上下文参数,如:讲服务器IP及端口添加到一个上下文参数中,而后将参数添加到链接中,之后若对其他服务器进行测试,则只需要改动这一个参数就可以了。
3).添加数据源:对于登录用户一般使用数据源进行用户的交替登录,可以通过在WebTest中添加数据源,在每一个请求中添加标头。数据源可以是数据库,CSV,或XML格式。
4).添加验证规则:对于每一次请求,可以添加验证规则来判断请求是否成功。如我预先知道某一个页面post后返回到客户端的内容,可以在验证规则中查找对应的文本。可以自定义验证规则。
5).添加提取规则:提取规则是为了下一次的请求需要用上一次post返回的数据。可以自定义提取规则。一个简单的提取规则:
using System;
using Microsoft.VisualStudio.TestTools.WebTesting;
using System.Globalization;
namespace ExtractionRules
{
public class ExtractEventValidation : ExtractionRule
{
public override string RuleName
{
get
{
return "ExtractEventValidation";
}
}
public override string RuleDescription
{
get
{
return "Get the EventValidation value in response";
}
}
public override void Extract(object sender, ExtractionEventArgs e)
{
if (e.Response.HtmlDocument != null)
{
foreach (HtmlTag tag in e.Response.HtmlDocument.GetFilteredHtmlTags(new string[] { "input" }))
{
if (String.Equals(tag.GetAttributeValueAsString("id"), "__EVENTVALIDATION", StringComparison.InvariantCultureIgnoreCase))
{
string formFieldValue = tag.GetAttributeValueAsString("value");
if (formFieldValue == null)
{
formFieldValue = String.Empty;
}
e.WebTest.Context.Add(this.ContextParameterName, formFieldValue);
e.Success = true;
return;
}
}
}
e.Success = false;
e.Message = String.Format(CultureInfo.CurrentCulture, "Not Found: {0}, ResponsePageContent:{1} ", "__EVENTVALIDATION", e.Response.BodyString);
}
}
}
6).生成代码,如果配置达不到我们需要的时候,可以通过生成代码,开发来满足我们需要的东西,复杂的post通常需要我们开发代码,生成的代码很容易被开发人员理解,无非是一个接一个的WebTestRequest,并且设置请求的一些参数。
3.创建LoadTest,负责测试主要由一组WebTest组成,同时包含这些组合的设置以及技术器的相关配置。
1).方案,主要设置thinktime,当然也可以在WebTest中进行单独请求的设置。
2).测试组和:将WebTest或UnitTest添加到组合中。
3).测试结果存储:测试结果将储存到Controller的数据库,点击菜单中的【测试】-->【管理测试控制器】 ,更改设置数据库连接字符串。也可以通过命令创建该数据库,具体要查msdn。
4).SQL跟踪链接字符串与SQL跟踪目录,感觉没什么作用,但还是需要配置,否则会出错。
4.运行负载测试
1).最关键的几个参数配置:方案中的负载模式为指定以多少用户进行迭代,运行持续时间,测试迭代,采样速率。
2).负载测试最关键的地方不在于如何创建和运行负载测试,最难是如何监控和读取服务器性能;对于Web服务器,通常我们关心的是ASP.NET下的请求数,w3wp进程占用的内存资源;对于DB服务器通常查看的是磁盘每秒读和磁盘每秒写,具体应用偏重需要考虑。
3).服务器性能计数器是门很深的学问,我很快学会了负载测试,却要花费更多的时间去看性能计数器,性能计数器也可以自己开发和注册。