用winsock来服务webservice(原创)

如何用LoadRunner来测试webservice协议?我相信大家可以在网上找到很多资料。今天我要说的是如何用winsock来服务webservice。我刚刚完成的这个项目采用的是webservice协议。步骤很简单,首先加载试卷,然后答题,提交答案。

LoadRunner来测试webservice协议,第一步是要知道用到哪些函数。在我的项目中,我用到了2个函数,一个是加载试卷:GetQuizSetting。一个是提交考试成绩:TrackUserQuizDetail。怎么知道这2个函数呢?这个可以问开发。然后开发会告诉你在这个项目中用到了哪些函数。选择“Add Service Call”,在“Operation”中找到这2个函数,点”OK”,添加成功。

脚本如下:

Action()

{

web_service_call( "StepName=GetQuizSetting_101",

                   "SOAPMethod=Train.TrainSoap.GetQuizSetting",

                   "ResponseParam=response",

                   "Service=Train",

                   "Snapshot=t1247551033.inf",

                   BEGIN_ARGUMENTS,

                   "UserCode=",

                   "TimeStamp=",

                   "GUID=",

                   "QuizID=",

                   END_ARGUMENTS,

                   BEGIN_RESULT,

                   END_RESULT,

                   LAST);

         web_service_call( "StepName=TrackUserQuizDetail_101",

                   "SOAPMethod=Train.TrainSoap.TrackUserQuizDetail",

                   "ResponseParam=response",

                   "Service=Train",

                   "Snapshot=t1247551058.inf",

                   BEGIN_ARGUMENTS,

                   "UserCode=",

                   "TimeStamp=",

                   "GUID=",

                   "TrainLogID=",

                   "QuizID=",

                   "QuizNo=",

                   "UserAnswer=",

                   "IsRight=",

                   "Score=",

                   "IsSubmit=",

                   "IsServerScroe=",

                   "ExamType=",

                   "IsAllAnswer=",

                   END_ARGUMENTS,

                   BEGIN_RESULT,

                   END_RESULT,

                   LAST);

         return 0;

}

第二步就是要填充函数中相关参数的数值。如何获得这个数值呢?有一种最简单的方法就是问开发。还有另一种方法,我们不求开发,自己来获得这些参数的数值。这就用到了winsock协议。

大家都知道,winsock协议是最底层的协议。我们采用winsock协议可以捕获客户端发送的所有数据。我用winsock协议录制了脚本,然后在data.ws中搜索关键字“TrackUserQuizDetail”找到关键字所在的buf

send buf345 4771

         "POST /services/TrainSoap HTTP/1.1"r"n"

         "Accept: */*"r"n"

         "Accept-Language: zh-CN"r"n"

         "Referer: http://172.16.120.224:8088/exam/Quiz_SXPT.swf"r"n"

         "x-flash-version: 10,0,22,87"r"n"

         "Content-Type: text/xml; charset=utf-8"r"n"

         "SOAPAction: ""http://tempuri.org/TrackUserQuizDetail"""r"n"

         "Content-Length: 4234"r"n"

         "UA-CPU: x86"r"n"

         "Accept-Encoding: gzip, deflate"r"n"

         "User-Agent: Mozilla/4.0 (compatible; MSIE 7.0; Windows NT 5.2; .NET CLR 1."

         "1.4322; CIBA)"r"n"

         "Host: 172.16.120.224:8088"r"n"

         "Connection: Keep-Alive"r"n"

         "Cache-Control: no-cache"r"n"

         "Cookie: JSESSIONID=27A48E3961C562E7C711B90D07E96E03"r"n"

         ""r"n"

         "<?xml version=""1.0"" encoding=""utf-8""?>"r<SOAP-ENV:Envelope xmlns:xsi="""

         "http://www.w3.org/2001/XMLSchema-instance"" xmlns:xsd=""http://www.w3.org/"

         "2001/XMLSchema"" xmlns:SOAP-ENV=""http://schemas.xmlsoap.org/soap/envelope"

         "/""><SOAP-ENV:Body><TrackUserQuizDetail xmlns=""http://tempuri.org/""><Use"

         "rCode>13031</UserCode><TimeStamp>1</TimeStamp><GUID>2009071401343413031.xm

         "l</GUID><TrainLogID>456</TrainLogID><QuizID>216</QuizID><QuizNo>0</QuizNo>"

         "<UserAnswer>&lt;?xml version=&quot;1.0&quot; ?&gt;&lt;Quiz id=&quot;{F0857"

         "219-7DF2-46A0-A7A4-A610D0F6C2C7}%13031%00000006:DEVT01000100000183:12.5;00"

         "000007:DEVT01000100000185:12.5;00000008:DEVT01000100000181:12.5;00000009:D"

         "EVT01000100000180:12.5;00000010:DEVT01000100000186:12.5;00000011:DEVT01000"

         "100000187:12.5;00000012:DEVT01000100000184:12.5;00000013:DEVT0100010000018"

         "2:12.5;&quot;&gt;&lt;table&gt;&lt;ItemId&gt;1&lt;/ItemId&gt;&lt;ItemType&g"

         "t;2&lt;/ItemType&gt;&lt;UserName&gt;undefined&lt;/UserName&gt;&lt;ItemDesc"

         "&gt;&lt;![CDATA[ 鏈夊摢浜涗笉鏄疦etOA缃戠粶鍔炲叕绯荤粺鐨勭壒鑹诧紵]]&gt;&"

         "lt;/ItemDesc&gt;&lt;ItemScore&gt;12.5&lt;/ItemScore&gt;&lt;StandardAnswer&"

         "gt;3&lt;/StandardAnswer&gt;&lt;UserAnswer&gt;3&lt;/UserAnswer&gt;&lt;RealS"

         "core&gt;12.5&lt;/RealScore&gt;&lt;/table&gt;&lt;table&gt;&lt;ItemId&gt;2&l"

         "t;/ItemId&gt;&lt;ItemType&gt;2&lt;/ItemType&gt;&lt;UserName&gt;undefined&l"

         "t;/UserName&gt;&lt;ItemDesc&gt;&lt;![CDATA[ 閽堝缃戠粶鍔炲叕绯荤粺鐨勫彂"

         "灞曡秼鍔匡紝浠ヤ笅鍝彞璇濇槸涓嶅鐨勶紵]]&gt;&lt;/ItemDesc&gt;&lt;ItemS"

         "core&gt;12.5&lt;/ItemScore&gt;&lt;StandardAnswer&gt;3&lt;/StandardAnswer&g"

         "t;&lt;UserAnswer&gt;3&lt;/UserAnswer&gt;&lt;RealScore&gt;12.5&lt;/RealScor"

         "e&gt;&lt;/table&gt;&lt;table&gt;&lt;ItemId&gt;3&lt;/ItemId&gt;&lt;ItemType"

         "&gt;2&lt;/ItemType&gt;&lt;UserName&gt;undefined&lt;/UserName&gt;&lt;ItemDe"

         "sc&gt;&lt;![CDATA[ 」鐩缓璁功鐢辫皝鏉ヨ繘琛岀紪鍐欙紵]]&gt;&lt;/It"

         "emDesc&gt;&lt;ItemScore&gt;12.5&lt;/ItemScore&gt;&lt;StandardAnswer&gt;3&l"

         "t;/StandardAnswer&gt;&lt;UserAnswer&gt;3&lt;/UserAnswer&gt;&lt;RealScore&g"

         "t;12.5&lt;/RealScore&gt;&lt;/table&gt;&lt;table&gt;&lt;ItemId&gt;4&lt;/Ite"

         "mId&gt;&lt;ItemType&gt;2&lt;/ItemType&gt;&lt;UserName&gt;undefined&lt;/Use"

         "rName&gt;&lt;ItemDesc&gt;&lt;![CDATA[ 」鐩缓璁功鐨勭洰鐨勬槸锛焆]&"

         "gt;&lt;/ItemDesc&gt;&lt;ItemScore&gt;12.5&lt;/ItemScore&gt;&lt;StandardAns"

         "wer&gt;2&lt;/StandardAnswer&gt;&lt;UserAnswer&gt;2&lt;/UserAnswer&gt;&lt;R"

         "ealScore&gt;12.5&lt;/RealScore&gt;&lt;/table&gt;&lt;table&gt;&lt;ItemId&gt"

         ";5&lt;/ItemId&gt;&lt;ItemType&gt;3&lt;/ItemType&gt;&lt;UserName&gt;undefin"

         "ed&lt;/UserName&gt;&lt;ItemDesc&gt;&lt;![CDATA[ NetOA鐨勬妧鏈"

         ""x80"

         "夊瀷锛焆]&gt;&lt;/ItemDesc&gt;&lt;ItemScore&gt;12.5&lt;/ItemScore&gt;&lt;S"

         "tandardAnswer&gt;1,2,4&lt;/StandardAnswer&gt;&lt;UserAnswer&gt;1,2,4&lt;/U"

         "serAnswer&gt;&lt;RealScore&gt;12.5&lt;/RealScore&gt;&lt;/table&gt;&lt;tabl"

         "e&gt;&lt;ItemId&gt;6&lt;/ItemId&gt;&lt;ItemType&gt;3&lt;/ItemType&gt;&lt;U"

         "serName&gt;undefined&lt;/UserName&gt;&lt;ItemDesc&gt;&lt;![CDATA[ 閽堝Ne"

         "tOA鐨勭郴缁熸灦鏋勶紝鍝簺鎻忚堪鏄鐨勶紵]]&gt;&lt;/ItemDesc&gt;&lt;It"

         "emScore&gt;12.5&lt;/ItemScore&gt;&lt;StandardAnswer&gt;1,2,3,4&lt;/Standar"

         "dAnswer&gt;&lt;UserAnswer&gt;1,2,3,4&lt;/UserAnswer&gt;&lt;RealScore&gt;12"

         ".5&lt;/RealScore&gt;&lt;/table&gt;&lt;table&gt;&lt;ItemId&gt;7&lt;/ItemId&"

         "gt;&lt;ItemType&gt;3&lt;/ItemType&gt;&lt;UserName&gt;undefined&lt;/UserNam"

         "e&gt;&lt;ItemDesc&gt;&lt;![CDATA[ 鏈夊摢浜涙槸NetOA缃戠粶鍔炲叕绯荤粺鐨勫姛"

         "鑳斤紵]]&gt;&lt;/ItemDesc&gt;&lt;ItemScore&gt;12.5&lt;/ItemScore&gt;&lt;St"

         "andardAnswer&gt;1,4&lt;/StandardAnswer&gt;&lt;UserAnswer&gt;1,4&lt;/UserAn"

         "swer&gt;&lt;RealScore&gt;12.5&lt;/RealScore&gt;&lt;/table&gt;&lt;table&gt;"

         "&lt;ItemId&gt;8&lt;/ItemId&gt;&lt;ItemType&gt;3&lt;/ItemType&gt;&lt;UserNa"

         "me&gt;undefined&lt;/UserName&gt;&lt;ItemDesc&gt;&lt;![CDATA[ NetOA缃戠粶鍔"

         "炲叕绯荤粺缁欏鎴峰甫鏉ョ殑浠峰"

         ""x80"

         "硷紵]]&gt;&lt;/ItemDesc&gt;&lt;ItemScore&gt;12.5&lt;/ItemScore&gt;&lt;Stan"

         "dardAnswer&gt;1,2,4&lt;/StandardAnswer&gt;&lt;UserAnswer&gt;1,2,4&lt;/User"

         "Answer&gt;&lt;RealScore&gt;12.5&lt;/RealScore&gt;&lt;/table&gt;&lt;/Quiz&g"

         "t;</UserAnswer><IsRight>0</IsRight><Score>0</Score><IsSubmit>true</IsSubmi"

         "t><IsServerScroe>false</IsServerScroe><ExamType>Exam</ExamType><IsAllAnswe"

         "r>true</IsAllAnswer></TrackUserQuizDetail></SOAP-ENV:Body></SOAP-ENV:Envel"

         "ope>"

 

在这里有我们要的参数。比如UserCode13031(红色部分)。依次类推,我们可以找到所有的参数的数值,然后填入脚本中即可。

经过这个项目,我发现webservice中用到的函数也可以不用请教开发。首先我用winsock协议来录制,在winsock的脚本中,可以发现调用了哪些webservice的函数,然后筛选出哪些函数是我们要用到的。不过保险起见,还是要多和开发交流交流,就象我虽然通过winsock获得了”useranswer”的内容,但还是向开发索要了这个数据,然后把开发给的数据和自己捕获的数据一比较,完全吻合。说明用这个方法是可行的。

转载于:https://www.cnblogs.com/shinta/archive/2009/07/14/1523425.html

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值