利用LoadRunner对Web Services进行测试时,通常有三种可供采用的方法:

  • 在LoadRunner的Web Services虚拟用户协议中,【Add Service Call】
  • 在LoadRunner的Web Services虚拟用户协议中,【Import SOAP】
  • 在LoadRunner的Web(HTTP/HTML)虚拟用户协议中, 利用web_custom_request函数构造WebService请求

在前一篇文章中,已经对第一种方法【Add Service Call】进行了详细介绍。然而,这种方法在实际项目中往往不适合测试人员。

在实际性能测试项目中,由于性能测试对象通常只是在众多Services中选取的少数典型Service,因此作为测试人员没有必要对所有Services的调用方式进行研究,也就没有必要利用WSDL来加载所有Service的调用方式;另一方面,对于新接触一个Service的测试人员,对其调用方式及其合法参数可能不是很清楚,这种情况下通常需要开发人员为测试人员提供待测Service的调用方式,而SOAP报文便是调用方式的一种常用载体。

因此,掌握LoadRunner对SOAP报文的调用方式,对性能测试的项目实施具有重要意义。本文将对第二种方法,即【Import SOAP】进行详细讲解。

为了方便与第一种方法形成对比,本文采用上次使用到的Web Services作为演示案例

1. 获取SOAP报文

在性能测试项目中,我们可以直接向开发人员获取待测Service的请求报文,这可以极大地缩短测试准备工作的时间。

对于提供Web Services的服务商,通常会在其网站上详细地对SOAP调用方式进行介绍,在本演示案例的介绍页面中,可以看到服务商为getWeatherbyCityName提供了四种调用方式:SOAP 1.1、SOAP 1.2、HTTP GET和HTTP POST,本案例采用SOAP 1.1的形式进行演示。

采用SOAP 1.1的请求报文如下所示:

POST /WebServices/WeatherWebService.asmx HTTP/1.1
Host: webservice.webxml.com.cn
Content-Type: text/xml; charset=utf-8
Content-Length: length
SOAPAction: "http://WebXml.com.cn/getWeatherbyCityName" <?xml version="1.0" encoding="utf-8"?>
<soap:Envelope xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xmlns:xsd="http://www.w3.org/2001/XMLSchema" xmlns:soap="http://schemas.xmlsoap.org/soap/envelope/">
<soap:Body>
<getWeatherbyCityName xmlns="http://WebXml.com.cn/">
<theCityName>string</theCityName>
</getWeatherbyCityName>
</soap:Body>
</soap:Envelope>

将上面这段xml代码保存至一个xml文件,如getWeatherbyCityName.xml,即得到测试所需的SOAP报文。

在报文头中,我们还获取到两个重要信息:

  • Service的URL为/WebServices/WeatherWebService.asmx,加上服务商域名后得到完整的URL为http://webservice.webxml.com.cn/WebServices/WeatherWebService.asmx
  • SOAPAction: "http://WebXml.com.cn/getWeatherbyCityName"

2. 在LoadRunner中导入SOAP报文

在LoadRunner的Web Services协议中,点击【Import SOAP】,加载之前准备好的SOAP报文,即xml文件;加载完成后,在URL和SOAP Action中分别填入获取得到的地址信息;在Response Parameter中填写存储返回内容的参数名称;如下图所示。

点击【OK】后,便能在脚本界面中生成一个soap_request函数,如下图所示。

通过上图可知,SOAP报文中的全部内容已成功转换为LoadRunner的soap_request函数。

3. 回放脚本,查看结果

将脚本中的字段theCityName赋值为“广州”;在“Run-time Settings”中打开日志“Extended log”,勾选“Parameter substitution”和“Data returned by server”。运行脚本后,查看“Replay Log”,如下图所示。

详细结果如下所示。

theWeatherInfo = <?xml version="1.0" encoding="utf-8"?><soap:Envelope xmlns:soap="http://schemas.xmlsoap.org/soap/envelope/" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xmlns:xsd="http://www.w3.org/2001/XMLSchema"><soap:Body><getWeatherbyCityNameResponse xmlns="http://WebXml.com.cn/"><getWeatherbyCityNameResult><string>鐩磋緰甯\x82</string><string>鍖椾含</string><string>54511</string><string>54511.jpg</string><string>2013-8-5 13:17:17</string><string>23鈩\x83/34鈩\x83</string><string>8鏈\x885鏃\xa5 闃磋浆澶氫簯</string><string>鏃犳寔缁鍚戝井椋\x8e</string><string>2.gif</string><string>1.gif</string><string>浠婃棩澶╂皵瀹炲喌锛氭皵娓╋細29鈩冿紱椋庡悜/椋庡姏锛氬崡椋\x8e 2绾э紱婀垮害锛\x9a58%锛涚┖姘旇川閲忥細杈冨樊锛涚传澶栫嚎寮哄害锛氬己</string><string>绌胯。鎸囨暟锛氱値鐑紝寤鸿绌跨煭琛\x80佺煭瑁ょ瓑娓呭噳澶忓鏈嶈銆\x82\n杩囨晱鎸囨暟锛氳緝鏄撳彂锛屽鍑洪渶杩滅杩囨晱婧愶紝閫傚綋閲囧彇闃叉姢鎺柦銆\x82\n杩愬姩鎸囨暟锛氳緝閫傚疁锛屾埛澶栬繍鍔ㄨ娉ㄦ剰闃叉檼銆\x82\n娲楄溅鎸囨暟锛氫笉瀹滐紝浠婂ぉ鏈夐洦锛岄洦姘村拰娉ユ按浼氬紕鑴忕埍杞︺\x80\x82\n鏅炬檼鎸囨暟锛氭瀬閫傚疁锛屽ぉ姘斾笉閿欙紝鎶撶揣鏃舵満璁╄。鐗╂檼澶槼鍚с\x80\x82\n鏃呮父鎸囨暟锛氳緝閫傚疁锛屽ぉ姘旂暐鐑紝澶栧嚭璇锋敞鎰忛槻鏅掑摝锛\x81\n璺喌鎸囨暟锛氬共鐕ワ紝澶╂皵杈冨ソ锛岃矾闈㈡瘮杈冨共鐕ワ紝璺喌杈冨ソ銆\x82\n鑸掗\x80傚害鎸囨暟锛氬緢涓嶈垝閫傦紝鐑堟棩鐐庣値鐨勬櫞澶╋紝寰堢儹銆\x82\n绌烘皵姹℃煋鎸囨暟锛氳緝宸紝姘旇薄鏉′欢杈冧笉鍒╀簬绌烘皵姹℃煋鐗╂墿鏁c\x80\x82\n绱绾挎寚鏁帮細寮猴紝娑傛摝SPF澶т簬15銆丳A+闃叉檼鎶よ偆鍝併\x80\x82</string><string>24鈩\x83/31鈩\x83</string><string>8鏈\x886鏃\xa5 闆烽樀闆ㄨ浆闃甸洦</string><string>鏃犳寔缁鍚戝井椋\x8e</string><string>4.gif</string><string>3.gif</string><string>22鈩\x83/28鈩\x83</string><string>8鏈\x887鏃\xa5 涓洦杞ぇ闆\xa8</string><string>鏃犳寔缁鍚戝井椋\x8e</string><string>8.gif</string><string>9.gif</string><string>鍖椾含浣嶄簬鍗庡寳骞冲師瑗垮寳杈圭紭锛屽競涓績浣嶄簬鍖楃含39搴︼紝涓滅粡116搴︼紝鍥涘懆琚渤鍖楃渷鍥寸潃锛屼笢鍗楀拰澶╂触甯傜浉鎺ャ\x80傚叏甯傞潰绉竴涓囧叚鍗冨骞虫柟鍏噷锛岃緰12鍖\xba6鍘匡紝浜哄彛1100浣欎竾銆傚寳浜负鏆栨俯甯﹀崐婀挎鼎澶ч檰鎬у椋庢皵鍊欙紝澶忓鐐庣儹澶氶洦锛屽啲瀛e瘨鍐峰共鐕ワ紝鏄ャ\x80佺鐭績锛屽勾骞冲潎姘旀俯10-12鎽勬皬搴︺\x80傚寳浜槸涓栫晫鍘嗗彶鏂囧寲鍚嶅煄鍜屽彜閮戒箣涓\x80銆傛棭鍦ㄤ竷鍗佷竾骞村墠锛屽寳浜懆鍙e簵鍦板尯灏卞嚭鐜颁簡鍘熷浜虹兢閮ㄨ惤鈥滃寳浜汉鈥濄\x80傝\x80屽寳浜缓鍩庝篃宸叉湁涓ゅ崈澶氬勾鐨勫巻鍙诧紝鏈\x80鍒濊浜庤杞界殑鍚嶅瓧涓衡\x80滆摕鈥濄\x80傚叕鍏冨墠1045骞村寳浜垚涓鸿摕銆佺嚂绛夎渚浗鐨勯兘鍩庯紱鍏厓鍓\x8d221骞寸Е濮嬬殗缁熶竴涓浗浠ユ潵锛屽寳浜竴鐩存槸涓浗鍖楁柟閲嶉晣鍜屽湴鏂逛腑蹇冿紱鑷叕鍏\x83938骞翠互鏉ワ紝鍖椾含鍙堝厛鍚庢垚涓鸿窘闄兘銆侀噾涓婇兘銆佸厓澶ч兘銆佹槑娓呭浗閮姐\x80\x821949骞\xb410鏈\x881鏃ユ寮忓畾涓轰腑鍗庝汉姘戝叡鍜屽浗棣栭兘銆傚寳浜叿鏈変赴瀵岀殑鏃呮父璧勬簮锛屽澶栧紑鏀剧殑鏃呮父鏅偣杈\xbe200澶氬锛屾湁涓栫晫涓婃渶澶х殑鐨囧绱鍩庛\x80佺キ澶╃搴欏ぉ鍧涖\x80佺殗瀹惰姳鍥寳娴枫\x80佺殗瀹跺洯鏋楅鍜屽洯锛岃繕鏈夊叓杈惧箔銆佹厱鐢板唱銆佸徃椹彴闀垮煄浠ュ強涓栫晫涓婃渶澶х殑鍥涘悎闄㈡伃鐜嬪簻绛夊悇鑳滃彜杩广\x80傚叏甯傚叡鏈夋枃鐗╁彜杩\xb97309椤癸紝鍏朵腑鍥藉鏂囩墿淇濇姢鍗曚綅42涓紝甯傜骇鏂囩墿淇濇姢鍗曚綅222涓\x80傚寳浜殑甯傛爲涓哄浗妲愬拰渚ф煆锛屽競鑺变负鏈堝鍜岃強鑺便\x80傚彟澶栵紝鍖椾含鍑轰骇鐨勮薄鐗欓洉鍒汇\x80佺帀鍣ㄩ洉鍒汇\x80佹櫙娉拌摑銆佸湴姣瓑浼犵粺鎵嬪伐鑹哄搧椹拌獕涓栫晫銆\x82</string></getWeatherbyCityNameResult></getWeatherbyCityNameResponse></soap:Body></soap:Envelope>

通过IE浏览器访问该Web Service,查询“广州”时得到结果如下图所示。

通过对比LoadRunner的Replay Log和浏览器的返回页面可知:LoadRunner回放得到的结果与查询条件不一致。在LR脚本中将theCityName更改为“深圳”、“上海”等城市后重新回放脚本,仍然得到相同的结果。

观察返回结果的结构可知,第三个string字段为城市编码,在LR中采用不同城市名称进行回放脚本时,查询得到的城市编码均为54511。在WeatherWebService的服务商网页中,可查询得到城市编码“54511”对应的城市为“北京”。

回顾报文中的Content-Type信息可知,请求报文与响应报文的编码均为UTF-8。因此可以猜想该问题是由于LR脚本中的编码不为UTF-8造成的,从而使得脚本中的设置的汉字theCityName不被服务商所识别。

对LR脚本中需传送的汉字进行编码转换,即将脚本中的汉字转换为UTF-8,转换方法如下图所示:

重新回放脚本,查看Replay Log。

theWeatherInfo = <?xml version="1.0" encoding="utf-8"?><soap:Envelope xmlns:soap="http://schemas.xmlsoap.org/soap/envelope/" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xmlns:xsd="http://www.w3.org/2001/XMLSchema"><soap:Body><getWeatherbyCityNameResponse xmlns="http://WebXml.com.cn/"><getWeatherbyCityNameResult><string>骞夸笢</string><string>骞垮窞</string><string>59287</string><string>59287.jpg</string><string>2013-8-5 21:58:50</string><string>25鈩\x83/34鈩\x83</string><string>8鏈\x886鏃\xa5 鏅\xb4</string><string>鏃犳寔缁鍚戝井椋\x8e</string><string>0.gif</string><string>0.gif</string><string>浠婃棩澶╂皵瀹炲喌锛氭皵娓╋細26鈩冿紱椋庡悜/椋庡姏锛氫笢鍖楅 1绾э紱婀垮害锛\x9a93%锛涚┖姘旇川閲忥細杈冨樊锛涚传澶栫嚎寮哄害锛氬緢寮\xba</string><string>绌胯。鎸囨暟锛氱値鐑紝寤鸿绌跨煭琛\x80佺煭瑁ょ瓑娓呭噳澶忓鏈嶈銆\x82\n杩囨晱鎸囨暟锛氫笉鏄撳彂锛岄櫎鐗规畩浣撹川锛屾棤闇\x80鎷呭績杩囨晱闂銆\x82\n杩愬姩鎸囨暟锛氳緝閫傚疁锛屾埛澶栬繍鍔ㄨ娉ㄦ剰闃叉檼銆\x82\n娲楄溅鎸囨暟锛氳緝閫傚疁锛屾棤闆ㄤ笖椋庡姏杈冨皬锛屾槗淇濇寔娓呮磥搴︺\x80\x82\n鏅炬檼鎸囨暟锛氭瀬閫傚疁锛屽ぉ姘斾笉閿欙紝鎶撶揣鏃舵満璁╄。鐗╂檼澶槼鍚с\x80\x82\n鏃呮父鎸囨暟锛氳緝閫傚疁锛屽ぉ姘旂暐鐑紝澶栧嚭璇锋敞鎰忛槻鏅掑摝锛\x81\n璺喌鎸囨暟锛氬共鐕ワ紝澶╂皵杈冨ソ锛岃矾闈㈡瘮杈冨共鐕ワ紝璺喌杈冨ソ銆\x82\n鑸掗\x80傚害鎸囨暟锛氬緢涓嶈垝閫傦紝鐑堟棩鐐庣値鐨勬櫞澶╋紝寰堢儹銆\x82\n绌烘皵姹℃煋鎸囨暟锛氳緝宸紝姘旇薄鏉′欢杈冧笉鍒╀簬绌烘皵姹℃煋鐗╂墿鏁c\x80\x82\n绱绾挎寚鏁帮細寰堝己锛屾秱鎿PF20浠ヤ笂锛孭A++鎶よ偆鍝侊紝閬垮己鍏夈\x80\x82</string><string>26鈩\x83/34鈩\x83</string><string>8鏈\x887鏃\xa5 闆烽樀闆ㄨ浆鏅\xb4</string><string>鏃犳寔缁鍚戝井椋\x8e</string><string>4.gif</string><string>0.gif</string><string>26鈩\x83/34鈩\x83</string><string>8鏈\x888鏃\xa5 闆烽樀闆ㄨ浆鏅\xb4</string><string>鏃犳寔缁鍚戝井椋\x8e</string><string>4.gif</string><string>0.gif</string><string>骞垮窞鏄箍涓滅渷鐨勭渷浼\x9a,鏄腑鍥藉崡鏂规渶澶х殑娴锋花鍩庡競锛屽箍宸炰綅浜庝笢缁\x8f113銆\x8217`锛屽寳绾\xac23銆\x828`锛屽湴澶勪腑鍥藉ぇ闄嗗崡閮紝骞夸笢鐪佸崡閮紝鐝犳睙涓夎娲插寳缂樸\x80傚箍宸炰复鍗楁捣锛岄偦杩戦娓壒鍒鏀垮尯锛屾槸涓浗閫氬線涓栫晫鐨勫崡澶ч棬锛屽箍宸炲睘涓橀櫟鍦板甫銆備腑鍥界殑绗笁澶ф渤----鐝犳睙浠庡箍宸炲競涓績绌挎祦鑰岃繃銆傚箍宸炴槸涓\x80搴у巻鍙叉枃鍖栧悕鍩庛\x80傜浉浼犲湪杩滃彜鏃跺\x80欙紝鏇炬湁浜斾綅浠欎汉锛岃韩绌夸簲鑹插僵鏈嶃\x80侀獞鐫\x80鍢磋绋荤鐨勪簲鑹蹭粰缇婇檷涓存鍦帮紝鎶婄ɑ绌楄禒缁欑櫨濮擄紝绁濇効杩欓噷姘告棤楗ヨ崚銆備粠姝わ紝骞垮窞渚挎湁鈥滅緤鍩庘\x80濄\x80佲\x80滅鍩庘\x80濈殑缇庣О锛屸\x80滀簲缇娾\x80濅篃鎴愪负骞垮窞鐨勮薄寰併\x80傚箍宸炴棦鏄腑鍥戒篃鏄笘鐣屽悕鍩庯紝鍙堟槸涓\x80搴у彜鍩庯紝鍥犲巻鍙蹭笂鏈変簲缇婁粰瀛愰檷涓寸尞绋荤鐨勬晠浜嬶紝骞垮窞鍙堢О涓衡\x80滅緤鍩庘\x80濆拰鈥滅鍩庘\x80濓紝绠\x80绉扳\x80滅鈥濓紱骞垮窞涓\x80骞村洓瀛e鏄ャ\x80佺箒鑺变技閿︼紝闄ゅ杩庢槬鑺卞競闂诲悕娴峰唴澶栵紝鏁呭張鏈夆\x80滆姳鍩庘\x80濈殑缇庤獕銆傚箍宸炲湴澶勪綆绾\xac,灞炲崡浜氱儹甯﹀椋庢皵鍊欏尯銆傚湴琛ㄦ帴鍙楀お闃宠緪灏勯噺杈冨锛屽悓鏃跺彈瀛i鐨勫奖鍝\x8d,澶忓娴锋磱鏆栨皵娴佸舰鎴愰珮娓┿\x80侀珮婀裤\x80佸闆ㄧ殑姘斿\x80欙紱鍐鍖楁柟澶ч檰鍐烽褰㈡垚浣庢俯銆佸共鐕ャ\x80佸皯闆ㄧ殑姘斿\x80欍\x80傚勾骞冲潎姘旀俯涓\xba21.4-21.9搴︼紝骞撮檷闆ㄩ噺骞冲潎涓\xba1623.6-1899.8mm锛屽寳閮ㄥ浜庡崡閮ㄣ\x80\x821982骞达紝骞垮窞琚浗鍔¢櫌閫夊畾涓哄叏鍥介鎵瑰巻鍙叉枃鍖栧悕鍩庝箣涓\x80锛屾槸鎴戝浗閲嶇偣鏃呮父鍩庡競銆\x821999骞\xb41鏈堬紝骞垮窞琚瘎涓轰紭绉\x80鏃呮父鍩庡競銆傛櫙瑙傦細鐧戒簯灞便\x80佽幉鑺卞北銆佸崡娴风搴欍\x80佷經灞辩搴欍\x80佸箍宸炲姩鐗╁洯绛夈\x80\x82</string></getWeatherbyCityNameResult></getWeatherbyCityNameResponse></soap:Body></soap:Envelope>

再次对比LoadRunner的Replay Log和浏览器的返回页面可知,LoadRunner对Web Service实现了正确的调用。

虽然LoadRunner获取得到的结果中汉字显示为乱码,但从性能测试的角度来看,该问题对性能测试结果没有影响,可暂时忽略。

使用LoadRunner对Web Services进行调用--Import Soap的更多相关文章

  1. 使用LoadRunner对Web Services进行调用--Add Service Call

    利用LoadRunner对Web Services进行测试时,通常有三种可供采用的方法: 在LoadRunner的Web Services虚拟用户协议中,[Add Service Call] 在Loa ...

  2. Java与.NET 的Web Services相互调用

    一:简介 本文介绍了Java与.NET开发的Web Services相互调用的技术.本文包括两个部分,第一部分介绍了如何用.NET做客户端调用Java写的Web Services,第二部分介绍了如何用 ...

  3. loadrunner:web services接口测试

    本文以实例讲解web services接口测试操作,内容包括:脚本生成.参数化和接口与接口间的取值关联操作. 网站"http://www.webxml.com.cn/zh_cn/web_se ...

  4. Web Services 中XML、SOAP和WSDL的一些必要知识

    Web Services 是由xml来定义数据格式的,通过SOAP协议在各个系统平台中传输,那么接下来讨论下SOAP和WSDL的各自作用. SOAP和WSDL对Web Service.WCF进行深入了 ...

  5. Web Services的相关名词解释:WSDL与SOAP

    在对Web Services进行性能测试时,接触到最多的两个名词就是WSDL和SOAP.利用LoadRunner对Web Services进行调用的时候,也存在两种常用方法,即基于WSDL的[Add ...

  6. asp调用.net xml web services

    来源:http://www.cnblogs.com/notus/archive/2006/08/10/473000.html#2662503 (是不是实际上可以用这个办法调用任何xml web ser ...

  7. The Python web services developer: XML-RPC for Python

    原文地址:http://www.ibm.com/developerworks/webservices/library/ws-pyth10/index.html 摘要:概括地说,您可以将 XML-RPC ...

  8. RESTful Web Services初探

    RESTful Web Services初探 作者:杜刚 近几年,RESTful Web Services渐渐开始流行,大量用于解决异构系统间的通信问题.很多网站和应用提供的API,都是基于RESTf ...

  9. 跟我一起学WCF(3)——利用Web Services开发分布式应用

    一.引言 在前面文章中分别介绍了MSMQ和.NET Remoting技术,今天继续分享.NET 平台下另一种分布式技术——Web Services 二.Web Services 详细介绍 2.1 We ...

随机推荐

  1. 使用html5兼容低版本浏览器

    因为html5 新出的一些语义化的标签,在低版本浏览器下不能识别,举个例子,比如你写了一个 header 标签中,写了一段文本,在低版本浏览器下,肯定是能看到的,但是,那是他是不认识 header标签 ...

  2. servlet HttpSession 监听器

    一.Servlet中对象作用域 1. ServletContext 上下文 应用服务器一启动就产生该对象,服务器关闭即销毁 作用于全局,所有Servlet ,相当于静态变量 2. HttpSessio ...

  3. U3D 精灵的点击监听

    U3D游戏中,可能会用到点击对象,完成某项操作, 方法一:可以通过接收Input对象的输入,进行利用 方法二:给对象绑定一个collier 组件,然后就能后使用内置方法 这里有点不同,方法一,是不管哪 ...

  4. CI框架篇之基础篇(1)

    CodeIgniter 是一套给 PHP 网站开发者使用的应用程序开发框架和工具包.它提供一套丰富的标准库以及简单的接口和逻辑结构, 其目的是使开发人员更快速地进行项目开发.使用 CodeIgnite ...

  5. BootStrap入门_创建第一个例子

    一.选择合适的IDE 一般前端开发选用的都是WebStorm.Brackets等,因为本人对VS比较熟悉,索性就拿VS进行练习了,而且VS练习有些好处,就是通过nuget方式获取BootStrap可以 ...

  6. SQL反模式部分内容笔记

    规范化: 1, 以一种我们能够理解的方式表达这个世界中的事物; 2, 减少数据冗余存储, 防止异常或者不一致的数据; 3, 支持完整性约束.  Tips: 提高数据的性能不在此列表中. 意义: 规范化 ...

  7. jQuery 尺寸

    通过 jQuery,很容易处理元素和浏览器窗口的尺寸. jQuery 尺寸 方法 jQuery 提供多个处理尺寸的重要方法: width() height() innerWidth() innerHe ...

  8. 数据库(学习整理)----1--如何彻底清除系统中Oracle的痕迹(重装Oracle时)

    1.关于重装Oracle数据库: 由于以前装过Oracle数据库,但是版本不怎么样,结果过了试用期之后,我就没有破解和再找合适的版本了!直接使用电脑管家卸载了!可想而知,肯定没清除Oracle痕迹啊! ...

  9. POJ 1936 All in All(模拟)

    All in All 题目链接:http://poj.org/problem?id=1936 题目大意:判断从字符串s2中能否找到子串s1.字符串长度为10W. Sample Input sequen ...

  10. Codevs 1065 01字符串

    1065 01字符串 时间限制: 1 s 空间限制: 128000 KB 题目等级 : 黄金 Gold 传送门 题目描述 Description 输出仅有0和1组成的长度为n的字符串,并且其中不能含有 ...