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

2024-06-09 01:18

本文主要是介绍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参数,获取更多的参数,如果业务需要取自不同的数据关联,这很有效。 

这篇关于Loadrunner:性能测试浅析关联函数web_reg_save_param()的文章就介绍到这儿,希望我们推荐的文章对编程师们有所帮助!



http://www.chinasem.cn/article/1043850

相关文章

Python函数作用域与闭包举例深度解析

《Python函数作用域与闭包举例深度解析》Python函数的作用域规则和闭包是编程中的关键概念,它们决定了变量的访问和生命周期,:本文主要介绍Python函数作用域与闭包的相关资料,文中通过代码... 目录1. 基础作用域访问示例1:访问全局变量示例2:访问外层函数变量2. 闭包基础示例3:简单闭包示例4

Python中isinstance()函数原理解释及详细用法示例

《Python中isinstance()函数原理解释及详细用法示例》isinstance()是Python内置的一个非常有用的函数,用于检查一个对象是否属于指定的类型或类型元组中的某一个类型,它是Py... 目录python中isinstance()函数原理解释及详细用法指南一、isinstance()函数

python中的高阶函数示例详解

《python中的高阶函数示例详解》在Python中,高阶函数是指接受函数作为参数或返回函数作为结果的函数,下面:本文主要介绍python中高阶函数的相关资料,文中通过代码介绍的非常详细,需要的朋... 目录1.定义2.map函数3.filter函数4.reduce函数5.sorted函数6.自定义高阶函数

Python中的sort方法、sorted函数与lambda表达式及用法详解

《Python中的sort方法、sorted函数与lambda表达式及用法详解》文章对比了Python中list.sort()与sorted()函数的区别,指出sort()原地排序返回None,sor... 目录1. sort()方法1.1 sort()方法1.2 基本语法和参数A. reverse参数B.

Python函数的基本用法、返回值特性、全局变量修改及异常处理技巧

《Python函数的基本用法、返回值特性、全局变量修改及异常处理技巧》本文将通过实际代码示例,深入讲解Python函数的基本用法、返回值特性、全局变量修改以及异常处理技巧,感兴趣的朋友跟随小编一起看看... 目录一、python函数定义与调用1.1 基本函数定义1.2 函数调用二、函数返回值详解2.1 有返

Python Excel 通用筛选函数的实现

《PythonExcel通用筛选函数的实现》本文主要介绍了PythonExcel通用筛选函数的实现,文中通过示例代码介绍的非常详细,对大家的学习或者工作具有一定的参考学习价值,需要的朋友们下面随着... 目录案例目的示例数据假定数据来源是字典优化:通用CSV数据处理函数使用说明使用示例注意事项案例目的第一

Docker多阶段镜像构建与缓存利用性能优化实践指南

《Docker多阶段镜像构建与缓存利用性能优化实践指南》这篇文章将从原理层面深入解析Docker多阶段构建与缓存机制,结合实际项目示例,说明如何有效利用构建缓存,组织镜像层次,最大化提升构建速度并减少... 目录一、技术背景与应用场景二、核心原理深入分析三、关键 dockerfile 解读3.1 Docke

C++统计函数执行时间的最佳实践

《C++统计函数执行时间的最佳实践》在软件开发过程中,性能分析是优化程序的重要环节,了解函数的执行时间分布对于识别性能瓶颈至关重要,本文将分享一个C++函数执行时间统计工具,希望对大家有所帮助... 目录前言工具特性核心设计1. 数据结构设计2. 单例模式管理器3. RAII自动计时使用方法基本用法高级用法

Web服务器-Nginx-高并发问题

《Web服务器-Nginx-高并发问题》Nginx通过事件驱动、I/O多路复用和异步非阻塞技术高效处理高并发,结合动静分离和限流策略,提升性能与稳定性... 目录前言一、架构1. 原生多进程架构2. 事件驱动模型3. IO多路复用4. 异步非阻塞 I/O5. Nginx高并发配置实战二、动静分离1. 职责2

从原理到实战解析Java Stream 的并行流性能优化

《从原理到实战解析JavaStream的并行流性能优化》本文给大家介绍JavaStream的并行流性能优化:从原理到实战的全攻略,本文通过实例代码给大家介绍的非常详细,对大家的学习或工作具有一定的... 目录一、并行流的核心原理与适用场景二、性能优化的核心策略1. 合理设置并行度:打破默认阈值2. 避免装箱