loadrunner的关联,运行提示不是参数
我想用loadrunner测一下我们项目组软件的性能,使用的是LoadRunner8.0版本,
录制一段脚本:客户端输入用户名和密码,点击确定,登陆服务器端。
其实登陆的时候,程序内部执行login函数,这个函数会返回服务器端给客户端动态分配的用户令牌:UserToken,客户端有了这个令牌,才能真正登陆上去。
这里我用到了关联来将用户令牌保存在一个参数中,做法如下(红色字体是录到的脚本):
web_service_call("StepName=Login",
"SOAPMethod=IGCM4WebServerservice.IGCM4WebServer.Login",
"WSDL=D:/Program Files/Mercury Interactive/Mercury LoadRunner/scripts/"
"IGCM4WebServer.wsdl",
"UseWSDLCopy=1",
"Snapshot=t13.inf",
RecordedBuffer13,
"ResponseParam=response",
BEGIN_ARGUMENTS,
"xml:ALoginInfo=<ALoginInfo><ProjectName>test</ProjectName>"
"<UserAccount>Super</UserAccount><Password>456</Password><IPAddr></"
"IPAddr><Port>100</Port><UserToken></UserToken><ComputerName>renf</"
"ComputerName></ALoginInfo>",
END_ARGUMENTS,
BEGIN_RESULT,
END_RESULT,
LAST);
web_reg_save_param("MyUserToken2","LB=<UserToken xsi:type='xsd:string'>","RB=</UserToken>",LAST);
这个是我自己加的函数,将UserToken保存在参数 {MyUserToken2}中,
然后我想将这个令牌输出,又加了一个函数:
lr_output_message("%s",lr_eval_string("{MyUserToken2}"));
运行脚本,系统提示:
Registering web_reg_save_param was successful
Warning: The string 'MyUserToken2' with parameter delimiters is not a parameter.
Action.c(37): {MyUserToken2},输出来的并不是参数的值,
请问改如何得到参数的值?
[ 本帖最后由 renf 于 2008-9-18 12:49 编辑 ] lr_output_message("%s",lr_eval_string("{MyUserToken2}"))放在了什么位置?必须在web_url执行后,从服务器返回数据以后,这个参数才有值
回复 2# 的帖子
我这个软件的架构是C/S架构的,用的是webservice的协议,我录到的脚本中没有找到web_url,我也不知道用这个web_reg_save_param函数是不是恰当。
我看了下脚本,录到的函数就只有web_add_header、web_add_auto_header、web_service_call这几个,是不是我少录了?录制的时候没有设置对? 那你就查看你打印的这个函数放置的位置是否正确,一定要在关联后服务器返回数据了,这个参数才有值
回复 4# 的帖子
好的,谢谢,我再看一下。 web_reg_save_param("MyUserToken2","LB=<UserToken xsi:type='xsd:string'>","RB=</UserToken>",LAST);应该放在web_service_call()前面
回复 6# 的帖子
放在前面试了一下,还是不对。不过仍然感谢!回复 4# 的帖子
改变了一种做法,不用web_reg_save_param函数了,直接用LR的功能,将值保存在参数中:web_service_call("StepName=Login",
"SOAPMethod=IGCM4WebServerservice.IGCM4WebServer.Login",
"WSDL=D:/Program Files/Mercury Interactive/Mercury LoadRunner/scripts/"
"IGCM4WebServer.wsdl",
"UseWSDLCopy=1",
"Snapshot=t13.inf",
RecordedBuffer13,
"ResponseParam=response",
BEGIN_ARGUMENTS,
"xml:ALoginInfo=<ALoginInfo><ProjectName>test</ProjectName>"
"<UserAccount>Super</UserAccount><Password>456</Password><IPAddr></"
"IPAddr><Port>100</Port><UserToken></UserToken><ComputerName>renf</"
"ComputerName></ALoginInfo>",
END_ARGUMENTS,
BEGIN_RESULT,
"ALoginResult/UserToken={MyUserToken1}", //——将令牌保存在参数{UserToken}中
END_RESULT,
LAST);
lr_output_message("用户令牌is:%s",lr_eval_string("{MyUserToken}"));
运行脚本,系统提示:
Notify: Saving Parameter "{MyUserToken} = e0ExMTBCRURCLTc2RUUtNDNFNC1BRjU5LUExMENGMEVFMjkyRX0="
Action.c(13): web_service_call "Login"was successful
Action.c(33): Warning: The string 'MyUserToken' with parameter delimiters is not a parameter.
Action.c(36): 用户令牌is:{MyUserToken},并不是上面的那一串字符串,不知为什么。我看网上的例子大多都是B/S的,不知道C/S的程序有什么区别。我用的是webservice协议,没用socket协议。
[ 本帖最后由 renf 于 2008-9-18 16:55 编辑 ] 我自己顶一下,哪位大侠帮忙看一下,多谢了!
回复 9# 的帖子
换了一句话:"ALoginResult/UserToken=MyUserToken1",
将花括号去掉了,
原来是自己粗心大意。
但是,那个运用web函数的问题还是没有解决。继续努力。 不好意思,麻烦再问一下:
下面是我录到的数据,
<SOAP-ENV:Envelope xmlns:SOAP-ENV="http://schemas.xmlsoap.org/soap/envelope/" xmlns:xsd="http://www.w3.org/2001/XMLSchema" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xmlns:SOAP-ENC="http://schemas.xmlsoap.org/soap/encoding/">
<SOAP-ENV:Body SOAP-ENV:encodingStyle="http://schemas.xmlsoap.org/soap/encoding/" xmlns:NS2="urn:GCM4WebServerIntf">
<NS1:LoginResponse xmlns:NS1="urn:GCM4WebServerIntf-IGCM4WebServer">
<return xsi:type="xsd:boolean">true</return>
<ALoginResult href="#1"/>
<AErrorMessage xsi:type="xsd:string"/>
</NS1:LoginResponse>
<NS2:TGCM4LoginResult id="1" xsi:type="NS2:TGCM4LoginResult">
<UserToken xsi:type="xsd:string">e0Q2N0VBRkFELUQxNjMtNDU2Qy05RTYyLUIwQUVFNDNBMTZBRH0=</UserToken>
</NS2:TGCM4LoginResult>
</SOAP-ENV:Body>
</SOAP-ENV:Envelope>
我主要想要紫色的那一段字符串,作为动态参数,
于是我用了函数:
web_reg_save_param("UserToken1",
"LB=<UserToken xsi:type=\"xsd:string\">",
"RB=</UserToken>",
"SaveLen=52",
"NotFound=ERROR",
"Search=All",
LAST);
并把这个函数放在了web_service_call()的前面,这样写对吗?为什么我一直得不到那个动态字符串?
[ 本帖最后由 renf 于 2008-9-19 11:01 编辑 ] 我建议你先把左右边界给去看,看看抓得到东西不,然后在缩小边界 1 你可以安装关于webservice 的2个插件里面可以设置你的要获取的服务器返回信息
2 你可以查看 服务器返回的log 看看你要信息的上下 正确内容 多谢大家的关注,我再试试!
页:
[1]