Loadrunner:性能测试浅析关联函数web_reg_save_param()

背景:关联是性能测试中必不可少的技术点,即为了模拟真实场景而设计的,同样关联的接口测试亦是如此;首先介绍loadrunner工具的几个相关函数:大抵函数的参数部分,除了Ordinal不写就是默认Ordinal=1(取出第一个匹配的参数),写了Ordinal=All即为保存响应满足左右边界的所有参数,那此时{param_1}就不是一个正确的参数引用,而就是{param_1}字符串,下面来以web_reg_save_param_ex函数为例介绍:

web_reg_save_param("param_1",                                    
                   "LB=class=\"",                                    
                   "RB=\"",                                    
                   "Ordinal=All",                                    
                   LAST);

// 正则表达式匹配动态参数
web_reg_save_param_regexp("ParamName=param_1",
                          "RegExp=class=\"(.*?)\"",               
                          "Ordinal=All",                                      
                          LAST);

web_reg_save_param_ex("ParamName=param_1",               
                      "LB/IC=class=\"",                                          
                      "RB/IC=\"",                                          
                      "Ordinal=All",                                          
                      LAST);

 //代码中使用的变量必先申明
int i = 0;
char param_index[64];
web_reg_save_param_ex( "ParamName=goods_id_list",
"LB=goods_id\":\"",
"RB=\",\"miniapp_name",
"NotFound=warning",         
"Ordinal=All",
SEARCH_FILTERS,
LAST);         

web_custom_request(){ //对关联参数相关的操作,需要放到包含该关联数据的请求函数之后         }

for(i=1;i<=atoi(lr_eval_string("{goods_id_count}"));i++){
sprintf(param_index, "goods_id_%d}", i);
lr_message("goods_id %d:%s",i,lr_eval_string(param_index));}

/* * atoi(lr_eval_string("{goods_id_count}")) 作用是获取匹配了多少个参数 sprintf(param_index, "{goods_id_%d}", i);是格式输出,并把格式中的值保存在变量param_index中,实际param_index 保存的值分别为:goods_id_1、goods_id_2 等等 */
//同上面for循环的效果         
int goods_count;
goods_count=atoi(lr_eval_string("{goods_id_count}"));         
i=1;         
char str[64];
while(i<=goods_count){ 
sprintf(str,"goods_id_%d}",i);
lr_save_string(lr_eval_string(str),"Value");
lr_message("goods_id_%d:%s",i,lr_eval_string(str));
i++;     
} 
//上面函数处理多个关联参数,尽数打印出来,但是要怎么随机取值呢,把上面字符串函数lr_eval_sting改成随机函数lr_paramarr_random("");示例(实际使用下面一个函数就可以了): 

lr_save_string(lr_paramarr_random("goods_id_list"), "goods_id_random");
lr_log_message("随机取值 %s",lr_eval_string("{goods_id_random}")); 
// lr_message("随机取值:%s",lr_eval_string("{goods_id_random}")); 
//对关联参数相关的操作,需要放到包含该关联数据的请求函数之后

2、上面的意图是通过关联函数,获取动态参数,再使用随机函数取值与下一个接口交互,用自带的机票订票系统来看效果:

Action()

{
	web_set_max_html_param_len("12040");

	web_reg_save_param("userSession",
		"LB=value=",
		"RB=>",
		"NotFound=ERROR",
		"Search=Body",
		"Ord=ALL",
		LAST);

  	web_url("WebTours",
		"URL=http://127.0.0.1:1080/WebTours/",
  		"Resource=0",
  		"RecContentType=text/html",
  		"Referer=",
  		"Snapshot=t1.inf",
  		"Mode=HTML",
  		LAST);
	  
  	web_reg_find("Fail=NotFound",
  		"Search=Body",
  		"SaveCount=Success",
  		"Text=Welcome",
  		LAST);
	
	web_custom_request( "Login.pl",
	    "URL=http://127.0.0.1:1080/WebTours/login.pl",
		"Method=POST",
		"Body=userSession={userSession}&username=jojo&password=bean&login.x=59&login.y=8&JSFormSubmit=off",
		"Mode=HTML",
		LAST);

	lr_output_message("-----------------------token为:%s",lr_eval_string("{userSession}"));


	return 0;
}

3、web_reg_save_param()函数的Ord设置ALL,按F4设置log输出为Paramter subitution:

4、关联函数找到的参数userSession,就不再是可引用的变量,而是一个{userSession} 字符串,所以会报错检点失效;那么上面正确的值应该是{userSession_1},为了展示随机函数的使用效果;我们把脚本修改一下,设置循环5次就可以看效果:

// 加入一下代码:
lr_save_string(lr_paramarr_random("userSession"),"userSession_random");
lr_log_message("每次随机取值 %s",lr_eval_string("{userSession_random}")); 

5、F4设置run logic循环五次,这样看结果不直观,使用while循环看效果;

6、同上,关联函数都可以使用Ordinal参数,获取更多的参数,如果业务需要取自不同的数据关联,这很有效。 

  • 2
    点赞
  • 8
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

职说测试

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值