3.13.3 Web Services脚本
完成Web Services服务端和客户端两个小程序的编写、编译、执行后,您需要确保服务端程序是开启的,关闭已运行的客户端小程序。
接下来,您启动LoadRunner 11.0,选择“Web Services”协议,如图13-122所示。
图13-121 “样例演示-客户端”对话框 图13-122 “New Virtual User”对话框
单击【Create】按钮,创建“Web Services”协议,在LoadRunner 脚本编辑环境单击录制红色按钮,在弹出的“Recording Wizard”对话框中单击【Import】按钮,在弹出的“Import Service”对话框中选择“URL”选项,在文本框中输入“http://localhost:5678/wsdl/IMyHello”,单击【Import】按钮,如图13-123所示。
图13-123 “Recording Wizard-Add Services页”对话框
稍等片刻,将出现图13-124所示界面信息,单击【下一步(N)>】按钮。
图13-124 “Recording Wizard”对话框
在图13-125所示对话框中输入客户端路径相关信息“C:\mytest\client\Client.exe”,工作目录为“C:\mytest\client”,(如果您的应用是基于B/S的,则选择“Record default web browser”选项并输入相应URL)单击【完成】按钮。
此时将会在输入框下方出现“欢迎于涌同学!”字符串,如图13-126所示。
图13-125 “Recording Wizard-Specify Application页”对话框 图13-126 “样例演示-客户端”对话框
此时将会产生如下代码:
Action() { web_add_header("Content-Type", "text/xml"); web_add_header("SOAPAction", "\"urn:MyHelloIntf-IMyHello#Welcome\""); web_add_header("User-Agent", "Borland SOAP 1.2"); soap_request("StepName=Welcome", "URL=http://localhost:5678/soap/IMyHello", "SOAPEnvelope=<?xml version=\"1.0\" encoding=\"GBK\" standalone=\"no\"?" "><SOAP-ENV:Envelope xmlns:SOAP-ENC=\"http://schemas.xmlsoap.org/soap/" "encoding/\" 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 SOAP-ENV" ":encodingStyle=\"http://schemas.xmlsoap.org/soap/encoding/\"><NS1" ":Welcome xmlns:NS1=\"urn:MyHelloIntf-IMyHello\"><name xsi:type=\"xsd" ":string\">于涌</name></NS1:Welcome></SOAP-ENV:Body></SOAP-ENV:Envelope>", "Snapshot=t1.inf", "ResponseParam=response", LAST); return 0; } |
我们最关心的内容应该是Web Services服务接口返回的内容,所以需要对脚本进行完善,脚本信息如下,黑色字体为新添加内容。
Action() { web_add_header("Content-Type", "text/xml"); web_add_header("SOAPAction", "\"urn:MyHelloIntf-IMyHello#Welcome\""); web_add_header("User-Agent", "Borland SOAP 1.2"); soap_request("StepName=Welcome", "URL=http://localhost:5678/soap/IMyHello", "SOAPEnvelope=<?xml version=\"1.0\" encoding=\"GBK\" standalone=\"no\"?" "><SOAP-ENV:Envelope xmlns:SOAP-ENC=\"http://schemas.xmlsoap.org/soap/" "encoding/\" 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 SOAP-ENV" ":encodingStyle=\"http://schemas.xmlsoap.org/soap/encoding/\"><NS1" ":Welcome xmlns:NS1=\"urn:MyHelloIntf-IMyHello\"><name xsi:type=\"xsd" ":string\">于涌</name></NS1:Welcome></SOAP-ENV:Body></SOAP-ENV:Envelope>", "Snapshot=t1.inf", "ResponseParam=response", LAST); lr_save_string(lr_eval_string("{response}"), "XML_Input_Param"); lr_xml_get_values("XML={XML_Input_Param}", "ValueParam=OutputParam", "Query=/*/*/*/return", LAST ); lr_output_message(lr_eval_string("返回结果 = {OutputParam}")); return 0; }
|
脚本的执行信息如下:
Virtual User Script started at : 2012-11-11 14:56:30 Starting action vuser_init. Ending action vuser_init. Running Vuser... Starting iteration 1. Starting action Action. Action.c(4): Warning -26593: The header being added may cause unpredictable results when applied to all ensuing URLs. It is added anyway [MsgId: MWAR-26593] Action.c(4): web_add_header("Content-Type") highest severity level was "warning" [MsgId: MMSG-26391] Action.c(6): web_add_header("SOAPAction") was successful [MsgId: MMSG-26392] Action.c(8): web_add_header("User-Agent") was successful [MsgId: MMSG-26392] Action.c(10): SOAP request "Welcome" started Action.c(10): SOAP request "Welcome" was successful Action.c(26): "lr_xml_get_values" succeeded, 1 match processed Action.c(31): 返回结果 = 欢迎于涌同学! Ending action Action. Ending iteration 1. Ending Vuser... Starting action vuser_end. Ending action vuser_end. Vuser Terminated. |
也许有的读者会说:“我想先看看服务端返回的信息,这可不可以呢?”。“当然没问题”,您只需要在脚本中加入“lr_output_message("%s",lr_eval_string("{response}")); ”(lr_xml_get_values()函数在前面已经介绍过,其在进行该协议类型脚本关联时非常重要,请读者朋友务必掌握),执行脚本时就会打印出响应的相关数据信息,如图13-127所示。
图13-127 WebServices相关脚本及执行结果
为了让大家对返回的内容看得更加清楚,这里我将其拷贝出来,放置到my.xml文件中,其内容如图13-128所示。
图13-128 服务返回的XML相关信息
从图13-128您会看到有一串乱码,凭直觉这应该是“欢迎于涌同学!”,那么直觉对不对呢?您可以在脚本中加入以下两行代码,如图13-129所示。
图13-129 转码及输出函数
其输出结果果真为“欢迎于涌同学!”。图13-129 中使用“lr_convert_string_encoding()”的函数就是将UTF8编码转码为系统语言编码的函数,经过转码后信息显示正确了。也许有的读者会问:“系统返回的xml响应信息有些显得十分混乱,有没有什么方法直接能看出其层次关系呢?”您可以借助树视图,单击“Tree”按钮,将出现图13-130所示界面信息,是不是一目了然了呢!这也方便了您应用lr_xml_get_values()函数时填写“Query”部分内容。
图13-130 WebServices响应结果树视图
【重要提示】
(1)从上面Web Services程序编写和脚本应用中,相信大家对该协议的应用已经有了非常清晰的认识,我们给大家演示的是基于C/S的小程序,在实际工作中您测试的应用可能是基于B/S的,它们在实际应用上并没有大的区别,所以请读者朋友们举一反三。
(2)也许您也会像我一样,在机器上安装有杀毒软件,如果您应用本书此客户端和服务器端小程序时,有可能您的杀毒软件会对其产生干扰,如:将小程序自动删除、运行小程序没反应等情况,此时应暂时关闭杀毒软件,确保小应用可以正常运行。
(未完待续)
版权声明:51Testing软件测试网及相关内容提供者拥有51testing.com内容的全部版权,未经明确的书面许可,任何人或单位不得对本网站内容复制、转载或进行镜像。51testing软件测试网欢迎与业内同行进行有益的合作和交流,如果有任何有关内容方面的合作事宜,请联系我们。
相关链接:
精通软件性能测试与LoadRunner最佳实战 连载十三