51Testing软件测试论坛

标题: loadrunner的关联,运行提示不是参数 [打印本页]

作者: renf    时间: 2008-9-18 11:47
标题: 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 编辑 ]
作者: iori    时间: 2008-9-18 13:13
lr_output_message("%s",lr_eval_string("{MyUserToken2}"))放在了什么位置?必须在web_url执行后,从服务器返回数据以后,这个参数才有值
作者: renf    时间: 2008-9-18 13:27
标题: 回复 2# 的帖子
我这个软件的架构是C/S架构的,用的是webservice的协议,
我录到的脚本中没有找到web_url,我也不知道用这个web_reg_save_param函数是不是恰当。
我看了下脚本,录到的函数就只有web_add_header、web_add_auto_header、web_service_call这几个,是不是我少录了?录制的时候没有设置对?
作者: iori    时间: 2008-9-18 13:42
那你就查看你打印的这个函数放置的位置是否正确,一定要在关联后服务器返回数据了,这个参数才有值
作者: renf    时间: 2008-9-18 13:59
标题: 回复 4# 的帖子
好的,谢谢,我再看一下。
作者: lionel319    时间: 2008-9-18 16:34
web_reg_save_param("MyUserToken2","LB=<UserToken xsi:type='xsd:string'>","RB=</UserToken>",LAST);
应该放在web_service_call()前面
作者: renf    时间: 2008-9-18 16:42
标题: 回复 6# 的帖子
放在前面试了一下,还是不对。不过仍然感谢!
作者: renf    时间: 2008-9-18 16:54
标题: 回复 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 编辑 ]
作者: renf    时间: 2008-9-18 17:59
我自己顶一下,哪位大侠帮忙看一下,多谢了!
作者: renf    时间: 2008-9-18 19:56
标题: 回复 9# 的帖子
换了一句话:
"ALoginResult/UserToken=MyUserToken1",   
将花括号去掉了,
原来是自己粗心大意。

但是,那个运用web函数的问题还是没有解决。继续努力。
作者: renf    时间: 2008-9-19 10:58
不好意思,麻烦再问一下:
下面是我录到的数据,

<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"/>
    </NS1oginResponse>
    <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 编辑 ]
作者: 云层    时间: 2008-9-19 16:30
我建议你先把左右边界给去看,看看抓得到东西不,然后在缩小边界
作者: hongtang    时间: 2008-9-19 18:03
1 你可以安装关于webservice 的2个插件里面可以设置你的要获取的服务器返回信息
2 你可以查看 服务器返回的log 看看你要信息的上下 正确内容
作者: renf    时间: 2008-9-22 13:53
多谢大家的关注,我再试试!




欢迎光临 51Testing软件测试论坛 (http://bbs.51testing.com/) Powered by Discuz! X3.2