loadrunner- record a script

Creating Vuser Scripts - Record the basic script

1, start loadrunner

Select Start  Programs  HPLoadRunnerLoadRunner, HP LoadRunner window opens.

2. Open VuGen

In LoadRunner Launcher pane, click Create / Edit Scripts, link to start Virtual user Generator start page. (FIG two methods can)
Here Insert Picture Description

3. Create a blank Web script

Select File-> New menu, or click the Here Insert Picture Descriptionbutton to open the New Virtual User dialog box, select the script for display protocol.

Here Insert Picture Description
For common applications, we can apply a measured in accordance with B / S structure is C / S structure protocols. If B / S structure, it is necessary to select Web (HTTP / HTML) protocol. If C / S structure, may be selected according to the type of back-end databases, such as MS SQL Server database back-end protocol for testing for the application SQL Server; for WINDOWS application without a database can select Windows Sockets protocol.
Depending on the selected protocol, Virtual User Generator leads the user to record a script in different ways and interfaces.
loadrunner- introduce a text has introduced its own record loadrunner analysis URL using what protocol

4. Set the recording before

Select Web (HTTP / HTML), click on the Create button to open the Start Recording dialog box. Select different protocols, open windows will be different, examples being recorded for Web dialog box.
Here Insert Picture Description
VuGen script is divided into three parts: Vuser_init, Action, Vuser_end.
Vuser_init和Vuser_end都只能存在1个,在迭代执行中只会执行1次 (例如:登录与退出)
Action可以存在多个,在迭代执行中可以执行多次

在Start Recording对话框,点击Options按钮,进入录制选项设置。一般要设置以下选项:

1)RecordingHTTP/HTML level中设置脚本的显示形式:URL_based script。
基于浏览器的应用程序推荐使用 HTML-based script。
不是基于浏览器的应用程序推荐使用 URL-based script。
基于浏览器的应用程序中包含了JavaScript,并且该脚本向服务器发送了请求,比如DataGrid的分页按钮等,推荐使用URL-based script。
基于浏览器的应用程序中使用了HTTPS安全协议,建议使用URL-based script。
Here Insert Picture Description
== LR HTML与URL录制方式区别==
Recording录制选项
这里提供了两个大类的录制方式:

  1. HTML-based script基于HTML的脚本
    这种方式录制出来的脚本是基于HTML基础的,为每个用户操作生成单独的步骤,这种脚本更容易理解和维护,也更容易处理关联。对于正常的浏览器应用程序,推荐使用HTML录制模式。
    一般来说如果我们是标准使用IE访问的B/S架构,我们应该使用HTML-BASE下的A script. containing explicit URLs only方式来录制脚本,这种脚本基于URL请求完成,不会带有任何前后依赖的内容。
    选择HTML Advanced,出现两种script type
    • A script describing user actions (web_link, web_submit_form)
    脚本中的每一个函数直接对应着虚拟用户的一个动作,创建的函数主要有URL(Web_url)、link(Web_link)、image(Web_image)以及表单提交(Web_submit_form)等几类。
    基于解释用户行为的脚本,注重描述用户做了什么操作类似于QTP,脚本简洁,基于用户操作模拟,浅显易懂,并且自身就包含了对象检查过程,无需校验
    • A script containing explicit URLs only (web_url, web_submit_data)
    将所有的URL、link、image都用Web_url函数来统一处理,在表单提交时则用Web_submit_data来处理。这样做的结果是脚本没有前一种方式那么直观,但如果网页中存在较多相似类型的链接时,这样做更容易处理脚本中的参数化和关联问题。
    基于URL请求的脚本录制类型,这种方式不考虑用户的操作,只考虑客户端发送的请求,注重于实际上系统做了什么。
  2. URL-based script基于URL的脚本
    这种方式录制出来的脚本是基于URL请求的。如果我们是一个非IE标准的C/S架构,我们建议使用URL-BASE来录制脚本,这样我们可以确保不会遗漏任何HTTP请求。
    这种是基于URL请求的脚本录制方式,我们会录制得到所有的http请求,导致脚本中包含了大量的web_url()函数Use web_custom_request only 自定义的http请求规则,更适合在自定义的http请求中进行二进制处理。采用这种方式生成脚本所有请求都生成web_custom_request () 函数。
    对于web_link()、web_submit _form()等函数,需要前面页面的支持,也就是说必须先访问http://127.0.0.1:1080/WebTours/这个页面之后,才可以点击sign up now 按钮,如果不在http://127.0.0.1:1080/WebTours/这个页面,是无法点击sign up now 按钮的,包括web_submit _form()提交,也必须是在点击了sign up now 按钮之后的页面才可以提交。
    而对于web_url(),web_submit _data()等函数则不需要要前面页面的支持,也就是说你可以直接访问http://127.0.0.1:1080/WebTours/login/p1 (相当于点击了sign up now ),而且还可以在当前页面进行提交。

两种录制模式的选择:
HTML-based优缺点:
(1)资源从内存中取出且在回放时下载。因此脚本更小且更容易阅读。
(2)由于只有较少的硬编码脚本,因此只有较少的动态值需要关联。
(3)可以插入图片检查之类的语句以检查结果是否正确。
(4)因为HTML模式回放时需要积极地解析返回的信息,因此它可能会比其他录制模式更加占用资源。
URL-based优缺点:
(1)适用于非browser的应用程序。
(2)录制来自sever的所有请求和资源,甚至抓取非HTML应用程序,因此需要做更多关联,脚本看起来也相当复杂。
综上,选择何种录制方式可以参考如下方案:
(1)如果应用是Web应用,首选是HTML-based录制模式;
(2)如果应用是使用HTTP协议的非Web应用,则首选URL-based录制模式;
(3)如果Web应用中使用了Java applet程序,且applet程序与服务器之间存在通信,则选用URL-based录制模式。

2)AdvancedSupport charset中设置编码格式:UTF-8;
提示:录制Web脚本时,生成的脚本中存在乱码该如何解决?
新建脚本—>选择协议(Http)–>选项–>高级–>选择“支持字符集”并点选“UTF-8”。
在回放脚本之前:Vuser–>运行时设置–>浏览器–>浏览器仿真–>更改–>使用浏览器–>语言下来选择 “中文(中国)”。
Here Insert Picture Description

5.录制

在Start Recording对话框,点击OK按钮,开始录制。系统自动弹出IE,加载WebTours系统的注册界面。
在录制的过程中,屏幕上有一个悬浮的录制工具栏,是脚本录制过程中测试人员和VuGen交互的主要平台。
熟悉录制脚本工具栏:
Here Insert Picture Description
实例操作:登录系统点击sign up now ==>注册并提交
通过操作被测系统,操作的每一个步骤都被记录,在录制的过程中,可以在相应的步骤插入action、事务、检查点、集合点等信息。录制完成后单击Here Insert Picture Description按钮,Loadrunner开始生成脚本,生成的脚本如图所示。
熟悉两种脚本查看方式:
Script View 可以查看全部录制的脚本代码
Here Insert Picture Description
Tree View 可以查看每个URL获取来的页面
Here Insert Picture Description

  • 1.插入事务
    插入事务是用于把功能分为若干部分,在统计性能指标时,可以对不同的事务分别作统计。如果对脚本不是太熟悉,可以在录制的时候,逐步插入。也可以在录制完成之后,在脚本中插入。
    在录制时插入操作为:录制某个功能开始前单击插入事务的起始点录制,直到某个功能结束插入事务的结束点。
    在脚本的插入方式为:
    插入事务起始点:
    单击某个功能起始前的空白处右键鼠标insert=>start transaction=>命名=>OK。系统自动在脚本语句中插入如下语句:
    lr_start_transaction(“登录”);
    Here Insert Picture Description
    插入事务结束点:
    单击某个功能结束后的空白处右键鼠标insert=>end transaction=>命名(与起始点的名字一致)=>OK。
    系统自动在脚本语句中插入如下语句:
    lr_end_transaction(“登录”,LR_AUTO);
    Here Insert Picture Description
  • 2.参数化
    参数化的作用是在进行场景执行的时候,每个不同的虚拟用户可以按照参数的读取策略读取到参数值,以模拟不同用户在提交或者读取不同的数据。
    每个用户在界面上读取和提交的信息都不太相同,因此一般都需要参数化,其它与输入信息对应的比如用户id之类的信息也需要参数化;另外,录制环境绝大多数情况下与执行环境不一致,因此一般需要对IP、端口或者域名做参数化。
    下面将分四部分来介绍参数化的方法和实施过程:
    • 确定需要参数化的常量
    • 准备数据
    • 对脚本进行参数化
    • 还原初始字符串

确定需要参数化的常量化
打开脚本后,首先要确定哪些常量需要参数化。例如我们的系统注册的脚本代码:
Here Insert Picture Description
可以看出,在web_submit_data函数中,两条语句包含了两个常量:用户名和密码。
“Name=userNumber”, “Value=test201”, ENDITEM,
“Name=password”, “Value=1”, ENDITEM,
当我们想模拟多个不同的用户来运行登录脚本的时候,需要对Value= test201和Value=1进行参数化。
其它还有哪些常量需要参数化,可以根据业务场景来确定。
准备数据
根据实例,我们需要准备用户名、密码、地址这三个参数的数据。

Here Insert Picture Description
对脚本进行参数化
以用户名参数化为例,参数化过程如下:
1)选中test201=>右击鼠标=>在右键菜单上选择replace with a parameter。
2)在弹出窗口填写参数名称,或选择一个已经存在的参数名。
Here Insert Picture Description
实例中填写参数名称:UserNumber;选择参数类型File,来写入已准备好的数据。
常用的参数类型:
Data/Time:使用当前日期/时间替换所选常量。
Group Name:使用Vuser组的名称替换所选常量。
Load Generator Name:使用Vuser脚本的负载发生器名替换所选常量。
Iteration Number:使用当前的迭代编号替换所选常量。
Random Number:使用一个随机生成的整数替换所选常量,可以通过参数属性设定参数的范围。
Unique Number:使用一个唯一编号替换所选常量,可以通过参数属性设定参数的第一个值和递增的规则。
Vuser ID:使用运行脚本的虚拟用户ID来代替选择的常量。
File:采用外部的数据来代替,可以使用单独的文件,也可以使用现成的数据库中获取数据。
User Defined Function:从用户开发的dll文件中获取数据。

3)单击窗口的properties按钮,设置parameter的properties。
Here Insert Picture Description
设置完成后,被参数化的值会被参数名代替。实例中设置参数名为UserNumber,脚本原先220999部分变为了紫红色的{UserNumber}。

文件File:
参数化结束后,脚本保存的根目录下会自动生成一个 以参数名称命名的 参数文件;也可以直接选择一个已准备好的参数文件。
选择参数列Select Column:
By number:以列号为参数列。
By name:以列名为参数列。
文件格式:
Column:参数之间的分隔符:逗号、空格、Tab。
First data:从第几行读取数据。
选择参数分配方法Select next row:
Sequential:顺序的分配Vuser参数值。当正在运行的Vuser访问数据表格时,它将会提取下一个可用的数据行。
Random:当脚本开始运行时,“随机”的为每个Vuser分配一个数据表格中的随机值。
Unique:为Vuser的参数分配一个“唯一”的顺序值。注意,参数数量一定要大于等于“Vuser量*迭代数量”。
选择参数更新方法Update value on:
Each iteration:脚本每次迭代都顺序的使用数据表格中的下一个新值。
Each occurrence:在迭代中只要遇到该参数就重新取值。
Once:在所有的迭代中都使用同一个值。
当超出范围时When out of values:(选择数据为unique时才可用到)
Abort Vuser:中止。
Continue in a cyclic manner:继续循环取值。
Continue with last value:取最后一个值。

4)如果其它地方也用到这个相同的参数,则可以进行替换。
方法一:选中需要被替换的常量=>右键鼠标=>use existing parameter=>选择已经存在的参数名。
Here Insert Picture Description
方法二:选中这个设置好的【参数】,右键鼠标=>replace more occurrences=>逐个替换(如果确定所有都需替换可以全部替换)。
Here Insert Picture Description
还原初始字符串
通过VuGen,可以还原最初录制的字符串从而撤消参数化。方法为:
在脚本视图中,右键单击该参数并选择“Restore original value()”。
Here Insert Picture Description
设置完成后,该参数被还原为初始字符串。实例中的参数{UserNumber},被还原为初始的220999。

3.插入集合点
插入集合点是一种增大并发压力的方式。脚本运行时,只有当到达集合点的虚拟用户数满足设置要求时,才会继续往下运行。 插入集合点可以在录制的时候,逐步插入,也可以在录制完成之后,在脚本中插入。需要注意的是,集合点只能插入Action部分的脚本中,不能插入vuser_init和vuser_end两部分脚本中。
在录制时插入操作为:录制某个功能开始前=>单击插入集合点=>命名=>OK
在脚本的插入方式为:单击需要插入集合点的功能开始前的空白处=>右键鼠标=>insert=> rendezvous=>命名=>OK。
Here Insert Picture Description
系统自动在脚本语句中插入如下语句:
lr_rendezvous(“用户注册");
实例中,可以在提交的功能前插入集合点。
4.关联
关联的含义是,在脚本回放过程中,客户端发出请求,通过关联函数所定义的左右边界值(也就是关联规则),在服务器所响应的内容中查找,得到相应的值,以变量的形式替换录制时的静态值,从而向服务器发出正确的请求。最最典型的是用于sessionID。
常用的关联技术有三种:录制中关联、录制后关联、手动关联。
录制中关联
设置录制前的recording options=>correlation,可以勾选LR已有的关联规则,也可以新建规则;录制过程中,关联自动在脚本体现。
Here Insert Picture Description
录制后关联
关联的使用可以在脚本录制完成后,回放一次脚本,然后在脚本的菜单的vuser=>scan script for correlations进行设置。

Here Insert Picture Description
通过回放脚本和扫描关联,系统尝试找到录制与执行时服务器响应的差异部分,找到需要关联的数据,并建立关联。
Here Insert Picture Description
第2种自动关联方式 :
1.回放一次
2.切换到“ConrrelationResults”
3.Ctrl+F8
4.关联窗口中,点击Correlation

手动关联
录制前关联与录制后关联都属于自动关联的范畴。如果出现自动关联不能解决的问题,就需要使用手动关联的方法。手动关联的一般步骤如下:
1)录制两份脚本,保证业务流程和使用的数据相同。
2)使用WinDiff工具比较两份脚本,对两份脚本中不同的地方进行判断,找到需要关联的数据。(Tools>compare with Script)
3)找到左边界和右边界字符串,写出关联函数。
web_reg_save_param(“关联名”,”LB=”,”RB=”,LAST); 放在前面
4)在脚本中‘需要关联的数据’前面插入关联函数。
5)用关联函数中定义的参数取代脚本中‘需要关联的数据’。
==如果配置的字符有" 等需要转义的要在其前面加==
例如:

	web_reg_save_param("verify",
		"LB=type=\"hidden\" name=\"verify\" value=\"",
		"RB=\" />",
		LAST);

当关联的时候,发现左右边界值有多个相同的时候,想要选择其中一个,可以配置ORD

web_reg_save_param("verify",
		"LB=type=\"hidden\" name=\"verify\" value=\"",
		"RB=\" />",
		"ORD=1",    //1代表取第一个
		LAST);

调试代码时使用 lr_output_message(lr_eval_string("{自己设置的值}")); 打印出关联的值是否正确

Here Insert Picture Description
4.其他
前面讲解了插入事务、插入集合点、参数化、建立关联的方法,一般的脚本都需要做以上几项的修改工作。此外,还可以通过插入注释、插入检查点来完善脚本。另外脚本出现问题了,也可以通过打印信息来调试脚本。
插入注释:在脚本中插入注释,可以清晰找到需要修改的位置,增强脚本的可读性。(单行//,多行/* */)

插入检查点:在脚本中设置检查点函数,将返回值的结果反映在Controller的状态面板上和Analysis统计结果中,由此可以判断数据传递的正确性。
web_reg_find(“”,LAST);
Here Insert Picture Description
在VuGen中,选择 Vuser=>Run-time Settings,可以设定脚本回放过程的一些参数。如Iteration Count (迭代次数)、Think Time (思考时间)、Error Handling(错误处理)、Multithreading(运行方式)等。
RunLogic
1、Iteration Count (迭代次数)
选择General:Run Logic
说明:设定每个Action的迭代次数。
Init 和 End不迭代,只运行1次
Here Insert Picture Description
Here Insert Picture Description
第1个意为第1次迭代结束后立即开始第2次迭代(完成后马上迭代
第2个意为2次迭代直接有一个随机的时间间隔(迭代完成后间隔时间
第3个意为2次迭代之间有固定的间隔时间 (迭代运行时间+间隔时间

Think Time (思考时间)
选择General:Think Time
说明:设定脚本回放时对思考时间的处理方式。
Here Insert Picture Description
Ignore think time
脚本回放时,将不执行lr_think_time()函数,这样会给服务器产生更大的压力。

Replay think time
脚本回放时,执行lr_think_time()函数,具体执行方式有一下3种:
1)按照录制时获取的think time值回放。
2)按照录制时获取值的整数倍数回放脚本。
3)制定一个最大和最小的比例,按照两者之间的随机值回放脚本。
Limit think time to 选项,用于限制think time的最大值,脚本回放过程中,如果发现有超过这个值的,用这个最大值替代。

Error Handling(错误处理)
选择General:Miscellaneous
说明:设定遇到错误时的处理方式。
Here Insert Picture Description
Continue on error
遇到错误时继续运行。
Fail open transactions on lr_error_message
执行到事务中调用的lr_error_message()函数时将事务的结果置为Failed。
Generate snapshot on error
对错误进行快照。

4.Multithreading(运行方式)
选择 General:Miscellaneous
说明:设定脚本是以多线程方式运行还是以多进程方式运行。
Here Insert Picture Description
Run Vuser as a process
以多进程方式运行。
Run Vuser as a thread
以多线程方式运行。
一般会选择把虚拟用户当做进程来处理,因为系统上线后,用户的操作都是以进程的方式进行。
进程:运行的程序,占资源,1:50,独立运行安全性好,
线程:进程的最小执行单位,占资源少共享进程资源,资源征用

1. After the script finished recording, press the F5 key, or click on the menu Here Insert Picture Descriptionbutton, you can try to run the script. VuGen during playback synchronization print log (RepalyLog) below.
Here Insert Picture Description
2. browser settings
Here Insert Picture Description

3. If you need to see a different form of logs, you can vuser Scripts menu => runtime-settings => different log option, will print at different levels of the log when you play back the script.

Here Insert Picture Description
4. After the run, the system will give corresponding results of the operation can be => Test Results review playback results View.
After playback automatically open TestResult settings:
Tools>GeneralOptions>Replay>afterReplay选择visualtestresults
Here Insert Picture Description
Try running the script in VuGen role, mainly script to see whether the normal recorded by, if there are problems, the system will give prompt information, and to locate the error line, easy for users to find the error, revise and improve the test scripts.
(Error reasons: Syntax error (missing semicolon or a comma or a word wrong or wrong function)
after complete == script revision is complete, the script in a meaningful word naming convention is stored in a directory among ==.

Sign up script

Action()
{
/*
	多行注销方法
    */

//打卡首页
	web_url("webtours",
		"URL=http://192.168.1.102:1080/webtours",
		"TargetFrame=",
		"Resource=0",
		"RecContentType=text/html",
		"Referer=",
		"Snapshot=t29.inf",
		"Mode=HTML",
		LAST);

	web_url("header.html",
		"URL=http://192.168.1.102:1080/webtours/header.html",
		"TargetFrame=",
		"Resource=0",
		"RecContentType=text/html",
		"Referer=http://192.168.1.102:1080/webtours/",
		"Snapshot=t30.inf",
		"Mode=HTML",
		EXTRARES,
		"URL=http://www.bing.com/favicon.ico", ENDITEM,
		LAST);

	web_url("welcome.pl",
		"URL=http://192.168.1.102:1080/webtours/welcome.pl?signOff=true",
		"TargetFrame=",
		"Resource=0",
		"RecContentType=text/html",
		"Referer=http://192.168.1.102:1080/webtours/",
		"Snapshot=t31.inf",
		"Mode=HTML",
		EXTRARES,
		"URL=../favicon.ico", ENDITEM,
		LAST);

	web_url("sign up now",
		"URL=http://192.168.1.102:1080/WebTours/login.pl?username=&password=&getInfo=true",
		"TargetFrame=",
		"Resource=0",
		"RecContentType=text/html",
		"Referer=http://192.168.1.102:1080/WebTours/home.html",
		"Snapshot=t32.inf",
		"Mode=HTML",
		LAST);

  //插入集合点,在有插入事务的情况下,放到事务之前  
	lr_rendezvous("集合");


	//插入开始事务
	lr_start_transaction("注册");

	//思考时间
	lr_think_time(1);

	//插入的检查点
	web_reg_find("Text=Thank you",
		LAST);

	web_submit_data("login.pl",
		"Action=http://192.168.1.102:1080/WebTours/login.pl",
		"Method=POST",
		"TargetFrame=info",
		"RecContentType=text/html",
		"Referer=http://192.168.1.102:1080/WebTours/login.pl?username=&password=&getInfo=true",
		"Snapshot=t33.inf",
		"Mode=HTML",
		ITEMDATA,
		"Name=username", "Value={username}", ENDITEM,  //用户名,参数化
		"Name=password", "Value={password}", ENDITEM,   //密码
		"Name=passwordConfirm", "Value={password}", ENDITEM,  //确认密码
		"Name=firstName", "Value=", ENDITEM,
		"Name=lastName", "Value=", ENDITEM,
		"Name=address1", "Value=", ENDITEM,
		"Name=address2", "Value=", ENDITEM,
		"Name=register.x", "Value=64", ENDITEM,
		"Name=register.y", "Value=1", ENDITEM,
		LAST);

	//插入结束事务
	lr_end_transaction("注册", LR_AUTO);

return 0;
Published 44 original articles · won praise 1 · views 1437

Guess you like

Origin blog.csdn.net/cc_park/article/details/104175336