51Testing软件测试论坛

 找回密码
 (注-册)加入51Testing

QQ登录

只需一步,快速开始

微信登录,快人一步

手机号码,快捷登录

查看: 4288|回复: 13
打印 上一主题 下一主题

[原创] loadrunner的关联,运行提示不是参数

[复制链接]

该用户从未签到

跳转到指定楼层
1#
发表于 2008-9-18 11:47:27 | 只看该作者 回帖奖励 |倒序浏览 |阅读模式
我想用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 编辑 ]
分享到:  QQ好友和群QQ好友和群 QQ空间QQ空间 腾讯微博腾讯微博 腾讯朋友腾讯朋友
收藏收藏
回复

使用道具 举报

  • TA的每日心情

    2016-12-30 10:59
  • 签到天数: 6 天

    连续签到: 1 天

    [LV.2]测试排长

    2#
    发表于 2008-9-18 13:13:59 | 只看该作者
    lr_output_message("%s",lr_eval_string("{MyUserToken2}"))放在了什么位置?必须在web_url执行后,从服务器返回数据以后,这个参数才有值
    回复 支持 反对

    使用道具 举报

    该用户从未签到

    3#
     楼主| 发表于 2008-9-18 13:27:35 | 只看该作者

    回复 2# 的帖子

    我这个软件的架构是C/S架构的,用的是webservice的协议,
    我录到的脚本中没有找到web_url,我也不知道用这个web_reg_save_param函数是不是恰当。
    我看了下脚本,录到的函数就只有web_add_header、web_add_auto_header、web_service_call这几个,是不是我少录了?录制的时候没有设置对?
    回复 支持 反对

    使用道具 举报

  • TA的每日心情

    2016-12-30 10:59
  • 签到天数: 6 天

    连续签到: 1 天

    [LV.2]测试排长

    4#
    发表于 2008-9-18 13:42:28 | 只看该作者
    那你就查看你打印的这个函数放置的位置是否正确,一定要在关联后服务器返回数据了,这个参数才有值
    回复 支持 反对

    使用道具 举报

    该用户从未签到

    5#
     楼主| 发表于 2008-9-18 13:59:25 | 只看该作者

    回复 4# 的帖子

    好的,谢谢,我再看一下。
    回复 支持 反对

    使用道具 举报

    该用户从未签到

    6#
    发表于 2008-9-18 16:34:42 | 只看该作者
    web_reg_save_param("MyUserToken2","LB=<UserToken xsi:type='xsd:string'>","RB=</UserToken>",LAST);
    应该放在web_service_call()前面
    回复 支持 反对

    使用道具 举报

    该用户从未签到

    7#
     楼主| 发表于 2008-9-18 16:42:57 | 只看该作者

    回复 6# 的帖子

    放在前面试了一下,还是不对。不过仍然感谢!
    回复 支持 反对

    使用道具 举报

    该用户从未签到

    8#
     楼主| 发表于 2008-9-18 16:54:29 | 只看该作者

    回复 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#
     楼主| 发表于 2008-9-18 17:59:21 | 只看该作者
    我自己顶一下,哪位大侠帮忙看一下,多谢了!
    回复 支持 反对

    使用道具 举报

    该用户从未签到

    10#
     楼主| 发表于 2008-9-18 19:56:52 | 只看该作者

    回复 9# 的帖子

    换了一句话:
    "ALoginResult/UserToken=MyUserToken1",   
    将花括号去掉了,
    原来是自己粗心大意。

    但是,那个运用web函数的问题还是没有解决。继续努力。
    回复 支持 反对

    使用道具 举报

    该用户从未签到

    11#
     楼主| 发表于 2008-9-19 10:58:00 | 只看该作者
    不好意思,麻烦再问一下:
    下面是我录到的数据,

    <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 编辑 ]
    回复 支持 反对

    使用道具 举报

    该用户从未签到

    12#
    发表于 2008-9-19 16:30:17 | 只看该作者
    我建议你先把左右边界给去看,看看抓得到东西不,然后在缩小边界
    回复 支持 反对

    使用道具 举报

    该用户从未签到

    13#
    发表于 2008-9-19 18:03:10 | 只看该作者
    1 你可以安装关于webservice 的2个插件里面可以设置你的要获取的服务器返回信息
    2 你可以查看 服务器返回的log 看看你要信息的上下 正确内容
    回复 支持 反对

    使用道具 举报

    该用户从未签到

    14#
     楼主| 发表于 2008-9-22 13:53:19 | 只看该作者
    多谢大家的关注,我再试试!
    回复 支持 反对

    使用道具 举报

    本版积分规则

    关闭

    站长推荐上一条 /2 下一条

    小黑屋|手机版|Archiver|51Testing软件测试网 ( 沪ICP备05003035号 关于我们

    GMT+8, 2024-6-26 22:52 , Processed in 0.088305 second(s), 28 queries .

    Powered by Discuz! X3.2

    © 2001-2024 Comsenz Inc.

    快速回复 返回顶部 返回列表