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获取 ...
随机推荐
- Android使用 selector 自定义控件背景 (以spinner 为例)
1. 在drawable中设置背景spinner_style.xml 文件 如图: 2. 在 styles.xml 中添加该背景 3. 最后在 spinner 控件添加样式 4.参考 http:// ...
- ssh配置事务
http://blog.csdn.net/jianxin1009/article/details/9202907(不错)
- magic_quotes_gpc、mysql_real_escape_string、addslashes的区别及用法
本篇文章,主要先重点说明magic_quotes_gpc.mysql_real_escape_string.addslashes 三个函数方法的含义.用法,并举例说明.然后阐述下三者间的区别.关系.一 ...
- jQuery Callback 方法
Callback 函数在当前动画 100% 完成之后执行. jQuery 动画的问题 许多 jQuery 函数涉及动画.这些函数也许会将 speed 或 duration 作为可选参数. 例子:$(& ...
- C#入门经典(第五版)学习笔记(三)
---------------面向对象编程简介--------------- UML表示方法: 1)方框上中下三分 2)上框写类名 3)中框写属性和字段,例如:+Description:string ...
- 序列数据挖掘[ZZ]
一.时间序列数据挖掘 时间序列是数据存在的特殊形式,序列的过去值会影响到将来值,这种影响的大小以及影响的方式可由时间序列中的趋势周期及非平稳等行为来刻画.一般来讲,时间序列数据都具有躁声.不稳定.随机 ...
- 342. Power of Four
题目: Given an integer (signed 32 bits), write a function to check whether it is a power of 4. Example ...
- c++primerplus(第六版)编程题——第5章(循环和关系表达式)
声明:作者为了调试方便,每一章的程序写在一个工程文件中,每一道编程练习题新建一个独立文件,在主函数中调用,我建议同我一样的初学者可以采用这种方式,调试起来会比较方便. (具体方式参见第3章模板) 1. ...
- javascript--15条规则解析JavaScript对象布局(__proto__、prototype、constructor)
大家都说JavaScript的属性多,记不过来,各种结构复杂不易了解.确实JS是一门入门快提高难的语言,但是也有其他办法可以辅助记忆.下面就来讨论一下JS的一大难点-对象布局,究竟设计JS这门语言的人 ...
- ubuntn 虚拟机NAT 静态IP 网络配置
在虚拟机安装ubuntu12.04自动获取IP 一切都没有问题 ssh连接也正常.关机重启后郁闷的发现网络已经不通了,于是开始了以下的摸索. 1.配置静态IP 网关: ip段: 命令: Vim /et ...