-
LoadRunner学习---脚本编写 转自“chinaitlab.com”
2008-10-29 14:32:34
今天接着来翻译http://www.wilsonmar.com/中关于LoadRunner脚本编写部分,下面该翻译脚本编写中一些比较重要的部分了
Web用户Action
在VuGen中,脚本产生的默认模式是基于HTML的——“描述用户的动作的脚本”直接与用户的动作是对应的:
* web_url是浏览器地址栏的URL.
* web_link是点击在<a href= ……>和<a>之间的文本超链接
* web_image是点击HTML的<img href= link.
* web_submit_form 是在前面操作的上下文中的GET或PUT表单上点“提交”——可能前面的操作被VuGen在基于HTML模式下录制下来了
* web_submit_data 是在GET或PUT表单上点“提交”,而没有带前面操作的上下文——可能是在基于URL模式下录制,或者是基于HTML模式,并且选择了“A scrīpt containing explicit URLs only”选项
不用HTML产生的资源是。gif和。jpg图片。资源属性的列表只能当对这些资源的路直选项设置成“Record within the current scrīpt step”时被插入。这也是默认的设置
如果你在“Tools > Internet Procotol > Recording”中选择“a scrīpt containing explicit URLs only”,这将会产生URL-based的脚本录制,只使用web_url和web_submit_data函数,将不会使用 web_link 和 web_image函数,或包含在 applets, XML, ActiveX或javascrīpt中的非HTML元素
在进行下一页录制之前(如点击链接或者图标),暂停录制,把该页屏幕的标题拷贝下来粘贴到注释中。录制完成之后,这将会在后面的给事务命名上用到
在每一个页面显示之后,暂停录制,把决定是否是期望页的文本拷贝下来,粘贴到注释中。录制完成之后,这将会用到文本验证检查点的脚本编写中
录制中产生的各种信息都保存在RecordingLog.txt文件中,删除它不会对脚本的回放产生影响
额外录制的Action脚本
录制脚本的时候,当浏览器没有安装SSL根证书的时候,会捕获的下面这些代码行。这个信息意思是“这个证书不能被信任证书验证”web_url("authrootseq.txt", "URL=http://www.download.windowsupdate.com/msdownload/update/v3/static/trustedr/en/authrootseq.txt",
"Resource=1",
"RecContentType=text/plain",
"Referer=",
LAST);web_url("authrootstl.cab",
"URL=http://www.download.windowsupdate.com/msdownload/update/v3/static/trustedr/en/authrootstl.cab",
"Resource=1",
"RecContentType=application/octet-stream",
"Referer=",
LAST);
录制脚本的时候,但浏览器遇到Macromedia flash组件的时候,会产生下面的代码行:web_url("version_en_win_ax.xml",
"URL=http://fpdownload.macromedia.com/pub/flashplayer/update/current/xml/version_en_win_ax.xml",
"Resource=0",
"RecContentType=text/html",
"Referer=",
"Snapshot=t8.inf",
"Mode=HTML",
LAST);
如果你安装有Google Toolbar,即使你没有访问Google,也会录制上发到Google的请求。
脚本语言规则:
在LoadRunner中,大小写是敏感的,甚至在被检验的值中。所以上面的脚本会因为大写字母的原因,不会识别“Welcome”的。所以Steve Cheney 建议使用“ic”忽略大小写的文字标志:web_reg_find("Text/ic=Welcome",LAST);……
括号里的参数包含了LAST 是为了指定最后的一个参数。这样做是很方便的,因为上面的例子漏掉了一个指定期望是“found”还是“notfound”的属性。默认是“found”,所有我经常忽略它。
另一个文本标志是“/BIN”用来指定是二进制的字符集。例如,查找“Adams”:
web_reg_find("Text/BIN=\\x00A\\x00d\\x00a\\x00m\\x00s",LAST);
注意两个反斜杠,一个是转义字符,代表是使用了一个符号。如果错误的只使用一个反斜杠,LR会认为它是一个空的终止。下面的例子脚本是在UTF8服务器上支持获得newquoteuid为UTF-16编码。因为LoadRunner中,UTF16编码的“Red”用ASCII是 R\x00e\x00d\x00 这样的,所以需要把它保存到buffer中。
lr_eval_string_ext("{newquoteuid_temp}",
strlen("{newquoteuid_temp}") + 2,
&Buf, &BufLen, 0, 0, -1);
对字符数组变量NewBuf使用lr_save_var函数来去掉额外的填充(x00):for (i=0; i if (Buf[i]!=0) NewBuf[NewBufLen++]=Buf[i];
lr_save_var(NewBuf, NewBufLen-1, 0, "newquoteuid");
注:lr_save_var 需要四个参数(不需要使用LAST)
1.param_value 参数值。
2 value_len 参数的长度。
3 options 参数的选项,一般为0. 4.param_name 参数名称。
LoadRunner 7.8不支持正则表达式,但是有他自己的通配符:
为了使任何[0-9] 的数字在指定的数字位置,使用/DIG做标志:
web_reg_save_param("pSer","LB/DIG=Serial XXX-###-ZZZZ","RB=\r\n", LAST );
有三种使用^做通配符的方法:
* 忽略大小写,并且允许在指定的字符位置使用任意字符:
web_reg_find("Text/ALNUMIC=^ercury", LAST);
* 允许任何小写字符[a-z] 在指定位置:web_reg_find("Text/ALNUMLC=^ercury", LAST);
* 允许任何大写字符[A-Z]在指定的字符位置:
web_reg_find("Text/ALNUMUC=^ercury", LAST);
把一个字符串变成大写:strupr()
错误信息:
请添加一些其他的错误信息来帮助其他人:
Could not resolve address of host …… [MsgId: MERR-27798].如果网络不能用或者域没有注册的话,显示一个404的DNS错误。
Contents unexpectedly not in cache. [MsgId: MERR-26549].当一个文件为空时会显示该错误。在空文件中添加空格来满足LoadRunner的错误检查。BTW,因为当创建的iframe没有文件时,IE会产生一个错误,这样就指定了一个空文件。
事务时间脚本编写:
我更喜欢给一个action命名事务,而不是一个结果页面。lr_start_transaction("00.1 Invoke URL");
...
lr_end_transaction("00.1 Invoke URL",LR_AUTO);
...
lr_start_transaction("01.2 Top menu");
...
lr_end_transaction("01.2 Top menu",LR_AUTO);lr_start_transaction("02.0 Updating");
lr_start_sub_transaction("02.1 Update menu","02.0 Updating");
web_url( ...
lr_end_sub_transaction("02.1 Update menu",LR_AUTO);
lr_start_sub_transaction("02.2 Update submit","02.0 Updating");
web_submit_form( ...
lr_end_sub_transaction("02.2 Update submit",LR_AUTO);
lr_start_sub_transaction("02.3 Update OK","02.0 Updating");
web_url( ...
lr_end_sub_transaction("02.3 Update OK",LR_AUTO);
lr_end_transaction("02.0 Updating",LR_AUTO);
我喜欢在一个层次结构中使用0填充的事务名称,这样来确保控制器能够正确的给事务排序。我对不同类型的action上的事务名称上加不同的关键字
Contact Link = Click "Contact" link on Menu
Contact Icon = Click "Contact" Icon
Regis. Sub = Page Submit
OK = Pop-up dismiss with OK
事务名可以是变量,但是它只能被VuGen作为字符串来编译,不能在控制器的接口中显示。无论如何,他们会显示在分析结果文件中。对于web脚本,LR自动创建和决定事务的的持续时间,但是C语言脚本可以使用这些函数:
使用lr_start_transaction_instance函数来显式获得指定事务实例的句柄,事务名称在函数lr_user_data_point_instance或lr_user_data_point_instance_ex中使用。
使用 lr_start_sub_transaction在一个事务中来操作思考时间和消耗的时间。
好了,脚本编写部分基本已经翻译了一半了,该睡觉了,下面会接着翻译检查点,操作字符串,从流中获得数据,参数化,如何使用文件,关联,集合点等,内容还是很多的。哈哈
-
【专题】LoadRunner脚本录制释疑 作者: snooker
2008-10-29 14:30:40
脚本概念
Testing scrīpt(测试脚本),一般指的是一个特定测试的一系列指令,这些指令可以被自动化测试工具执行
关于脚本的一些问题及其问题解答
1.什么是测试脚本,它和测试用例之间是一种什么关系?
什么是测试脚本,它是用来表示测试用例的么?确定了一个测试用例的具体内容以后,是不是就要用测试脚本将这些内容表示出来,在编写测试脚本的时候,会使用什么样的脚本语言来描述,或者用其他的语言来描述,
现在一般采用什么脚本语言?
请高手指点。
——————————————————————————————————————————————————————
回答1:手工测试一般不会涉及到测试脚本。在自动化测试中,需要采用自动化测试工具,每种自动化测试工具都有自己的测试脚本,通过编写测试脚本,实现某个测试用例,运行测试脚本,既可执行该测试用例,并可以通过脚本自动检查测试用例的执行结果
——————————————————————————————————————————————————————
回答2:脚本语言根据你自己的情况可以使用不同的语言. Perl 就是一个很好的脚本语言. 当然如果是在windows上,使用VB也很好. 看你测试的目的和test harness的关系,可以选用不同的语言,主要就是为了方便容易调试.
——————————————————————————————————————————————————————
回答3:测试脚本就是用户对业务操作的记录,将测试用例用测试脚本表述出来,那我们就不用手工执行测试了,就可以通过执行测试脚本来执行测试
——————————————————————————————————————————————————————
回答4:这个是我自己的回答,其实测试脚本就是相当于手工测试的测试用例,测试用例最关键的是预期的输入和输出。测试脚本在录制的时候相当于写手动测试的测试用例步骤,而插入各种检查点(qtp)就是预期的输出,通过检查点判断结果是否正确。而LR的测试脚本的预期输出实际上是客户的性能需求
脚本语言:脚本编程就是编写不需要编译,直接由解释器来运行的程序,比如UNIX下的SHELL程序、javascrīpt、bvscrīpt等。主要用于系统管理、WEB网页等还包括有VBS,Perl等脚本语言
标题搜索
我的存档
数据统计
- 访问量: 14069
- 日志数: 35
- 图片数: 1
- 文件数: 4
- 建立时间: 2006-12-06
- 更新时间: 2009-07-23