Loadrunner中web_find和web_reg_find函数的使用与区别

本文涉及的产品
日志服务 SLS,月写入数据量 50GB 1个月
简介: 总结一下Loadrunner中的检查点函数,主要介绍两个函数:web_find()和web_reg_find();这两个函数均用于内容的查找,但两者也有本质的区别,具体介绍如下:一、web_find()函数该函数的作用是“从HTML页面中查找指定的文本字符串”常用参数及含义如下: 1 web_...

总结一下Loadrunner中的检查点函数,主要介绍两个函数:web_find()和web_reg_find();这两个函数均用于内容的查找,但两者也有本质的区别,具体介绍如下:
一、web_find()函数
该函数的作用是“从HTML页面中查找指定的文本字符串”常用参数及含义如下:

1 web_find("web_find", //定义该查找函数的名称
2   "RightOf=a", //定义查找字符的右边界
3   "LeftOf=b", //定义查找字符的左边界
4   "What=name", //定义查找内容
5   LAST);

 

使用该函数注意以下事项:
1、位置
  该函数在请求的页面内容完全显示出来以后,在页面中进行查找,所以只能写在打开页面的动作之后
2、录制模式
  该函数只能在基于HTML模式录制的脚本中进行查找
3、必须启用内容检查选项
  打开LoadRunner的Virtual User Generator组件,选择Vuser->runtime setting->Preferences里面,把Enable image and text check选中,启用检查点,否则将不执行该查找函数;

4、在VB和JAVA语法中不支持该函数
5、被查找的文本内容中间不要有空格,否则运行后有错误

  该函数有以下缺点:
1、 执行效率较低
2、 不返回查找结果情况,如想在执行该函数后根据查找结果做进一步操作时,没有返回值可以依据
  例如:
  在页面中查找“登录成功”的字符串,如果找到该字符串在日志中输出“登录成功”,如果找不到该字符串,则在日志中输出“登录失败”,此时使用该函数没有依据来做此判断,但使用web_reg_find()函数,使用它其中的SaveCount可以进行判断,具体方法我们下面介绍。

二、web_reg_find()函数
该函数的作用是“在缓存中查找相应的内容”,常用参数及含义如下:

1 web_reg_find("Search=Body", //定义查找范围
2   "SaveCount=ddd", //定义查找计数变量名称
3   "Text=aaaa", //定义查找内容
4   LAST);

 


使用该函数注意以下事项:
1、位置
该函数写在要查找内容的请求之前,通常情况下写在如下六个函数之前:

1 web_castom_request(); 
2 web_image(); 
3 web_link(); 
4 web_submit_data(); 
5 web_submit_form();
6 web_url()

 


2、使用技巧
  在该函数的参数中有个“SaveCount”,该参数可以记录在缓存中查找内容出现的次数,我们可以使用该值,来判断要查找的内容是否被找到,下面举个例子来说明:(引用LR的帮助中的例子)

 1 // Run the Web Tours sample
 2 web_url("MercuryWebTours",
 3     "URL=http://localhost/MercuryWebTours/",
 4     "Resource=0",
 5     "RecContentType=text/html",
 6     "Referer=",
 7     "Snapshot=t1.inf",
 8     "Mode=HTML",
 9     LAST);
10 // Set up check for successful login by looking for "Welcome"
11 web_reg_find("Text=Welcome",
12     "SaveCount=Welcome_Count",
13     LAST);
14 // Now log in
15 web_submit_form("login.pl",
16     "Snapshot=t2.inf",
17     ITEMDATA,
18     "Name=username", "Value=jojo", ENDITEM,
19     "Name=password", "Value=bean", ENDITEM,
20     "Name=login.x", "Value=35", ENDITEM,
21     "Name=login.y", "Value=14", ENDITEM,
22     LAST);
23 // Check result
24 if (atoi(lr_eval_string("{Welcome_Count}")) > 0){ //判断如果Welcome字符串出现次数大于0
25     lr_output_message("Log on successful."); }//在日志中输出Log on successful
26 else{ //如果出现次数小于等于
27     lr_error_message("Log on failed"); //在日志中输出Log on failed
28 return(0);

我觉得这个方法非常有用,我们可以举一反三,应用到我们实际的项目中
三、插入检查点函数的方法
1、手工写入,在需要插入函数的位置手工写入该函数
2、光标停留在要插入函数的位置,在INSERT菜单中,选择new step,在列表中选择或查找要插入的函数,根据提示填写必要的参数
3、在tree view模式下,在树状菜单中选中要插入函数的位置,右键,选择insert after或insert before,根据提示填写必要的参数
四、总结
1、这两个函数类型不同,web_find是普通函数,web_reg_find是注册函数;

2、这两种函数在运行机制不同,当客户端向服务器发出一个请求的时候,服务器进行响应;当响应的数据在缓存中的时候,注册函数可以在缓存中查找所要查找的内容;而普通函数(例如:web_find)需要等我们请求的显示页面完全显示出来后,从这个显示页面中进行查找制定的字符串内容
3、web_find使用时必须开启内容检查选项,而web_reg_find则没有此限制
4、web_find只能只用在基于HTML模式录制的脚本中,而web_reg_find没有此限制
5、web_find是在返回的页面中进行内容查找,web_reg_find是在缓存中进行查找
6、web_find在执行效率上不如web_reg_find

附录

web_find
 语法:
int web_find (const char *StepName, <Attributes and Specifications list>, char *searchstring, LAST );

参数:
1、StepName:步骤名称,在Tree视图中出现。

2、Attributes and Specifications list:

支持的属性有:

Frame:在多Frame的情况下,定义要查找Frame的范围。

Expect:定义在什么情况下函数检查成功:找到了指定的搜索标准或者没有找到。例如说,可以检查指定的错误信息是否出现在web页面中。合法的值有2个:found和notfound。默认值是“found”。

Matchcase:指定搜索是否区分大小写。

Repeat:指定当第一次发现要查找的字符串时,搜索是否继续。当一个web页面中包含多个被查找的字符串时,此参数是非常有用的。合法的值有2个:yes,no。默认值是“yes”。

Report:指定在什么情况下,VuGen在执行日志中显示此函数的检查结果。合法的值有:success,failure,always。默认值是“always”。

Onfailure:此参数决定在函数检查失败后,Vuser是否中断。参数值是abort。如果指定了Onfailure=abort,当函数检查失败时,不论在运行时设置中的error-handling是什么,脚本都会中断。

如果没有指定Onfailure=abort,那么运行时设置中error-handling将会起作用。

支持的特性有:RightOf, LeftOf (不支持7.x及更高版本)。

RightOf:要查找的字符串右边的内容。

LeftOf:要查找的字符串左边的内容。

3、Searchstring:需要查找的字符串,格式为“What=stringxyz”。此搜索不区分大小写。

4、LAST:属性列表结束符。

返回值
 整型。 成功时返回LR_PASS(0),失败时返回LR_FAIL (1)。

说明
 此函数的作用是在HTML页面中查找指定的字符串。

此函数只能在基于HTML录制的脚本中使用。当指定的HTML请求全部完成以后,开始执行搜索过程,比web_reg_find要慢。

web_find函数在C语言的脚本中已经被web_reg_find所替代,web_reg_find运行速度比较快,而且在HTML-based和URL-based的录制方式中都可以使用。在C语言脚本中,web_find是向后兼容的。Java和Visual Basic脚本中不再支持它。

运行在HTTP模式下的WAP用户和运行在WSP回放模式下的WAP用户都不支持此函数。

web_reg_find
 语法:
int web_reg_find (const char *attribute_list, LAST);

参数:
1、attribute_list:

通过Name=Value对来传递参数。例如“Text=string”。Text,TextPfx,TextSfx三个必须有一个出现。其他的属性是可选的。

a) Text:要搜索的字符串,字符串必须非空,以NULL结尾。可以使用text flags自定义搜索字符串。

b) TextPfx:要搜索的字符串的直接前缀。

c) TextSfx:要搜索的字符串的直接后缀。

d) Search:搜索的范围。可选的值是:Headers 、Body(在请求体中搜索)、Noresource (仅仅在HTML请求体中搜索,不包括头和资源)、ALL (在请求体、头和资源中搜索),默认值是“BODY”。

e) SaveCount:匹配的个数。

f) Fail:设置函数检查在什么状态下失败。

g) ID:日志文件中标识此函数的一个字符串。

h) RelFrameId:相关联的FrameId。注意:此参数在GUI级别的脚本中不受支持。

2、LAST:属性列表结束的标记符。

返回值
 整型。成功时返回LR_PASS(0),失败时返回LR_FAIL(1)。

说明
web_reg_find属于注册函数,注册一个在web页面中搜索文本字符串的请求,在接下来的Action(例如:web_url)类函数中执行搜索。

通过查找期望的字符是否存在来验证是否返回了期望的页面。例如,通过查找“Welcome”来检查主页是否完全打开了。也可以查找“Error”检查浏览器是否发生错误。还可以使用此函数注册一个请求来统计特定字符串出现的次数。

如果检查失败,在接下来的Action类的函数中会报告错误。此函数仅仅注册请求,并不执行。函数的返回值只表明注册是否成功,并不表示检查的结果。

此函数不仅能够查找text,还能查找到围绕着text的strings。不要同时指定text和前缀后缀。

Fail,处理选项,可以是“Found或“NotFound”。默认是“NotFound”。

“Fail=Found” 指示当对应的字符找到时,函数检查失败。例如,查找单词“Error”,如果找到了,说名web请求没有成功,你想把函数检查设置为失败。

“Fail=NotFound”指示当对应的字符找不到时,函数检查失败。如果查找的是web请求成功时出现的字符串时,需要使用NotFound。

SaveCount参数指示保存到参数中的匹配的字符串的个数。使用这个属性,需要指定“SaveCount=param”。检查操作被执行后,param 的值是null结尾的数字类型的值。

如果指定了SaveCount,且没有使用Fail参数,检查不会失败,无论需要查找的字符串是否找到。通过检查SaveCount的值确定字符串是否被找到。如果param是0,说明没有找到对应的字符串。

如果同时指定了SaveCount和Fail,指定的错误处理选项和SaveCount协同工作。 handling option specified works together with the SaveCount. Thus,如果指定了SaveCount且指定了“Fail=NotFound” ,但是字符串被找到,SaveCount被赋值为字符串出现的次数,检查成功。如果字符串找不到,SaveCount被赋值为0,检查失败(注意,参数的0值只在运行时设置中Continue on error 选中时才有意义)。

此函数在HTML-based和URL-based的脚本中都可以使用。此函数是在所请求内容到达之前注册搜索请求的,所以当所请求内容一到达后就会执行搜索,产生的脚本比较高效。

 


img_42a4adae4716d0e15c3eeaabfd040044.png

注:转载需注明出处及作者。

流柯      

相关实践学习
日志服务之使用Nginx模式采集日志
本文介绍如何通过日志服务控制台创建Nginx模式的Logtail配置快速采集Nginx日志并进行多维度分析。
目录
相关文章
|
2月前
|
小程序 前端开发 中间件
ThinkPHP 配置跨域请求,使用TP的内置跨域类配置,小程序和web网页跨域请求的区别及格式说明
本文介绍了如何在ThinkPHP框架中配置跨域请求,使用了TP内置的跨域类`\think\middleware\AllowCrossDomain::class`。文章还讨论了小程序和web网页在跨域请求格式上的区别,并提供了解决方案,包括修改跨域中间件源码以支持`Origin`和`token`。此外,还介绍了微信小程序跨域请求的示例和web网页前端发送Axios跨域请求的请求拦截器配置。
ThinkPHP 配置跨域请求,使用TP的内置跨域类配置,小程序和web网页跨域请求的区别及格式说明
|
1月前
|
网络协议 API 网络安全
Web实时通信的学习之旅:轮询、WebSocket、SSE的区别以及优缺点
Web实时通信的学习之旅:轮询、WebSocket、SSE的区别以及优缺点
144 0
|
1月前
|
存储 前端开发 API
前端开发中,Web Storage的存储数据的方法localstorage和sessionStorage的使用及区别
前端开发中,Web Storage的存储数据的方法localstorage和sessionStorage的使用及区别
92 0
|
2月前
|
数据库 开发者 Python
实战指南:用Python协程与异步函数优化高性能Web应用
在快速发展的Web开发领域,高性能与高效响应是衡量应用质量的重要标准。随着Python在Web开发中的广泛应用,如何利用Python的协程(Coroutine)与异步函数(Async Functions)特性来优化Web应用的性能,成为了许多开发者关注的焦点。本文将从实战角度出发,通过具体案例展示如何运用这些技术来提升Web应用的响应速度和吞吐量。
29 1
|
1月前
|
Java 应用服务中间件 Apache
浅谈Tomcat和其他WEB容器的区别
Tomcat是一款轻量级的免费开源Web应用服务器,常用于中小型系统及并发访问量适中的场景,尤其适合开发和调试JSP程序。它不仅能处理HTML页面,还充当Servlet和JSP容器。相比之下,物理服务器是指具备处理器、硬盘等硬件设施的服务器,如云服务器,其设计目标是在处理能力、稳定性和安全性等方面提供高标准服务。简言之,Tomcat专注于运行Java应用,而物理服务器则提供基础计算资源。
|
4月前
|
存储 自然语言处理 前端开发
Web1.0、Web2.0 和 Web3.0 的区别
【7月更文挑战第4天】Web1.0是只读的互联网,内容由网站所有者发布,用户被动接收;Web2.0强调用户生成内容和社交互动,如博客、社交媒体,用户能积极参与;而Web3.0则走向去中心化,基于区块链,强调语义网、数字资产、用户隐私和数据主权,赋予用户更多控制权。从单向传播到深度互动,再到去中心化和智能服务,互联网不断演进。
534 6
|
4月前
|
Java UED
Java Web 中forward 和 redirect 的区别
在Java Web开发中,页面跳转是构建用户界面和实现业务逻辑的重要组成部分。Forward(转发)和Redirect(重定向)是两种常见的跳转方式,它们分别具有不同的特点和适用场景。正确地选择和使用这两种跳转方式,有助于提高Web应用的性能、用户体验和代码可维护性。
70 0
|
JavaScript 前端开发 程序员
好程序员web前端分享用JavaScript实现的5个常见函数
<div id="container"></div> <script> var count = 1 var container = document.getElementById('container') function getUserAction(e) { // 空格 if (e.
819 0
|
1月前
|
XML JSON API
ServiceStack:不仅仅是一个高性能Web API和微服务框架,更是一站式解决方案——深入解析其多协议支持及简便开发流程,带您体验前所未有的.NET开发效率革命
【10月更文挑战第9天】ServiceStack 是一个高性能的 Web API 和微服务框架,支持 JSON、XML、CSV 等多种数据格式。它简化了 .NET 应用的开发流程,提供了直观的 RESTful 服务构建方式。ServiceStack 支持高并发请求和复杂业务逻辑,安装简单,通过 NuGet 包管理器即可快速集成。示例代码展示了如何创建一个返回当前日期的简单服务,包括定义请求和响应 DTO、实现服务逻辑、配置路由和宿主。ServiceStack 还支持 WebSocket、SignalR 等实时通信协议,具备自动验证、自动过滤器等丰富功能,适合快速搭建高性能、可扩展的服务端应用。
101 3
|
18天前
|
设计模式 前端开发 数据库
Python Web开发:Django框架下的全栈开发实战
【10月更文挑战第27天】本文介绍了Django框架在Python Web开发中的应用,涵盖了Django与Flask等框架的比较、项目结构、模型、视图、模板和URL配置等内容,并展示了实际代码示例,帮助读者快速掌握Django全栈开发的核心技术。
108 45