Loadrunner检查点小结
http://s.dianping.com/topic/3465076
Web_find和Web_image_check两个函数如果在脚本里面增加,需要在设置中打开“图像和文本检查”功能, 该功能默认是不打开的,如果手工在脚本里面添加检查点,系统会有提示:
Action.c(43): Verification checks not enabled. web_find is skipped. See the 'Run-time settings/Preferences/Checks'
[MsgId: MMSG-27197]
下面对这三个检查点简单做一下小结:
1、Web_find
Web_find只能在 html的录制模式下查找 html页面文字,查找速度慢,并且要在 html请求结束后才会去查找(即这个函数需要写在 html请求脚本后面),下面是在手册上对这个函数的限制描述:
This function is limited to HTML-based recorded scripts (see Recording Options > Recording tab). It searches the context only after the HTML request is complete, resulting in slower execution time than web_reg_find.
The web_find function has been superseded in C Language scripts by web_reg_find, which runs faster and can be used in both HTML-based and URL-based recording. web_find is supported in C for backward compatibility. In Java and Visual Basic, it has not been superseded.
The web_find function is not supported for WAP scripts running in HTTP or Wireless Session Protocol (WSP) replay mode.
例如Loadrunner自带的订票程序在登陆后有这么一段文字描述:
Welcome, jojo, to the Mercury Tours reservation pages.
Using the menu to the left, you can search for new flights to book, or review/edit the flights already booked. Don't forget to sign off when you're done!
我们可以在对应页面的url脚本后面做如下的检查点:
运行脚本结果如下:
Action.c(43): "web_find" successful. 1 occurrence(s) of "Don't forget to sign off when you're done!" found (RightOf="", LeftOf="")[MsgId: MMSG-27196]
运行脚本结果如下:
Action.c(46): "web_find" successful. 1 occurrence(s) of "i" found (RightOf="Don't forget to s", LeftOf="gn off when you're done!")[MsgId: MMSG-27196]
这块有一点需要注意,RightOf和LeftOf并不是指右边和左边边界,而是指要查找的“i”在RightOf的右边,在LeftOf的左边。
2、Web_reg_find
Web_reg_find 是注册类型函数,它本身并不执行,不能通过它的返回值来作为事务的判断条件(因为 web_reg_find() 的返回值 0 和 1 表示 web_reg_find() 是否注册成功,并不代表查找的内容是否存在,也就是说无论查找的文本内容是否存在,都返回 0 。它是从返回的缓冲区扫描而不是在接收的页面中查找。这是比 web_find 更高效的一个函数。 web_reg_save_param 也是注册类函数,需要放到请求的页面之前,而且查找的内容是服务器返回的缓冲数据中查找,所以查找内容应该看 html 源代码的内容。
下面同样做两个例子:
例1:
运行脚本结果如下:
Action.c(34): Registered web_reg_find successful for "Text=sign" (count=3)[MsgId: MMSG-26364]
例2:
利用 web_reg_find创建的参数 SaveCount ,作为判断条件
Action() { int HttpStatusCode; //这个放最上面 //没有https,不用注释的函数 //web_set_sockets_option("SSL_VERSION","TLS"); //web_set_sockets_option("CLOSE_KEEPALIVE_CONNECTIONS", "1"); HttpStatusCode = web_get_int_property(HTTP_INFO_RETURN_CODE); lr_start_transaction("事务名称"); web_reg_find( "Fail=NotFound", "Search=All", "SaveCount=para_count", "Text=sign", LAST); web_url("Home Button", "URL=http://127.0.0.1:1080/mercuryWebTours/welcome.pl?page=menus", "TargetFrame=body", "Resource=0", "RecContentType=text/html", "Referer=http://127.0.0.1:1080/mercuryWebTours/nav.pl?page=menu&in=itinerary", "Snapshot=t8.inf", "Mode=HTML", LAST); if (atoi(lr_eval_string("{HttpStatusCode}")) > 0 && atoi(lr_eval_string("{para_count}"))>0){ lr_end_transaction("事务名称", LR_PASS); }else{ lr_end_transaction("事务名称", LR_FAIL); } return 0; }
3、Web_image_check
这个函数比较简单,写在对应的web_ur后面即可:
web_url("Home Button",
"URL=http://127.0.0.1:1080/mercuryWebTours/welcome.pl?page=menus",
"TargetFrame=body",
"Resource=0",
"RecContentType=text/html",
"Referer=http://127.0.0.1:1080/mercuryWebTours/nav.pl?page=menu&in=itinerary",
"Snapshot=t8.inf",
"Mode=HTML",
LAST);
web_image_check("web_image_check","src=/images/signoff.gif",LAST);
执行结果如下:
Action.c(42): "web_image_check" succeeded (1 occurrence(s) found. Alt="", Src="/images/signoff.gif")[MsgId: MMSG-27192]
Action.c(42): web_image_check was successful[MsgId: MMSG-26392]
这里说明一下对应的src可以在脚本执行后的日志里面找到,日志记录的是完整路径,src部分只要相对路径就可以了。
LoadRunner 设置检查点筛选出不是404页面的所有url
文件:
D:\TestCase\20120703_pre_prd_regfind\NewParam.dat
内容:
code 您浏览的商品暂时无法显示
文件:D:\TestCase\20120703_pre_prd_regfind\PrdUrl.dat
内容:
PrdUrl prd_10052_10051_-9_360224_.html prd_10052_0051_-7_362583_.html prd_10052_1001_-7_395182_.html prd_10052_10051_-7_414199_.html prd_10052_10051_-7_768624_.html prd_10052_10053_-7_203086_.html prd_10052_22001_-7_891931_.html prd_10052_10051_-8_1244601_.html prd_10052_10051_-20_1195773_.html prd_10052_10051_-7_767919_.html prd_10052_10051_-7_1528645_.html prd_10052_10051_-21_1149579_.html prd_10052_10051_-21_442736_.html prd_10052_0_-7_394662_.html prd_10052_10051_-7_771411_.html prd_10052_0_-7_122655_.html prd_10052_10051051_-7_1297622_.html prd_10052_10051_-23_175594000000000_.html
文件:D:\TestCase\20120703_pre_prd_regfind\Action.c
内容:
#include "web_api.h" Action() { char tmp[100]; long file; char * oid; char * i; file=fopen("D:\\wyg120709.txt","at+"); lr_convert_string_encoding( lr_eval_string("{your_code}"),LR_ENC_SYSTEM_LOCALE,LR_ENC_UTF8,"EncodedSearchTerm" ); strcpy( tmp, lr_eval_string("{EncodedSearchTerm}") ); lr_save_string( tmp, "sorvalue" ); web_reg_find("Fail=Found", "Search=All", "SaveCount=placeflag", "Text={sorvalue}", LAST); // 根据检查点控制结束事务e lr_start_transaction("四级页面"); web_url("{PrdUrl}", "URL=http://b2cpre.***.com/emall/{PrdUrl}", "Resource=0", "RecContentType=text/html", "Referer=", "Snapshot=t1.inf", "Mode=HTML", EXTRARES, LAST); if((atoi(lr_eval_string("{placeflag}"))<1)) { lr_end_transaction("四级页面",LR_PASS); i=lr_eval_string("{PrdUrl}\n"); fputs(i,file); } else lr_end_transaction("四级页面",LR_FAIL); return 0; }
loadrunner 错误筛选,参数化筛选,
#include "web_api.h" Action() { long file; char * i; file=fopen("d:\\tongji.txt","at"); lr_start_transaction("四级页面-顾客最终购买"); web_reg_find("Fail=NotFound", "Search=All", "SaveCount=placeFlag", "Text=页面某固定返回值", LAST); // 根据检查点控制结束事务 web_url("tuijianpre", "URL=http://tuijianpre.cns****.com/recommend-portal/page/fourPage01.jsonp?sku={sku2}&sceneId=02", "Resource=0", "RecContentType=text/html", "Referer=", "Snapshot=t1.inf", "Mode=HTML", LAST); if((atoi(lr_eval_string("{placeFlag}"))<1)) { lr_end_transaction("四级页面-顾客最终购买",LR_FAIL); } else { lr_end_transaction("四级页面-顾客最终购买",LR_PASS); i=lr_eval_string("{sku2}\n"); fputs(i,file); fclose(file); } //lr_end_transaction("四级页面-顾客最终购买", LR_AUTO); //fclose(file) return 0; }
LoadRunner设置检查点的几种方法介绍
发布时间: 2011-5-03 11:53 作者: 一米阳光做测试 来源: 51Testing软件测试网采编
http://www.51testing.com/html/78/n-235278.html
http://www.51testing.com/html/78/n-235278-2.html
前段时间在群里跟大家讨论一个关于性能测试的问题,谈到如何评估测试结果,有一个朋友谈到规范问题,让我颇有感触,他说他们公司每次执行压力测试的时候,都要求脚本中必须有检查点存在,不然测试结果将不被认可,这是他们公司的规范。其实,在做压力测试过程,我们很容易忽略很多东西,而且随着自身的技术演变,我们很容易去丢失掉一些很好的习惯,当我们再碰到这些问题的时候,我们才发现其实是我们太粗心大意了,所以说好的习惯要保持。这次我刚好也要接手一些性能工作,因此就如何规范设置检查点来谈谈一些基本的流程和方法。
使用LoadRunner做压力测试,大致如下几个流程:
1、明确测试目标
2、录制测试脚本
3、脚本优化、调试
4、场景运行
5、分析测试结果
当然这里都是概况性的标题,但从这里我们可以明确的是测试脚本是整个压力测试过程中的重点步骤,如果测试脚本都不能确保正确与否,后面的测试过程就无从说起了。很多时候我们把脚本调试就简单的认为是脚本回放没有错误就认为脚本是没有问题的,这当然不能这么肯定,脚本调试是一个非常严谨的过程,我大致归纳如下几步:
1、明确每一行脚本的作用,也就是说每一行脚本执行的功能是什么;
2、删减不需要的脚本语句,比如在录制过程由于LR默认设置导致录制之后出现很多冗余的脚本,这些个脚本对我们的测试过程没有用途的应该删除掉,至于哪些是冗余就要具体分析了,所以说脚本录制完之后要分析脚本运行的过程,方能理解脚本执行的用途,不然在后面施压时运行错误,就会开始到处找问题,而又找不出问题;
3、查找存在的关联并进行相关设置
4、设置检查点,设置检查点的目的就是为了验证页面每次运行之后是否正确,设置检查点的过程总要通过不能的回放来进行验证检查点设置是否正确。
5、通过测试目标明确脚本执行的目标事务,并添加事务;
6、对需要进行并打操作的功能设置集合点
7、根据实际情况设置ThinkTime
8、在以上所有脚本调试步骤完成之后,设置迭代次数,通过在Vuser中设置多次迭代来验证脚本在多次循环运行时是否存在错误
注意:在Vuser中运行和回放脚本的过程,要密切关注replay log,也就是回放日志,很多问题通常都暴露在回放日志中,只不过我们没有认真去检查,所以没发觉。因为大多数情况是我们在回放脚本之后只观察回放日志中有没有红色的错误提示信息,如果没有我们就认为我们的脚本是ok的,其实不然,很多时候一些隐藏的错误就在回放日志中可以被发现,比如回放日志中的Warning信息,也就是警告信息,这些信息一旦你不去理会它,它将在场景运行过程中开始频繁暴露出来,而在场景中报错之后我们就认为可能是系统有问题或者是测试过程存在其他问题等等,而很难去考虑到是脚本的问题,是脚本在Vuser中调试就存在的问题。还有的时候一些问题在一次脚本回放中就不能被发现,他需要通过Vuser中设置多次迭代才能在回放日志暴露出问题来,所以说我们通常的思维就是一旦测试脚本没有一次回放没有出现错误,就去场景中运行,结果在场景中哪怕是运行10个用户都还会报错,这就是问题的根源所在。
下面还是重点说说检查点吧,三种常用的文本检查web_reg_find的方法:
1、 将脚本切换到树结构,在page view页面上找到你要check的文本内容, 并执行鼠标右键,选择Add a text check.
2、 通过Vuesr界面去设置检查点,如图所示:
loadrunner_run-time_settings_ContentCheck.jpg
3、将脚本切换回代码界面, 在光标闪烁的上行,添加如下的代码:
添加的代码根据你检查的方式不同而不同, 你可以选择其中之一即可。
代码一:
web_reg_find("Text=Payment Details",LAST);
注:“Payment Details” 为你要检查的文本;
脚本执行到此处,若在页面上找到了这几个字符串,那脚本继续执行下去;若没有找到,脚本将在此报错并且结束。
代码二:
web_reg_find("Text=Payment Details", "SaveCount=para_count", LAST); //check 的函数
这里是要运行的页面脚本
if (atoi(lr_eval_string("{para_count}"))>0) //验证是否找到了页面上的要检查的字符串
lr_output_message("Pass!");
else
lr_output_message("Failed!");
注意:
“Payment Details” 为你要检查的文本;
脚本执行到此处,不管页面上是否存在你要检查的字符串,脚本都不会报错,而是执行下去。
此段代码将找到的你要检查的字符串的个数,存为一个参数。 然后在页面代码的后面,通过检查这个参数的值是否大于0,来判断是否找到了你所要检查的字符串。
注意:这里的测试结果均以200状态码返回,其失败的结果将在分析报告中进行分类标识。
代码三:
web_reg_find("Text=Payment Detdils", "Fail=NotFound",LAST);或者
web_reg_find("Text=Payment Detdils", "Fail=Found",LAST);
以上两段脚本就比较简洁,通过查询文本内容来决定此次运行的测试结果是否失败。
注意:在使用检查点的时候我们还需要注意一些问题,通常我们都要设置一些中文检查点,但是LR默认不支持,如果你设置了中文检查点而报错,那你就应该注意了,在录制脚本的时候去掉默认设置的UTF-8选择,如下图所示:
loadrunner_Tools_Recording_Options_UTF-8.jpg
并且还设置启用图片和文本检查点,如下图所示:
loadrunner_run-time_settings_Preference_Checks.jpg
以上就是设置检查点的全过程,设置检查点的目的不只是为了验证我们的脚本没有错误,而更重要的是一个规范问题,如何使得测试结果更具有说服力,那就所有的测试脚本中都添加检查点设置
end
相关推荐
应用范围 在使用Loadrunner进行性能测试时,经常遇到一种情况,需要通过web页面修改某事务的状态。于是需要首先读出当前的事务的状态,再进行修改,此时便可以使用到web_reg_save_param了。可以通过它先将事务的...
### 在LoadRunner中使用`web_reg_save_param()`进行关联 #### 一、LoadRunner关联概述 在LoadRunner中,关联是一种重要的技术手段,用于解决在录制脚本时遇到的动态数据问题。通常有两种关联方式:手动关联和自动...
HP_LoadRunner_12_Community_Edition_Additional_Components_T7177-15046文件分割成两个压缩包,必须凑齐两个才能解压缩使用: HP_LoadRunner_12_Community_Edition_T7177-15046.part2.rar ... HP_LoadRunner_12_...
Micro_Focus_LoadRunner_2022_Community_Edition_Additional_Components
HP_LoadRunner_12_Community_Edition_Additional_Components_T7177-15046文件分割成两个压缩包,必须凑齐两个才能解压缩使用: HP_LoadRunner_12_Community_Edition_T7177-15046.part1.rar ... HP_LoadRunner_12_...
标题“web test LoadRunner SAP / java / Java Vuser / web_set_max_html_param_len”涉及到的是在性能测试领域中,如何使用LoadRunner工具针对Web应用程序进行测试,并特别关注SAP、Java以及Java Vuser(虚拟用户)...
例如,`web_url()`函数用于发送HTTP GET请求,`web_post()`用于POST数据到服务器,`web_reg_find()`则用于验证页面内容等。 博文链接虽然没有提供具体内容,但在实际的LoadRunner使用过程中,了解和熟练运用函数...
文件为百度网盘链接; 内容包含HP_loadRunner_12.02_Community_Edition_T7177安装包和汉化包; 文件总共大小:1,782,393,386 字节。
《HP LoadRunner 12.02 Community Edition:性能测试的得力工具》 HP LoadRunner,作为业界知名的企业级负载测试工具,以其强大的功能和广泛的协议支持在IT行业中占据了重要地位。本篇将深入探讨HP LoadRunner ...
LoadRunner,是一种预测系统行为和性能的负载测试工具。通过以模拟上千万用户实施并发负载及实时性能监测的方式来确认和查找LoadRunner能够对整个企业架构进行测试。通过使用LoadRunner,企业能最大限度地缩短测试...
在性能测试领域,尤其是 LoadRunner 或其他基于 LoadRunner 技术栈的工具中,`web_reg_find` 函数被广泛用于验证网页内容是否存在,以此来确保测试场景的正确性。下面详细介绍三种常用的 `web_reg_find` 方法及其...