学习LR中的手动关联

本文介绍了在使用LoadRunner进行Web测试时遇到的关联问题,包括设置关联条件不当导致的ID号获取失败、特殊字符处理、如何提取关联后的数组值、打印和验证关联值的方法,以及解决直接使用lr_paramarr_random()返回值关联出错的问题。通过脚本修改和理解函数用法,最终成功关联并执行脚本。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

 描述:模拟任意点击论坛某一模块内的帖子进去查看详细内容。

        通过手动关联获取服务器返回的多个帖子的ID号,然后随机取一个ID号,点击进入。

 问题1:

设置关联的相关条件(左右边界、查询范围等),执行脚本却总是得不到任何一个ID号(查看源代码,明明有很多的)

 原因:

       试了好久,终于发现,是关联函数放的位置不对,一开始我是放置在点击详细帖子的上面,后来发现不对。

    系统获取的ID号,应该是在点击进入某个主题的“列表”模块就返回的。

    所以,把关联函数往上移一层即可。

 出错的代码:

    web_url("默认版块",

    "URL=http://127.0.0.1/discuz/Discuz_X2_SC_UTF8/upload/forum.php?mod=forumdisplay&fid=2",

        "TargetFrame=",

        "Resource=0",

 ………………………..

    web_reg_save_param("titleid",

        "LB=<a href=\"forum.php?mod=viewthread&amp;tid=",

        "RB=&amp;extra=page%3D1\" title=",

        "Ord=All",

        "Search=NoResource",

        LAST); 

    web_url("99999",

    "URL=http://127.0.0.1/discuz/Discuz_X2_SC_UTF8/upload/forum.php?mod=viewthread&tid={strid}&extra=page%3D1",

        "TargetFrame=",

        "Resource=0",

        "RecContentType=text/html",

…………… 

修改后正确的代码:

    web_reg_save_param("titleid",

        "LB=<a href=\"forum.php?mod=viewthread&amp;tid=",

        "RB=&amp;extra=page%3D1\" title=",

        "Ord=All",

        "Search=NoResource",

        LAST); 

    web_url("默认版块",

    "URL=http://127.0.0.1/discuz/Discuz_X2_SC_UTF8/upload/forum.php?mod=forumdisplay&fid=2",

        "TargetFrame=",

        "Resource=0",

………………………..

    web_url("99999",

    "URL=http://127.0.0.1/discuz/Discuz_X2_SC_UTF8/upload/forum.php?mod=viewthread&tid={strid}&extra=page%3D1",

        "TargetFrame=",

        "Resource=0",

        "RecContentType=text/html",

……………

问题2:设置web_reg_save_param()函数的左右边界时的特殊字符处理。

需注意双引号”前面要加上转义字符“\”,

同理:反斜杠\

注:这里暂时也只知道这两个。应该还有吧,按C语言的处理规则?

返回的ID号有多个值,那么值是如何存放的?及如何调用这些值呢?

说明:因为web_reg_save_param()函数中,我设置的instance=All(显示在函数中为:"Ord=All"),所以系统返回所有符合要求的值,按源代码中的先后顺序依次存储在:

Paramname_1、Paramname_2、Paramname_3……中,

最后面还会加上一个Paramname_count,统计所有paramname数组中值的个数。

刚开始的时候,我是直接用{paramname}替换录制的ID号的值的,可想而知,结果总是错的。

接下来,我想查看下回放的时候,我们发送给服务器的值是什么?但是我不知道到哪去查看,问题变为:

问题3:到哪里可以查看到系统发送给服务器的参数值?

在tree视图下,右侧可以看到三个选项,分别是:

Page view:查看截图。录制或回放时此步骤的截图。

Client request:客户端请求。我们页面访问等操作的时候,发送给服务器的请求信息都记录在这里。

所以:发送的ID号肯定也在这里。(至于这个ID号是如何来的,肯定是在前面的请求中服务器返回回来的)

Server responese:服务器响应。我们发送请求后,服务器的响应信息都记录在这个里面。可以仔细分析下。

这里:推荐个很好的网页查看工具:

IE下:HTTPWATCH,

参考资料:http://www.cnblogs.com/mayingbao/archive/2007/11/30/978530.html

基本上把这个页面的内容看完,就差不多了。

FIEFOX下:BUGFREE

至于bugfree,其实跟httpwatch原理都差不多,只不过这个是IE下适用的。看了httpwatch,这个也就简单了。

查看Client request,发现发送的ID号直接变为{paramname},这样肯定是错的了,本来我想:会不会像C语言一样,自动取paramname[0]的值,但显示我还是错的。

所以,接下来的问题是:

问题4:如何提取关联后返回的数组中的值?

在一本书上找的资料,用lr_paramarr_random()函数即可,书上的例子及描述如下:

Char * siteval;

Siteval=lr_paramarr_random(link)

即直接从参数数组link中取一个随机的值。

将上面的例子改了改,总是不成功。一直提示出错,错误如下:

Action.c (58): illegal statement termination

Action.c (58): skipping `char'

Action.c (58): undeclared identifier `getid'

Action.c (58): type error: pointer expected

Action.c (59): operands of = have illegal types `int' and `pointer to char'

f:\\lr_9.5\\exercise\\\\combined_exercise.c (5): 5 errors, not writing pre_cci.ci

 

这里注意,定义变量的语句一定要放在action的开头。

这个刚开始没注意,我直接把定义变量和获取变量值一起放在脚本中间了。

错误脚本

char * getid;

getid=lr_paramarr_random("titleid");

修改为:

将“char * getid”移到脚本的最前面就好了。

这个是规范性的问题。(这个主要还是由于QTP的影响。在QTP里调试脚本的时候,总是在一起定义使用的,从来不出错,呵)

修改后,脚本是可以跑了,但回放脚本的时候,还是不行,找不到我指定的ID号。

这时考虑,先把获取的值打印出来,再考虑后面的步骤,问题变为:

问题5:如何打印值出来?

这个简单,直接用:

lr_output_message("Value=%s",getid);

%s:这个跟C语言一样,输出字符串getid的值。

回放脚本,有结果,但是结果显示为:

Value=(null)

是个空值。

这个时候接着往下思考,问题变为:

问题6:web_reg_save_param()函数明明是有多个返回值的,怎么打印出来是空值呢?

1、  考虑是不是lr_paramarr_random()函数的问题。反复看了几遍,没有问题。

2、  接着看回放日志,突然发现:value=(null)是在脚本的62行执行的,而web_reg_save_param()函数返回值却是在68行。

那么问题就找到了,我又犯低级错误了,函数的位置放的不对。(第二次了)

查看脚本,我直接把getid=lr_paramarr_random("titleid");放到关联函数的后面了。列表页面还没打开呢,又怎么回有返回值呢,呵。把lr_paramarr_random()函数下移,问题解决了。

错误脚本:

web_reg_save_param("titleid",

        "LB=<a href=\"forum.php?mod=viewthread&amp;tid=",

        "RB=&amp;extra=page%3D1\" title=",

        "Ord=All",

        "Search=NoResource",

        LAST); 

getid=lr_paramarr_random("titleid");

lr_output_message("Value=%s",getid);

    web_url("默认版块",

    "URL=http://127.0.0.1/discuz/Discuz_X2_SC_UTF8/upload/forum.php?mod=forumdisplay&fid=2",

        "TargetFrame=",

        "Resource=0",

    ………………………..

修改后正确脚本:

web_reg_save_param("titleid",

        "LB=<a href=\"forum.php?mod=viewthread&amp;tid=",

        "RB=&amp;extra=page%3D1\" title=",

        "Ord=All",

        "Search=NoResource",

        LAST); 

    web_url("默认版块",

    "URL=http://127.0.0.1/discuz/Discuz_X2_SC_UTF8/upload/forum.php?mod=forumdisplay&fid=2",

        "TargetFrame=",

        "Resource=0",

    ………………………..

getid=lr_paramarr_random("titleid");

lr_output_message("Value=%s",getid);

接下来,将{getid}替换原来的ID号,但是出错。问题变为:

问题7:为什么直接用lr_paramarr_random()函数返回的值关联出错?

错误如下:

Action.c (4): redeclaration of `getid' previously declared at Action.c (3)

Action.c (59): operands of = have illegal types `char' and `pointer to char'

f:\\lr_9.5\\exercise\\\\combined_exercise.c (5): 2 errors, not writing pre_cci.ci

这个问题是真的不知道了,书上没有其他步骤的,我也不知道如何是好?然后开始在网上找资料,参考如下地址:

http://blog.sina.com.cn/s/blog_6090a6ba01010wmp.html

照这个上面的说明操作,成功了。具体为增加了如下语句:

  lr_save_string(getid,"strid") 

然后再用{strid}替换掉{getid},回放脚本,成功了。

刚刚之前,还一直不明白是为什么,不过现在好像有点懂了,这个应该是“参数”和“变量”的区别了:

lr_paramarr_random()返回的是变量,而不是参数。而关联只能关联参数。

Lr_save_string()是将变量存储至参数中。

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值