loadrunner 脚本优化-关联函数web_reg_save_param()函数详解

简介: loadrunner 脚本优化-关联函数web_reg_save_param()函数详解

脚本优化-关联函数web_reg_save_param()函数详解

 


Insert->New Step,打开Add Step对话框

 



选择函数web_reg_save_param,点击OK,打开关联函数设置窗口


 

说明:

 

Parameter Name

此处设置存放参数的名称,关联出来的内容将会存放在该参数中,受到Instance选项的影响。

 

例如,设置Parameter Nametemp当对应的Instance选项是任意一个数字的时候,只会关联一个匹配的记录,关联值将会存放在temp这个参数中。当InstanceALL的时候,关联成功的值将会依次存放在“temp_数字这样的参数数组中,并且会添加一个temp_count的参数存放关联出来的记录条数。

 

Left Boundary

此处设置左边界,用来填写关联对于数据处理的左匹配内容规则。在左边界中存放的是一个字符串,例如填写的内容为左边界会被转换为以下形式

web_reg_save_param("Param""LB=左边界","RB=",Ord=1, LAST);

注:如果输入的内容里面有双引号,那么需要通过转义字符来进行处理,如

web_reg_save_param("Param","LB=\"左边界","RB=", Ord=1,LAST);

 

Match case

默认情况下,边界是Match case,也就是大小写匹配

 

Binary data

如果要关联的内容是非ASCII字符,那么需要使用该选项。

 

Use # for any digit

有时候需要关联的边界中有些变动的数字,并且由于这个数字导致关联非常难设置边界,可以用该选项

 

Use^as a wildcard for [all/lowercase/uppercase] alphanumerical characters

对比上面的功能,这里可以使用^符号来代替任何常用的字符,改功能有3个选项:AllLowerCaseUpperCase,即所有字母/大写字母/小写字母。

注意:一个^仅代表一个字符。

 

Right Boundary

此处设置右边界,这里是用来填写关联时对于数据处理的右匹配内容规则,选项同左边界

 

Instance

这个关键字在很多函数里面都有应用,这里可以填写任意一个整数,也可以填写ALL。如果填写数字,那么说明从返回的记录中取出对应顺序的值,而填写ALL的话将会返回所填写的所有内容。

 

当使用Ord=All时,关联函数会把所有匹配过滤策略的记录都抓出来,由于参数只能存放一条记录,所以关联函数会生成一个参数数组。被关联的记录会以{关联参数名_关联id}的形式生成参数列表,并且在最后会有一个{关联参数名_count}的参数来存放被关联到的记录条数。

 

Relative Frame

这个选项是专门针对框架结构的网站设计的,有些时候需要关联的内容是在某个框架中的,这个时候就需要说明所关联的页面是框架中的哪一个了。

 

Not Found

如果关联的对象不存在,又该如何进行处理呢?默认值是ERROR,提示错误。

这种错误99%都是由于关联的边界设置不合理导致没有关联到需要的内容。系统提示使用web_set_max_html_param_len()函数的目的是,提醒如果被关联内容超出了默认的1024字节会导致存放数据溢出,就会产生参数值为空,关联失败的情况(做附件下载的脚本就可能会遇到这个问题),但通常不会关联到如此巨大的内容。

web_set_max_html_param_len()函数可以自定义关联返回值存放的参数的最大长度。打开Inert->New Step->Add Step窗口,找到对应的web_set_max_html_param_len函数,添加

 

而如果选择WARNING,则只会简单提示没抓到内容,不会产生错误,仅产生告警信息。

 

Search in

设置关联查询的范围,这里VuGen提供了4个选项:HeaderBodyNoresourceALL。我们将这4个选项划分为两个大类。

 

Noresource

Noresource是从服务器返回的内容类别来考虑的,Noresource就是指不从资源文件中关联内容,也就是只从HTML文件格式抓内容。

 

Header/Body/All

3个选项都是从请求返回的所有内容进行关联处理,包括图片,JavaScript脚本等。区别在于对返回信息的分割方式。在前面介绍HTTP的时候介绍过HTTP返回的内容其实是由Header(HTTP信息头)Body(HTTP内容)组成的。

Header指所关联的内容是所有服务器返回请求的HTTP头部分请求内容。Body之前的内容都属于Header
Body
:就是服务器返回在Body以后的内容。

ALL:指服务器返回的所有内容

 

关于Search in这个选项,一般使用得比较多的是Noresource,因为需要关联的内容一般都放在HTML页面中,并且使用Noresource被关联到的内容又比较少(只返回一个HTML页面)比较适合常用处理,如果某些信息是放在HTTP头内,那么只能用Header了。

 

Save Length

关联出来的内容所需要保存的长度。

例如:

通过左右边界关联出来的内容是”sessionid=123456&action=work”,那么如何获得需要的sessionid信息呢?

可以使用Save Length来实现,注意这里必须确保被保关联内容的长度恒定。Save Length设置为16,关联出来的结果就变为“sessionid=123456”了,如果想得到后面的sessionid值,就要靠Save Offset选项了。

 

Save Offset

设置关联的内容偏移量,从第几位开始进行关联操作。如果需要获得123456这个字符,则需要设置Save Offset10,同时设置Save Length6即可。

 

通过Save LengthSave Offset的设置,我们就可以方便地抓取服务器返回内容的任意一个部分了。

 

也可以利用参数调整偏移量和长度,那么参数能做到么?当然可以,如果需要对一个参数值进行偏移和长度设置,需要使用lr_save_var()函数,如下

Action2()

{  

   lr_save_string("I come from shanghai","city");

 

   //city这个参数中取6位长度的内容保存到result参数中,结果I come

   lr_save_var(lr_eval_string("{city}"),6,0,"result");

 

   //city这个参数的第7位开始取4个长度的内容保存到result参数中。结果from

   lr_save_var(lr_eval_string("{city}")+7,4,0,"result");

   return 0;

}

注意:这个函数是以系统开销为代价的。

 

问题:

前面关联的左右边界都是静态的,如果左右边界是动态的,并且系统返回的id是不定长度的,那么如何使用关联函数将该id取出呢?要再用一个函数strtok()函数来进行字符内容切割。

 

char * strtok(char * string, const char * delimiters);

strtok()函数的作用是通过某个分割符delimiters来切分内容string

注意:首次调用时,string指向要分解的字符串,之后再次调用要把string设成NULL,当查找不到delimiters指定的字符时,返回NULL

 

例:

Action2()

{  

   char city[1000];

   char * token = NULL;

 

   strcpy(city,"this is shanghai!");  //this is shanghai保存到city

 

   token=(char *)strtok(city, " ");

   lr_output_message(token);  //输出:this

 

   while (token != NULL)

   {

        token = (char *) strtok(NULL," ");

        lr_output_message(token); //先后输出is,shanghai!

   }

 

   return 0;

}

如果关联出来的内容sessionid是变动长度的,如”sessionid=54321123&action=work”,则如何获得这个变动长度的sessionid呢?

Action2()

{  

   char temp[100];

   char * token = NULL;

   lr_save_string("sessionid=54321123&action=work", "param");

 

   strcpy(temp,lr_eval_string("{param}")); //取出参数值,并且赋值给变量temp

 

   token = (char *)strtok(temp,"&");  //使用&符号作为分隔符 

   lr_output_message(token);  //输出:sessionid=54321123

 

   return 0;

}

 

目录
相关文章
|
2月前
|
Web App开发 前端开发 JavaScript
探索Python科学计算的边界:利用Selenium进行Web应用性能测试与优化
【10月更文挑战第6天】随着互联网技术的发展,Web应用程序已经成为人们日常生活和工作中不可或缺的一部分。这些应用不仅需要提供丰富的功能,还必须具备良好的性能表现以保证用户体验。性能测试是确保Web应用能够快速响应用户请求并处理大量并发访问的关键步骤之一。本文将探讨如何使用Python结合Selenium来进行Web应用的性能测试,并通过实际代码示例展示如何识别瓶颈及优化应用。
146 5
|
1月前
【Azure App Service】PowerShell脚本批量添加IP地址到Web App允许访问IP列表中
Web App取消公网访问后,只允许特定IP能访问Web App。需要写一下段PowerShell脚本,批量添加IP到Web App的允许访问IP列表里!
|
2月前
|
机器学习/深度学习 缓存 监控
利用机器学习优化Web性能和用户体验
【10月更文挑战第16天】本文探讨了如何利用机器学习技术优化Web性能和用户体验。通过分析用户行为和性能数据,机器学习可以实现动态资源优化、预测性缓存、性能瓶颈检测和自适应用户体验。文章还介绍了实施步骤和实战技巧,帮助开发者更有效地提升Web应用的速度和用户满意度。
|
2月前
|
SQL 关系型数据库 数据库
优化Web开发流程:Python ORM的优势与实现细节
【10月更文挑战第4天】在Web开发中,数据库操作至关重要,但直接编写SQL语句既繁琐又易错。对象关系映射(ORM)技术应运而生,让开发者以面向对象的方式操作数据库,显著提升了开发效率和代码可维护性。本文探讨Python ORM的优势及其实现细节,并通过Django ORM的示例展示其应用。ORM提供高级抽象层,简化数据库操作,提高代码可读性,并支持多种数据库后端,防止SQL注入。Django内置强大的ORM系统,通过定义模型、生成数据库表、插入和查询数据等步骤,展示了如何利用ORM简化复杂的数据库操作。
70 6
|
2月前
|
缓存 前端开发 JavaScript
探索现代Web开发中的前端性能优化策略
【10月更文挑战第5天】探索现代Web开发中的前端性能优化策略
|
2月前
|
缓存 前端开发 JavaScript
构建高性能Web应用:优化前端性能的策略
构建高性能Web应用:优化前端性能的策略
|
3月前
|
数据库 开发者 Python
实战指南:用Python协程与异步函数优化高性能Web应用
在快速发展的Web开发领域,高性能与高效响应是衡量应用质量的重要标准。随着Python在Web开发中的广泛应用,如何利用Python的协程(Coroutine)与异步函数(Async Functions)特性来优化Web应用的性能,成为了许多开发者关注的焦点。本文将从实战角度出发,通过具体案例展示如何运用这些技术来提升Web应用的响应速度和吞吐量。
35 1
|
3月前
|
缓存 负载均衡 前端开发
优化Web应用性能的十种策略
在当今的数字化时代,Web应用的性能直接影响用户体验和业务成效。本文深入探讨了优化Web应用性能的十种策略,从前端的资源优化到后端的架构改进,涵盖了缓存机制、异步加载、数据库优化等关键技术手段。这些策略不仅能提升响应速度,还能显著减少服务器负担和带宽消耗,为开发者提供了一系列切实可行的解决方案。
|
3月前
|
网络协议 Windows
[收藏]优化基于Win 2000系统的Web服务器性能
[收藏]优化基于Win 2000系统的Web服务器性能
|
4月前
|
机器学习/深度学习 存储 前端开发
实战揭秘:如何借助TensorFlow.js的强大力量,轻松将高效能的机器学习模型无缝集成到Web浏览器中,从而打造智能化的前端应用并优化用户体验
【8月更文挑战第31天】将机器学习模型集成到Web应用中,可让用户在浏览器内体验智能化功能。TensorFlow.js作为在客户端浏览器中运行的库,提供了强大支持。本文通过问答形式详细介绍如何使用TensorFlow.js将机器学习模型带入Web浏览器,并通过具体示例代码展示最佳实践。首先,需在HTML文件中引入TensorFlow.js库;接着,可通过加载预训练模型如MobileNet实现图像分类;然后,编写代码处理图像识别并显示结果;此外,还介绍了如何训练自定义模型及优化模型性能的方法,包括模型量化、剪枝和压缩等。
70 1