一.让我们先看看什么是正则表达式
下面一段出自百度百科
正则表达式,又称规则表达式。(在代码中常简写为regex、regexp或RE),计算机科学的一个概念。正则表通常被用来检索、替换那些符合某个模式(规则)的文本。
许多程序设计语言都支持利用正则表达式进行字符串操作。例如,Perl中就内建了一个功能强大的正则表达式引擎,还有java语言自带的。正则表达式这个概念最初是由Unix中的工具软件(例如sed和grep)普及开的。正则表达式通常缩写成“regex”,单数有regexp、regex,复数有regexps、regexes、regexen。
我们在安装Loadrunner后,在【开始-所以程序】中会有一个Strawberry Perl目录,LR很多函数都是基于Perl引擎
二.用在何处
今天我们的主角就是函数web_reg_save_param_regexp,此函数是LoadRunner11更新LoadRunner11_Path3.msp补丁后新加入的(要是在F1帮助文档中没有查出此函数就去打补丁吧),那么我们什么时候用到此函数呢?熟悉关联的朋友可能知道,其实所谓“关联”就是让在执行脚本的时候,对页面不同之处参数化,执行到此处时全部用参数替代就可以运行成功。以前的老的关联函数都是要取左右边界的,找起来稍麻烦,要是左右边界是动态的,返回的ID的长度也不定,那么如何去取得,老的方法是用strtok()进行字符切割,现在我们有了新的正则表达式的方式关联,那么就可以淘汰掉之前的方法了,这就是此函数的用武之地。
三.如何用
知道了用在何处之后,就是怎么用的问题了。我们在写脚本时,在Action中右击鼠标inset-newstep ,找到web_reg_save_param_regexp,点击【OK】
其中关键就是Regular Expression的写法,记住了:需要用()圆括号标记
如接下来的演示中的部分脚本如下:
web_reg_save_param_regexp(
“ParamName=test1”,
“RegExp=userSession value=(.*)>”,
“Ordinal=1”,
SEARCH_FILTERS,
LAST);
表示以“userSession value=”开头,“>”结尾,中间的任何内容都关联保存到参数test1中,
(C中定义了一些字母前加”\”来表示常见的那些不能显示的ASCII字符,如\0,\t,\n等,就称为转义字符,因为后面的字符,都不是它本来的ASCII字符意思,所以要是有换行\r回车等等)。
四.实例演示
我们以LR自带的Web Tours进行演示
前提:1. Web Tours服务启动;
2.有账号;
步骤:
1. 必要设置,【开始-所有程序】中点击如图,打开Web Tours网站
点击页面中的administration进行必要如下:
勾选第三项,后点击页面下的【UPDATE】更新按钮使设置生效:
然后关闭IE开始我们的录制“登陆-退出”脚本
2. 新建脚本
① 我们选择Web (HTTP/HTML)协议录制,确定后弹出如图,填入如图信息录制:
② 点击【Option】进行如图两项的设置,这里我们用HTML形式录制,全部放在Ation里面:
③ 设置完毕后点击【OK】,开始脚本录制,录制很简单的两步:输入用户名密码登陆,然后退出:
④ .然后点击停止按钮结束录制,到此录制工作完毕。
脚本如下:
Action()
{
web_url(“WebTours”,
“URL=http://127.0.0.1:1080/WebTours/“,
“Resource=0”,
“RecContentType=text/html”,
“Referer=”,
“Snapshot=t1.inf”,
“Mode=HTML”,
LAST);
lr_think_time(48);
web_submit_data(“login.pl”,
“Action=http://127.0.0.1:1080/WebTours/login.pl“,
“Method=POST”,
“RecContentType=text/html”,
“Referer=http://127.0.0.1:1080/WebTours/nav.pl?in=home“,
“Snapshot=t2.inf”,
“Mode=HTML”,
ITEMDATA,
“Name=userSession”, “Value=120898.059538275zcVizQDpQDHfDHDVcpVzDzcf”, ENDITEM,
“Name=username”, “Value=zmy”, ENDITEM,
“Name=password”, “Value=123456”, ENDITEM,
“Name=JSFormSubmit”, “Value=on”, ENDITEM,
“Name=login.x”, “Value=43”, ENDITEM,
“Name=login.y”, “Value=12”, ENDITEM,
LAST);
lr_think_time(25);
web_image(“SignOff Button”,
“Alt=SignOff Button”,
“Snapshot=t3.inf”,
LAST);
return 0;
}
- 编译-回放,发现报错
然后我们就要查找为什么录制了,但是回放不成功的原因了,点击工具栏或者菜单中如下图Scan Script Correlations扫描对比
我们点击界面下方的“Show Differences”比较后,我们可以查出不成功的原因了,见图:Response Body中的中userSession value值每执行一次都改变,导致回放时失败,那么我们下一步就是对其关联参数化,回放的时候,到了这个值我们就直接用参数代替就可以通过了
关联
① 在脚本最前面我们插入函数,可以手写,也可以依照前面的步骤插入,完毕后整个脚本如下,以参数test1替代“userSession value=”和“>”直接的所有字符串
web_reg_save_param_regexp(
“ParamName=test1”,
“RegExp=userSession value=(.*)>”,
“Ordinal=1”,
SEARCH_FILTERS,
LAST);
② 我们把脚本中相应的含userSession值的地方换成参数test1,整个脚本如下:
Action()
{
web_reg_save_param_regexp(
“ParamName=test1”,
“RegExp=userSession value=(.*)>”,
“Ordinal=1”,
SEARCH_FILTERS,
LAST);
web_url(“WebTours”,
“URL=http://127.0.0.1:1080/WebTours/“,
“Resource=0”,
“RecContentType=text/html”,
“Referer=”,
“Snapshot=t1.inf”,
“Mode=HTML”,
LAST);
lr_think_time(48);
web_submit_data("login.pl",
"Action=http://127.0.0.1:1080/WebTours/login.pl",
"Method=POST",
"RecContentType=text/html",
"Referer=http://127.0.0.1:1080/WebTours/nav.pl?in=home",
"Snapshot=t2.inf",
"Mode=HTML",
ITEMDATA,
"Name=userSession", "Value={test1}", ENDITEM,
"Name=username", "Value=zmy", ENDITEM,
"Name=password", "Value=123456", ENDITEM,
"Name=JSFormSubmit", "Value=on", ENDITEM,
"Name=login.x", "Value=43", ENDITEM,
"Name=login.y", "Value=12", ENDITEM,
LAST);
lr_think_time(25);
web_image("SignOff Button",
"Alt=SignOff Button",
"Snapshot=t3.inf",
LAST);
return 0;
}
然后再次运行脚本就不会报错了O(∩_∩)O
本文介绍了LoadRunner中使用正则表达式进行性能测试关联的方法,特别是新函数web_reg_save_param_regexp。该函数在LoadRunner11的Path3补丁后引入,用于替换传统的边界查找关联方式。文章通过实例演示了如何在录制的脚本中应用正则表达式关联,解决因页面动态参数变化导致的脚本回放失败问题。
1万+

被折叠的 条评论
为什么被折叠?



