WEB性能测试:你应该带上Visual Studio 2010
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自动构建执行测试,那么每次构建时都可以执行这些高质量的测试。