Web Performance Test : 为Request的Post参数名添加XPath支持

问题描述

本文的标题看起来有些含糊其辞,这里我需要把问题阐述得更加清楚。这是我们使用VSTS进行Web Performance Test时,Asp.net造成的特定问题(也许其他开发工具或插件也会造成类似问题)。 我们知道Asp.net的控件名在前端是自动生成的,比如开发人员设计时,控件名为username; 在bowser端,会自动生成包含一大段前缀的HTML控件,例如ctl00$content$SiteThemeContentPage1$fragment_3526$ctl01$ctl00$LoginForm1$ctl07$username。具体的生成机制我没有研究,但是这个控件名的前缀确实是会随着比如父控件名,重新编译的变化而变化。

对于我们Web Performance Test来说,问题在哪里呢? 比如我们录制了一个Post Request,来模拟一个Form PostBack(见Asp.net的知识),如下图所示:

image

Post的参数名中包含了这些带着自动生成的前缀的控件名。以下两种情况对测试用例的维护非常糟糕:

1,随着编译生成的前缀的变化,每隔一段时间,我们就需要更新Post Request中的参数名,来避免测试失败,如果你有大量的测试用例,或者用例中有大量PostBack的控件(Asp.net中这很常见),这个工作让人发狂。

2,项目可能部署了好几个测试版本需要进行load test,那么你就要维护好几个版本的测试用例,再考虑到第一条,这简直不是人干的了。

 

解决方案

如果是进行Web的UI测试,显然我们已经很多种办法来应付这种情况(虽然Web UI测试本质上和Web Performance测试是不同的,Web Performance测试是直接运行在HTTP层的,但是还是有很多东西可以借鉴);比如Selenium2 我们可以用XPath,css selector来定位控件,TestComplete可以使用Name Mapping;正如我们标题所说的,我们将用XPath的方式,比如上文中的username控件,我们用这样的语法来匹配控件名 -- "//text[contains(@name,'username')]"。 但是Web Performance Test原生不支持XPath,而这就是我们要做的。具体应该怎么做呢? 这里我不打算直接贴出代码了,而是给出主要的步骤:

1,我们应该添加一个WebTestPlugin。为什么不是Custom Extraction Rule呢?因为我们这里需要抽取的并不是Post参数的值,而是Post参数名,考虑一下其中的区别。(是的,写一个Custom Extraction Rule,通过Xpath来抽取Content Parameter是一个非常好的实践,网上已经有相关的文章了,但是本文讲述的是另一个问题)

2,采用HtmlAgilityPack来支持XPATH语法。这是一个为HTML提供XPATH支持的开源库,在我用来还不错,这里下载。当然你可以使用其他的库。

3,我们可以定义这样的语法,如下图所示:

image

前缀"XPath:",后面接XPath的匹配字符串。今后我们也可以添加更多的前缀支持,如"CssSelector:",然后根据不同的前缀,路由到不同的处理函数中

4,写一个自定义的WebTestPlugin。很明显,我们需要重写PreRequest函数,它需要做的是:

    1) 遍历e.Request.Body中FormPostParameters,也就是所有的Post参数。找到参数名包含前缀XPATH:的参数,把xpath匹配符从参数名中提取出来。

    2) 通过e.WebTest.LastResponse.BodyString,获取HTML文本。创建HtmlAgilityPack的HtmlDocument对象。用步骤1种得到的xpath进行查询,找到控件。

    3) 用步骤2中得到的真实的控件名,也就是ctl00$content$SiteThemeContentPage1$fragment_3526$ctl01$ctl00$LoginForm1$ctl07$username。来替换FormPostParameter对象中原来的的控件名,也就是匹配符XPath://input[contains(@name,’username’)],大功告成

 

Binhua Liu原创,2013/10/5

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值