|
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).服务器性能计数器是门很深的学问,我很快学会了负载测试,却要花费更多的时间去看性能计
数器,性能计数器也可以自己开发和注册。
|
|