原文地址: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的更多相关文章

  1. 网站服务器压力Web性能测试(1):Apache Bench:Apache自带服务器压力测试工具

    一个网站或者博客到底能够承受多大的用户访问量经常是我们在用VPS或者独立服务器搭建网站了最关心的问题,还有不少人喜欢对LNMP或者LAMP进行一些优化以便提高Web性能,而优化后到底有多大的效果,就需 ...

  2. Jmeter Web 性能测试入门 (四):一个小实例带你学会 Jmeter 脚本编写

    测试场景: 模拟并发100个user,在TesterHome 站内搜索VV00CC 添加线程组 添加HTTP信息头管理器 添加HTTP Sampler 填写HTTP Sampler中的信息 添加监听器 ...

  3. 解决asp.net web api时间datetime自动带上带上的T和毫秒的问题

    今天用asp.net web api写微信小程序的接口时遇到一个问题. 返回的model中的datetime类型的字段自动转换成了“2014-11-08T01:50:06:234”这样的字符串,带上的 ...

  4. 《零成本实现Web性能测试:基于Apache JMeter》读书笔记

    1.性能测试概念 性能测试目的: 评估系统能力,验证系统是否符合预期性能指标 识别系统中的弱点 系统调优,改进系统性能 检测长时间运行可能发生的问题,揭示隐含问题 验证稳定性.可靠性 常见性能指标 B ...

  5. 网站Web性能测试:ApacheBench,Webbench,http_load使用教程

    网站Web性能测试:ApacheBench,Webbench,http_load使用教程 Web服务器 欲思 10个月前 (05-25) 0评论   一个网站或者博客到底能够承受多大的用户访问量经常是 ...

  6. Web性能测试篇:AB 压力测试

    1. 压力测试的概念\定义 1.这段话是给刚接触\学习性能测试知识的初学者,在实际工作中都会接触到性能测试.压力测试.负载测试等专业名词也容易混淆,下面带大家熟悉下这到底是怎么定义: 1.1.性能测试 ...

  7. Jmeter Web 性能测试入门 (二):Fiddler 抓取 http/https 请求

    jmeter自带了拦截request的功能,并且也有对应的tool:badboy 可以用.但由于我经常做移动端的项目,个人还是习惯用fiddler来收集request. 官网下载并安装Fiddler ...

  8. Web性能测试的简介

    一.术语 1.并发用户:并发一般分两种.1)严格意义上的并发,即所有的用户在同一时刻做同一件事情或操作,这种操作一般指做同一类型的业务:2)广义范围的并发,与前者主要区别,尽管多个用户对系统发出了请求 ...

  9. Web性能测试基本指标

    Web性能测试基本指标 Web性能测试的部分概况一般来说,一个Web请求的处理包括以下步骤: (1)客户发送请求 (2)web server接受到请求,进行处理: (3)web server向DB获取 ...

随机推荐

  1. java 基本类型和包装类的比较

    public class BoxingTest { @Test public void test1(){ String a = new String("1"); String b ...

  2. 利用ASP.NET AJAX的Timer讓GridView每隔一段時間做到自動換頁的功能

    最近在討論區看到這個問題,小弟利用asp.net ajax的timer來實作這個功能 利用timer每隔一段時間,讓gridview自動跳頁並且更新gridview的內容 asp.net(c#) Gr ...

  3. 利用linq快速判断给定数字是否包含在某个段范围内

    一.需求: 知道某段范围0x0020~0x007F0x00A0~0x017F0x01A0~0x01CF0x01F0~0x01FF0x0210~0x021F0x1EA0~0x1EFF给定一个值,快速判断 ...

  4. [总结]RTMP流媒体技术零基础学习方法

    本文主要总结一些我在学习RTMP流媒体技术过程中积累的经验.也为后来学习RTMP流媒体技术的人们一个参考.本文力图从简到难,循序渐进的介绍RTMP流媒体技术的方方面面,先从应用说起,逐步深化剖析相关工 ...

  5. Vijos1865 NOI2014 魔法森林 LCT维护生成树

    基本思路: 首先按照weightA升序排序,然后依次在图中加边,并维护起点到终点路径上weightB的最大值 如果加边过程中生成了环,则删除环中weightB最大的边 由于是无向图,点之间没有拓扑序, ...

  6. 如何让低版本的IE浏览器(IE6/IE7/IE8)支持HTML5 header等新标签

    html5提供的一些新标签(article,aside,dialog,footer,header,section,footer,nav,figure,menu)使用起来非常的方便,但是低版本的IE浏览 ...

  7. confluence的权限管理

    上一篇解讲如何破解,安装confluence5.8.10,这次主要是看权限管理的实现.因为公司对知识的管理不仅是简单的分享,还要求不同权限的人看到不同的内容,所以在一开始就需要对权限这一块有所了解,以 ...

  8. phpcms v9后台美化需要修改的部分整理

    PHPcms后台登陆后的页面修改 Phpcms->modules->admin->templates->main.tpl.php 1,安全提示部分 <h6>< ...

  9. Java环境配置出现的问题及解决办法

    我使用的安装文件,从博客园一个童鞋那里找到的,连接是http://www.cnblogs.com/SelectError/p/3205582.html#commentform 开发基础环境,版本为Ja ...

  10. js 代码记录

    window.screen.availWidth 返回当前屏幕宽度(空白空间) window.screen.availHeight 返回当前屏幕高度(空白空间) window.screen.width ...