使用LoadRunner对Web Services进行调用--Import Soap
利用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的更多相关文章
- 使用LoadRunner对Web Services进行调用--Add Service Call
利用LoadRunner对Web Services进行测试时,通常有三种可供采用的方法: 在LoadRunner的Web Services虚拟用户协议中,[Add Service Call] 在Loa ...
- Java与.NET 的Web Services相互调用
一:简介 本文介绍了Java与.NET开发的Web Services相互调用的技术.本文包括两个部分,第一部分介绍了如何用.NET做客户端调用Java写的Web Services,第二部分介绍了如何用 ...
- loadrunner:web services接口测试
本文以实例讲解web services接口测试操作,内容包括:脚本生成.参数化和接口与接口间的取值关联操作. 网站"http://www.webxml.com.cn/zh_cn/web_se ...
- Web Services 中XML、SOAP和WSDL的一些必要知识
Web Services 是由xml来定义数据格式的,通过SOAP协议在各个系统平台中传输,那么接下来讨论下SOAP和WSDL的各自作用. SOAP和WSDL对Web Service.WCF进行深入了 ...
- Web Services的相关名词解释:WSDL与SOAP
在对Web Services进行性能测试时,接触到最多的两个名词就是WSDL和SOAP.利用LoadRunner对Web Services进行调用的时候,也存在两种常用方法,即基于WSDL的[Add ...
- asp调用.net xml web services
来源:http://www.cnblogs.com/notus/archive/2006/08/10/473000.html#2662503 (是不是实际上可以用这个办法调用任何xml web ser ...
- The Python web services developer: XML-RPC for Python
原文地址:http://www.ibm.com/developerworks/webservices/library/ws-pyth10/index.html 摘要:概括地说,您可以将 XML-RPC ...
- RESTful Web Services初探
RESTful Web Services初探 作者:杜刚 近几年,RESTful Web Services渐渐开始流行,大量用于解决异构系统间的通信问题.很多网站和应用提供的API,都是基于RESTf ...
- 跟我一起学WCF(3)——利用Web Services开发分布式应用
一.引言 在前面文章中分别介绍了MSMQ和.NET Remoting技术,今天继续分享.NET 平台下另一种分布式技术——Web Services 二.Web Services 详细介绍 2.1 We ...
随机推荐
- (转)ASP.NET QueryString乱码解决问题
正常的情况下,现在asp.net的网站很多都直接使用UTF8来进行页面编码的,这与Javascript.缺省网站的编码是相同的,但是也有相当一部分采用GB2312. 对于GB2312的网站如果直接用j ...
- 牛皮市和猴市的好工具和指标:BOLL
(转贴)布林线BOLL用法 布林线是股市中经常用到的技术指标之一,它反映了股价的波动状况.山版软件指标图中的布林线由三条组成,上边的白线(up)是阻力线,下边的黄线(down)是支撑线,中间的粉红线( ...
- 排序算法(冒泡,选择,快速)Java 实现
冒泡 排序: public static void Bubblesort(int [] a) { for(int x=0;x<=a.length-1;x++) { for(int y=0;y&l ...
- MySQL Workbench 6.3 CE 不显示MySql、infomation_schema等数据库
MySQL Workbench 6.3 CE 不显示MySql.infomation_schema等数据库 通过修改偏好设置可显示: 1.Edit-->Preferences....-----& ...
- Oracle 11g 虚拟列 Virtual Column介绍
Oracle 11G 虚拟列 Virtual Column Oracle 11G 在表中引入了虚拟列,虚拟列是一个表达式,在运行时计算,不存储在数据库中,不能更新虚拟列的值. 定义一个虚拟列的语法: ...
- SQL数据库的备份和恢复
SQL数据库的备份和恢复 一.SQL数据库的备份: 1.依次打开 开始菜单 → 程序 → Microsoft SQL Server 2008 → SQL Server Management Studi ...
- COM简单应用示例
使用com技术开发模式进行的示例. com技术关键部分源码:主要将所有接口都写入到这个文件中 testinterface.h #ifndef TESTINTERFACE_H #define TESTI ...
- Linux的cat、more、less的区别
cat命令功能用于显示整个文件的内容单独使用没有翻页功能因此经常和more命令搭配使用,cat命令还有就是将数个文件合并成一个文件的功能. more命令功能:让画面在显示满一页时暂停,此时可按空格健继 ...
- CentOS7 开关防火墙
systemctl start firewalld.service#启动firewallsystemctl stop firewalld.service#停止firewallsystemctl dis ...
- 修改Tomcat命令窗口的名字
在运行多个tomcat窗口的时候,可以通过修改tomcat命令窗口的名字来区分不同的tomcat,修改如下: 找到tomcat下面的这个文件:tomcat_home\bin\catalina.bat, ...