1、loadrunner工作原理
通过通过agent进程监视各种协议的client和server的通信。
三个action的区别
init(有50个用户,并发50个,可以在init里面参数化(只取一次))和end不进行迭代
只有action才能迭代(参数放在action参数化才有作用)
HTML与URL的区别
HTML(基于浏览器):录制的代码只会生成一个函数,代码看起来会比较简洁
user action:
脚本中的每一个函数直接对应用户的一个操作,创建的函数主要有URL(web_url)、link(web_link)、image(web_image)以及表单提交(web_submit_form)等;
基于解释用户行为的脚本,注重描述用户做了什么操作,脚本简洁,基于用户操作模拟,且自身包含了对象检查过程,无需校验。
URLs:
将所有的URL、link、image都用web_url函数同一处理,在表单提交时则用web_submit_data来处理。以至脚本没有user action直观,但如果网页中存在较多相似类型的链接时,urls更容易处理脚本中的参数化和关联问题。
这种方式不考虑用户的操作,只考虑客户端发送的请求,注重于系统实际上做了什么。
URL(基于C/S架构、javascript、HTTPS):
基于URL请求,每个操作都会有一个函数,生成多个函数,不会有遗漏,接近于请求-响应模式
两种录制的优缺点
HTML-based优缺点:
1)资源从内存中取出且在回放是下载。因此脚本更小且更容易阅读;
2)由于只有较少的硬编码脚本,因此只有较少的动态值需要关联;
3)可以插入图片检查之类的语句以检查结果是否正确;
4)因为HTML模式回放时需要积极地解析返回的信息,因此可能会比其他录制模式更加占用资源。
URL-based优缺点:
1)适用于非browser的应用程序;
2)录制来自sever的所有请求和资源,甚至抓取非HTML应用程序,因此需要做更多关联,脚本看起来也相当复杂。
综上,两种录制的选择
1、基于浏览器的应用程序推荐使用HTML-based script,使用HTTP的非web应用推荐使用URL-based script;
2、如果基于浏览器的应用程序中包含了javascript且该脚本向服务器发送了请求,也使用URL-based script;
3、基于浏览器的应用程序中使用了HTTPS安全协议,使用URL-based script。
函数:
web_url(主要用在get请求中):
int web_url( const char *StepName, const char *url, <List of Attributes>, [EXTRARES, <List of Resource Attributes>,] LAST );
name:请求内容名
url:请求内容地址
List of Attributes:(支持下列属性)
1)TargetBrower or TargetBrowserOrdinal
2)TargetFrame -浏览器打开方式,打开新窗口、顶部、底部、打开父进程
3)Resource -指定一个值说明URL是否是一个资源,0-不是资源,1-是资源
4)RecContenType -在录制期间响应的报头文本类型(test/html,application/x-JavaScript),确认目标URL是否是可录制的资源
5)Referer -要提交页面请求的URL(获得当前页面,如果明确指出了位置,那么这个属性无效或者忽略。URL中写明了,要获取的页面)
6)Snapshot -快照,快照文件名,用来关联用的
7)Mode -录制的等级,是否是HTML或者HTTP模式。
List of Resource Attributes:下载的资源属性
1)URL -通过URL地址(资源统一定位器)要下载的web资源
2)Referer -发送下载请求的页面。eg:一个swf要下载一个图片,那么swf就是referer
3)ENDITEM -列表中每个资源的结束标志
返回值:成功时返回LR_PASS(0),失败时返回LR_FAIL(1)。
EXTRARES后的资源是由script、active、Java applet、flash、CSS产生的请求
可以使用web_url模拟从ftp服务器上下载文件。web_url函数会使ftp服务器执行文件被真实下载的操作。除非手工制定了"FtpAscii=1",下载会以二进制模式完成。
Record within the current script step控制是否录制非HTML资源,勾选后List of Resource Attributes才会被录制到。非HTML资源有gif、jpg图像文件等。
Web_submit_data:不需要上下文依赖(form表单)
定义:web_submit_data函数处理无状态或上下文无关的表单提交。用来生成表单的get或post请求,这些请求与form自动生成的请求是一样的。发送这些请求时不需要表单上下文。
int web_submit_data( const char *StepName, const char *Action, <List of Attributes>, ITEMDATA, <List of data>, [ EXTRARES, <List of Resource Attributes>,] LAST );
name -树形视图中显示名称or自动事务处理中事务名称
Action -form中的action属性,执行表单提交的URL地址,Action=<urlAddress>;
List of Attributes:(支持下列属性)
1)Method -表单提交方法:post或get(默认post)
2)EncType -编码方式。EncType属性给出一个内容类型,指定其作为"Content-Type"请求头的值。指示了根据参数生成HTTP请求时使用的编码类型(URL-encoding、multi-part两种),可以是如下格式
a)"EncType=application/x-www-form-urlencoded"(默认编码格式,不能用于文件上传);
b)"EncType=multipart/form-data"(设置表单的MIME编码,以二进制传递数据,能完整的传递文件数据,进行下面的操作。【所有";boundary="都会被默认忽略】form里面的input的值以二进制的方式传递。)
c)"EncType="(空字符串,表明没有产生内容类型("Content-Type")请求头)
3)EncodeAtSign -是否使用ASCII值对符号"@"进行编码,取值有YES、NO
4)TargetFrame -包含当前链接、资源的Frame名称
5)Referer -被当前页引用的页面,要提交页面请求的URL(如指向当前页面的位置被具体指明,则该属性可省)
6)Mode -录制模式(HTML、HTTP)
7)ITEMDATA -属性和数据列表的分割标记,在Java语法中不可用
List of Data -数据域列表定义了表单提交的内容。由于此请求是上下文无关的,因此数据域包含了所有的隐含域。使用form的编码规则组织数据域。数据域列表可使用如下格式之一:
"name=n1","value=v1",ENDITEM
"name=n2","EncrypledVlue=qwerty",ENDITEM
EXTRARES -分隔符,表示下列列表是由script、active、java applet、flash产生的请求(可在下图处设置)
上图选项可设置是否录制非HTML资源,选择后List of Resource Attributes才会被录制。非HTML资源有gif、jpg等图像文件。
List of Resource Attributes
URL -通过URL地址(资源统一定位器)下载的web资源
Referer -发送下载请求的页面,eg:一个swf要下载一个图片,那么swf就是referer
ENDITEM -列表中每个资源的结束标识符
返回值:成功时返回LR_PASS(0),失败时返回LR_FAIL(1)。
注:
1、当VuGen设为基于URL的录制,或基于HTML且选择URLs时,web_submit_data函数才会录制到;
2、不论get还是post,web_submit_data函数都指示出form中的数据是如何发送到服务器的;
3、如VuGen处于HTTP模式,此时记录web进程是,会产生此函数。在提交form时,如果无法生成web_submit_form函数,VuGen也会生成web_submit_data函数;
4、任何对于"EncType"的指定都会覆盖web_add_[auto_]header函数指定的Content-Type。当省略了"EncType"时,任何一个web_add_[auto_]header函数都会起作用。如既没有指定EncType也没有web_add_[auto_]header函数,且"Method=POST","application/x-www-form-urlencoded"会作为默认值。其他情况下不会产生Content-Type请求头。
5、ContentType:文件类型标识符,如果"EncType=multipart/form-data"用来上传文件,需要用到"ContentType"。当在ITEAMATA中的Data子句中制定了"File=Yes",且文件也在此子句中,ContentType才使用,此时它会作为一个子句的值来传递。正常情况下,"Content-Type"头根据所上传文件的扩展名自动生成(待考证)。
6、"ContentType"如果指定为空,"Content-Type"头将不包含在文件中。如果没有显示的指定"ContentType"的值,上传文件时,不管扩展名是什么,都默认使用"application/x-www-form-urlencoded"作为"ContentType"的值,VuGen不会检查指定的ContentType是否有效。
7、通常情况下,如录制了web_submit_data函数,VuGen会把name和value一起录制到ITEMDATA中。如不想在脚本中明文显示value,可对其进行加密。把value改为 EncryptedValue,然后把录制到的值改为加密后的值。可参考web_submit_form函数。
Web_submit_form:有上下文依赖,才能提交
优点:减少了动态数据的捕获
缺点:在回放过程中,会消耗CPU资源
录制步骤:
1、选择协议(可咨询开发人员);
2、录制设置设定,如浏览器、URL、录制类型等;
3、优化脚本(去掉无用的东西,如过长的等待时间、过程中录入的其他应用程序等);
4、回放脚本