WEB性能测试:你应该带上VisualStudio2010
原文地址:http://www.16aspx.com/Article/62
在Web性能测试方面,增加了循环(Loops)和条件(Conditions),让开发人员可以为他们的应用程序写出更复杂,更智能的测试;在负载测试方面,增加了64位代理和控制器,让测试人员可以更高效地利用可用的硬件资源产生负载。此外,改变了负载测试代理和控制器的许可,提供了更多的灵活性,间接地更节省成本。

Web测试允许你在你的ASP.NET Web应用程序上模拟一个用户执行一组操作 – 通常是一个定义好的用例,然后确认程序的响应结果是否与预期结果一致,当你定义好Web测试后,可以将它们组织在一起就构成了负载测试,通过负载测试可以查看你的应用程序在压力下的表现。本文将重点介绍如何使用Visual Studio 2010执行Web测试,负载测试将在另外一篇文章中介绍。
创建Web测试
Web测试通常是使用IE Web测试工具条创建的,它从头到尾详细记录了测试人员在Web应用程序上的点击动作,本文使用的示例代码中,我们的Visual Studio测试项目叫做Com.Benday.WebTesting.WebTests,当然你可以在这个项目上点击右键,选择“新建Web测试”创建一个新的Web测试。
在项目上添加好新的Web测试后,Visual Studio将会打开IE浏览器,你将会在浏览器中看到Web测试记录器面板,然后你可以转到任意一个网站,就象平常浏览一样进行操作,你的每一个操作都将被Web测试记录器记录下来,如图1所示。

图 1 Web测试记录器记录下的操作
当你想要记录的操作执行完毕后,点击“停止”按钮,返回Visual Studio 2010,你将会在一个*.webtest文件中看到你的操作,如图2所示。

图 2 在.webtest文件中的操作记录
更复杂的Web测试
前面录制的Web测试并没有太大的实用价值,它仅仅回放了你的原始操作,并没有检查返回的值,也不知道你的应用程序工作得怎样,但它是创建更复杂,更全面Web测试的基础。
可以使用校验规则,提取规则和Web测试请求中的测试上下文创建更智能的测试,校验规则检查从服务器返回的HTML,验证应用程序是否如你预期那样工作的,提取规则检查HTML,提出值,保存在所谓的测试上下文字典结构中,这些值可用于响应后面的测试请求,创建动态的行为和动态的验证。
本文所使用的示例代码中,我提供了一个管理个人信息的Web应用程序,每个人的记录都有姓名,电话号码,Email地址,加上主键ID,其类图如图3所示,数据库表结构如图4所示,在我们的Web应用程序中将会使用这个ID值确定显示和编辑哪个人的记录。

图 3 Person类图

图 4 Person数据库表结构
假设你想模拟一群人通过你的Web应用程序在数据库中创建个人信息,下面是创建一个新用户的具体步骤:
1、在浏览器中访问应用程序。
2、点击“创建一个新用户”。
2.1验证是否显示了“创建新用户”界面。
2.2验证所有文本输入框是否都是空白的,以及ID值是否等于-1,如果是-1就表明你是在创建新用户,如图5所示。

图 5 创建新用户
3、输入新用户的信息,如图6所示。

图 6 输入新用户信息
4、点击“保存”。验证ID值是否不再是-1,如果不是-1表明新用户已经创建成功,如图7所示。

图 7 用户创建成功后ID值不再是-1
5、返回人员名单界面,验证新创建的用户是否位于列表中,如图8所示。

图 8 新创建的用户位于列表中
6、打开新建用户的记录,验证内容与你输入的是否一致。
如果使用Web测试记录器,可以很容易记录下最基本的操作,但每次新增用户时,ID值由于是主键,因此每次都会发生变化,这就使得回放操作更复杂了。
我们首先从第2步开始,增加一个验证规则检查ID值是否等于-1,要做到这一点,你需要知道两件事:1)哪个Web请求启动“创建新用户”页面,2)显示ID值的ASP.NET Label控件的名字。
解决这两个问题最好的办法是运行Web测试,然后分析其结果,结果记录清晰地记录了你发送给Web应用程序的请求以及从Web应用程序返回的结果,通过查看HTML内容,可以确定每个请求都发生了什么,使用了哪些Web控件,它们的名字是什么都一清二楚,如图9所示。

图 9 点击响应标签,查看HTML,找出显示ID信息Label控件的名字
当你知道这个控件的名字 - 在这个例子叫做m_labelId – 也弄清楚了你需要哪个Web请求后,在这个请求上点击右键,选择“添加验证规则”,打开添加验证规则对话框,如图10所示。

图 10 给请求添加验证规则
在Visual Studio 2010中,你可以使用标签内文本(Tag Inner Text)验证规则读取m_labelId控件的值,如果你使用的是Visual Studio 2008,你需自己编写验证规则获取它的值。
接下来我们创建一个规则,确保保存成功后,人员ID值不等于-1,这一次可以使用查找文本(Find Text)规则,将发现文本则通过(Pass If Text Found)属性设为否(False),如图11所示,如果你发现标签控件的文本和值是-1,规则验证就失败,表明未保存成功。

图 11 给保存按钮增加文本发现验证规则
你可能也想给这个请求增加一个提取规则,提取出m_labelId的值,便于后面的测试使用,对于这个要求,可以使用标签内文本提取规则(Tag Inner Text Extraction Rule)提取m_labelId的值,然后将它放入名叫PersonId的上下文参数中,如图12所示。

图 12 给人员PersonId值添加提取规则
Web测试参数
当你提取到你想要的值,保存在测试上下文后,可以利用Web测试参数将测试上下文中的值插入到Web测试请求中,在我们的Web应用程序示例中,EditPerson.aspx页面使用了一个名叫ID的查询字符串参数载入人员信息。
当你记录Web测试时,它会保存你使用到的值,因此当你重新载入这个人的信息时,你会发现在查询字符串参数的值是一个硬编码的值,如图13所示。

图 13 查询字符串参数的值被硬编码了
如果你点击Id参数,你会看到它的属性对话框,在“值”属性上,你可以点击下拉列表看到所有的数据上下文值,你需要做的是选择其中的PersonId上下文值,如图14所示,之后查询字符串参数的值就是动态填充的了。

图 14 将PersonId 上下文值绑定给Id查询字符串参数
参数化有一个最佳实践应该在所有Web测试中使用 – 参数化Web服务器地址,特别是你打算在最后的负载测试中使用这些Web测试时,幸运的是,在Web测试编辑器中有一个按钮提供了这个功能,如图15所示,参数化Web服务器地址后,所有Web测试请求都会转移到参数化后的Web服务器地址。

图 15 参数化Web服务器按钮
在Web测试的底部你应该看到有一个上下文参数(Context Parameters)节点,展开它就能看到测试期间引用的所有Web服务器,如图16所示,这个功能非常有用,因为你运行Web测试的环境与运行负载测试的环境可能不同,另外,你可能将Web测试和负载测试与每日构建关联起来了,服务器的变化取决于你的构建类型,即使你现在不需要它,你也会喜欢它的灵活性。

图 16 在测试上下文中的参数化Web服务器
数据源和数据绑定
用数据上下文值实现参数化仅仅是构建复杂的Web测试和负载测试的开始,你也可以给Web测试附加一个包含测试数据的数据源,对于数据源也可以运用参数化思想,每执行一次Web测试换一行数据。
获得一个数据源最简单的方法是创建一个用逗号分隔的值组成的CSV文件,并将它导入到你的Visual Studio测试项目,如图17所示。

图 17 逗号分隔的数据源文件
导入这个CSV文件后,在Web测试上点击右键,选择“添加数据源”,如图18所示,启动添加数据源向导,如图19所示。

图 18 给Web测试添加一个数据源

图 19 新建测试数据源向导对话框
当你配置好数据源后,就可以使用参数绑定将数据行值附加给你的Web测试请求,例如,如果你想使用数据源的值填充“创建新用户”Web页面中的字段,你可以将每个textbox控件的表单POST参数绑定到数据源中的字段,如图20,21所示。

图 20 将m_textFirstName POST参数绑定到数据源的FirstName列

图 21 数据绑定表单POST参数
当你运行数据驱动的Web测试时,你会看到测试每执行一次就使用数据源中的一行数据,如图22所示,这样不仅可以创建一个动态的测试,也可以在大数据集上运行测试。

图 22 使用数据源执行多次迭代Web测试
小结
Web性能测试是构成负载测试的基础,是测试你的Web应用程序确保质量和性能的有效方法,由数据驱动的Web性能测试使负载测试更接近真实环境,数据源的每一行数据由负载测试代理用来模拟用户执行类似的用例,但每次用到的数据都不同,如果每次发给服务器的数据都是相同,这样的测试不算真正意义上的测试。
Visual Studio 2010旗舰版中增强的Web测试和负载测试功能为减少QA周期提供了一个极好的方法,可以快速地确定你的应用程序是否如预期那样工作,如果你从Team Foundation Server 2010自动构建执行测试,那么每次构建时都可以执行这些高质量的测试。
本文引用的示例程序全部源代码可从http://visualstudiomagazine.com/~/media/ECG/visualstudiomagazine/Code%20Download/2010/06/BenDay_WebTesting_vs2010.ashx下载。
原文名:Web Performance Testing with Visual Studio 2010
WEB性能测试:你应该带上VisualStudio2010的更多相关文章
- 网站服务器压力Web性能测试(1):Apache Bench:Apache自带服务器压力测试工具
一个网站或者博客到底能够承受多大的用户访问量经常是我们在用VPS或者独立服务器搭建网站了最关心的问题,还有不少人喜欢对LNMP或者LAMP进行一些优化以便提高Web性能,而优化后到底有多大的效果,就需 ...
- Jmeter Web 性能测试入门 (四):一个小实例带你学会 Jmeter 脚本编写
测试场景: 模拟并发100个user,在TesterHome 站内搜索VV00CC 添加线程组 添加HTTP信息头管理器 添加HTTP Sampler 填写HTTP Sampler中的信息 添加监听器 ...
- 解决asp.net web api时间datetime自动带上带上的T和毫秒的问题
今天用asp.net web api写微信小程序的接口时遇到一个问题. 返回的model中的datetime类型的字段自动转换成了“2014-11-08T01:50:06:234”这样的字符串,带上的 ...
- 《零成本实现Web性能测试:基于Apache JMeter》读书笔记
1.性能测试概念 性能测试目的: 评估系统能力,验证系统是否符合预期性能指标 识别系统中的弱点 系统调优,改进系统性能 检测长时间运行可能发生的问题,揭示隐含问题 验证稳定性.可靠性 常见性能指标 B ...
- 网站Web性能测试:ApacheBench,Webbench,http_load使用教程
网站Web性能测试:ApacheBench,Webbench,http_load使用教程 Web服务器 欲思 10个月前 (05-25) 0评论 一个网站或者博客到底能够承受多大的用户访问量经常是 ...
- Web性能测试篇:AB 压力测试
1. 压力测试的概念\定义 1.这段话是给刚接触\学习性能测试知识的初学者,在实际工作中都会接触到性能测试.压力测试.负载测试等专业名词也容易混淆,下面带大家熟悉下这到底是怎么定义: 1.1.性能测试 ...
- Jmeter Web 性能测试入门 (二):Fiddler 抓取 http/https 请求
jmeter自带了拦截request的功能,并且也有对应的tool:badboy 可以用.但由于我经常做移动端的项目,个人还是习惯用fiddler来收集request. 官网下载并安装Fiddler ...
- Web性能测试的简介
一.术语 1.并发用户:并发一般分两种.1)严格意义上的并发,即所有的用户在同一时刻做同一件事情或操作,这种操作一般指做同一类型的业务:2)广义范围的并发,与前者主要区别,尽管多个用户对系统发出了请求 ...
- Web性能测试基本指标
Web性能测试基本指标 Web性能测试的部分概况一般来说,一个Web请求的处理包括以下步骤: (1)客户发送请求 (2)web server接受到请求,进行处理: (3)web server向DB获取 ...
随机推荐
- 全国OA系统下载地址(全)
思道OAhttp://www.anyoffice.net微软.NET平台,支持64位 金和OAhttp://www.jinher.com 红帆OAhttp://www.ioffice.cn 致远OAh ...
- node-http-proxy修改响应结果
最近在项目中使用node-http-proxy遇到需要修改代理服务器响应结果需求,该库已提供修改响应格式为html的方案:Harmon,而项目中返回格式统一为json,使用它感觉太笨重了,所以自己写了 ...
- xml 个人练习2
package cn.gdpe.xml; import java.io.File;import java.io.FileInputStream;import java.io.IOException;i ...
- dedecms由子目录访问修改为根目录访问
现在我需要将原来位于xampp/htdocs/zm下的网站修改到D:/lyh/webhome目录下访问,原来的访问路径为http://localhost/zm,现在为http://www.yihui. ...
- MongoDB 与传统关系型数据库mysql比较
与关系型数据库相比,MongoDB的优点: 转载自 http://blog.sina.com.cn/s/blog_966e430001019s8v.html①弱一致性(最终一致),更能保证用户的访问 ...
- flask request
请求对象要操作 URL (如 ?key=value )中提交的参数可以使用 args 属性:searchword = request.args.get('key', '')用户可能会改变 URL 导致 ...
- Spring Data JPA 多个实体类表联合视图查询
Spring Data JPA 查询数据库时,如果两个表有关联,那么就设个外键,在查询的时候用Specification创建Join 查询便可.但是只支持左连接,不支持右连接,虽说左右连接反过来就能实 ...
- Flex DataGrid 添加控件
哈喽,又和大家见面了.今天要写的东西是关于Flex DataGrid添加“编辑”或“删除”按钮. 下面是部分代码: <mx:DataGrid id="dgShow" x=&q ...
- 如何在js文件中实现获取request.getCotextPath();
我们在jsp中可以方便的使用“request.getCotext()”来获取工程的根目录. 但是如果我们的js代码存在一个单独的js文件中,这时候再想获取根目录,我们就要自己截取了.可以采用下面的方式 ...
- ZT: WEB学习资料
根据个人经验整理一些Web开发的一些技术书籍,希望对需要进入Web开发领域的TX有所指导,由于是在家里整理的,所有每本书对应的豆瓣链接打不开,如果整理有缺陷请多多指出. 入门篇:通过相关技术的全面基础 ...