1、loadrunner脚本录制:web_add_cookie函数
LR使用web_add_cookie函数进行cookie模拟
1、为什么要使用cookie模拟
从日常项目测试过程中的问题说起。比如要进行论坛中的文件下载功能的测试。我们都知道只有登录用户才能进行下载操作,这样我们的测试过程可能就变成了先登录系统,然后再进行下载操作。在使用loadrunner设计脚本时就要先在初始化部分写登录脚本,然后再action中写下载操作,当单个用户运行时我们可能看不到什么问题。当用户并发量较多时,问题马上暴露出来了。大部分用户可能很长时间也没有下载成功,大量的初始化登录操作已经给系统造成了很大的压力,而在日常访问中,这种大量短时间登录的压力是不容易出现的。这样的测试结果可能无法达到我们的测试目标。的确,不能处理较大的登录吞吐可能已经是系统的瓶颈了,我们可以通过这种全流程的测试方式发现登录的问题。但是后续的测试我们可能就无法进行下去了。当项目组解决了登录的吞吐问题时,可能项目工期已经十分紧张了,再进行重要的下载功能测试可能已经太晚了。这种情况在测试过程中经常会出现,我们要如何绕过登录尽早的进行后续的下载操作呢?如果网站使用了cookie的机制,则我们可以尝试使用下面的方法。
2、怎么使用loadrunner模拟Loadrunner的web函数中提供了几个关于cookie的函数。
web_remove_cookie()
web_add_cookie()
web_cleanup_cookies();
web_reg_add_cookie();
这里我们为了模拟cookie绕过登录使用
web_add_cookie();
首先获取网站留在客户端上的cookie都存储了什么。通常主要内容包括名字,值,过期时间,作用域和路径,分为会话cookie和文件cookie。
会话cookie存储在内存里,关闭浏览器后就没有了,这种很难模拟。文件cookie是将cookie信息写到硬盘上,关闭浏览器再次打开后仍可以使用。我们要模拟的就是这种存储在硬盘文件里的cookie。
我们观察cookie文件的内容,如果使用ie的话,在“C:\Documents and Settings\用户名\Local Settings\Temporary Internet Files”中的用户名@域名的文件里,cookie存储都是加密的,所以我们直接看并看不出什么特别的东西,也搞不清楚具体是什么。这时我们借助IE webdeveloper 工具获取cookie值如下所示:
cdb_cookietime=2592000;cdb_smile=1D1; cdb_sid=71WKOd;
cdb_auth=TzsVl16XRFahjqkfuWyoF5OzI%2BrekHgiy0YXJd8m1y9vq6aV4bg3GGMsa9s;
cdb_visitedfid=20; cdb_onlineusernum=28
获得了cookie信息后,我们进行编辑loadrunner脚本。将cookie每个分号分行,使用UltraEdit进行列模
式操作,在每句后面加上域名。(域名在webdeveloper的Attributes下也可以找到domain对应值),修改完成后如下。
web_add_cookie("cdb_cookietime=2592000;domain=172.16.1.3");
web_add_cookie("cdb_smile=1D1;domain=172.16.1.3");
web_add_cookie("cdb_sid=71WKOd;domain=172.16.1.3");
web_add_cookie("cdb_auth=TzsVl16XRFahjqkfuWyoF5OzI%2BrekHgiy0YXJd8m1y9vq6aV4bg3GGMs
a9s;domain=172.16.1.3");
web_add_cookie("cdb_visitedfid=20;domain=172.16.1.3");
web_add_cookie("cdb_onlineusernum=28;domain=172.16.1.3");
把这些值放在要访问的url的web函数之前,你就可以绕过登录进行后续操作了。如:
Action()
{
web_add_cookie("cdb_cookietime=2592000;DOMAIN=172.16.1.3");
web_add_cookie("cdb_smile=1D1;DOMAIN=172.16.1.3");
web_add_cookie("cdb_oldtopics=D280D39523D39418D;DOMAIN=172.16.1.3");
web_add_cookie("cdb_sid=eSuWgw;DOMAIN=172.16.1.3");
web_add_cookie("cdb_auth=TzsVl16XRFahjqkfuWyoF5OzI%2BrekHgiy0YXJd8m1y9vq6aV4bg3GGMs
a9s;DOMAIN=172.16.1.3");
web_add_cookie("cdb_visitedfid=20;DOMAIN=172.16.1.3");
web_url("cookies",
"URL=http://172.16.1.3:8080/bbs/index.php",
"referer=http://172.16.1.3/newiweb/index/dealIndex.do?action=Index",
"Mode=HTML",
"RecContentType=text/html",
LAST
);
return 0;
}
最后注明一下:
loadrunner的web录制功能是自动的增加cookie的,只要在cookie不过期的情况下,我们不需要手工的增加cookie,当出现录制不上或录制的值发生变化时可以手工进行添加。在loadrunner场景设计使用其他负载机器时,同样可以使用你本机的这个cookie值进行,不会因为客户端机器发生变化而产生影响。
2、Loadrunner脚本录制:web_url函数
web_url
功能:Load指定web页面。
语法:
Int Web_url(const char *name, const char * url, <Lists of Attributes>, [EXTRARES,<Lists of Resource Attributes>,LAST)
返回值:
成功时返回LR_PASS (0),失败时返回 LR_FAIL (1)。
参数:
Name:VuGen中树形视图中显示的名称,在自动事务处理中也可以用做事务的名称。
url:页面url地址。
List of Attributes:(支持下列属性)
1、TargetFrame
2、TargetBrowser or TargetBrowserOrdinal
3、RecContentType-在录制期间响应的报头文本类型(text/html, application/x- javascript),这是为了确认目标URL是否是可录制的资源。
4、Referer - 要提交页面请求的URL .(获得当前页面,如果明确指出了位置,那么这个属性无效或者忽略。URL中写明了,要获取的页面)
5、Resource - 指定一个值说明这个URL是否是一个资源,0 表示不是资源,1 表示是资源
6、Snapshot-快照,快照文件名称,用来关联用的。
7、Mode-录制的等级,是否是HTML或者HTTP模式。
EXTRARES:分隔符,表示下列列表,是由script、active、java applet、flash产生的请求(具体设置在,Recorded options --Recording--选择 html base scritp --- html Reccorded 可以设置是否需要录制这些东西。)。
List of Resource Attributes:下载的资源属性
URL |
The URL (Uniform Resource Locator) of the web resource to load |
Referer |
The URL of the referring web page. |
ENDITEM |
A marker that indicates the end of each resource in the list. |
LAST:属性列表结束的标记符。
说明:
1、Web_url根据函数中的URL属性加载对应的URL,不需要上下文。2、可以使用web_url 模拟从FTP服务器上下载文件。web_url 函数会使FTP服务器执行文件被真实下载时的操作。除非手工指定了"FtpAscii=1",下载会以二进制模式完成。
3、在录制选项中,Toos—Recording Option下,Recording选项中,有一个Advanced HTML选项,可以设置是否录制非HTML资源,只有选择了“Record within the current script step”时,List of Resource Attributes才会被录制到。非HTML资源的例子是gif和jpg图象文件。
4、通过修改HTTP头可以传递给服务器一些附加的请求信息。使用HTTP头允许请求中包含其他的内容类型(Content_type),象压缩文件一样。还可以只请求特定状态下的web页面。
5、所有的Web Vusers ,HTTP模式下的WAP Vusers或者回放模式下的Wireless Session Protocol(WSP),都支持web_url函数。
3、Loadrunner脚本录制:web_link函数
【web_link】
语法:
Int web_link (const char *StepName, <List of Attributes>, [EXTRARES, <List of Resource Attributes>,] LAST );
返回值:
成功时返回LR_PASS (0),失败时返回 LR_FAIL (1)。
参数:
StepName:VuGen中树形视图中显示的名称,在自动事务设置中也被用做事务名称。
List of Attributes:支持下列的属性:
1.Text:超链接中的文字,必须精确匹配。
2.Frame:录制操作时所在的Frame的名称。
3.TargetFrame、ResourceByteLimit:见List of Attributes一节。
4.Ordinal:如果用给出的属性(Attributes)筛选出的元素不唯一,那么VuGen使用此属性来指定其中的一个。例如:“SRC=abc.gif”,“Ordinal=3”标记的是SRC的值是“abc.gif”的第3张图片。
EXTRARES:表明下面的参数将会是list of resource attributes了。
Snapshot:snapshot文件名(扩展名 inf),correlation时候用。快照,快照文件名称
LAST:结尾标示符。
4、Loadrunner脚本录制:web_web_submit_form函数
【web_submit_form】
语法:
Int web_submit_form (const char *StepName, <List of Attributes>, <List of Hidden Fields>, ITEMDATA, <List of Data Fields>, [ EXTRARES, <List of Resource Attributes>,] LAST );
返回值
成功时返回LR_PASS (0),失败时返回 LR_FAIL (1)。
参数:
StepName:Form的名字。VuGen中树形视图中显示的名称,在自动事务处理中也可以用做事务的名称。
List of Attributes:支持以下属性:
1.Action:Form中的ACTION属性,指定了完成Form中的操作用到的URL。也可以使用“Action/sfx” 表示使用此后缀的所有Action。
2. Frame:录制操作时所在的Frame的名称。
3.TargetFrame、ResourceByteLimit:见List of Attributes的同名参数。
4.Ordinal:参见Web_link的同名参数。
5、Loadrunner脚本录制:web_web_submit_data函数
【web_submit_data】
功能:这个函数以GET and POST requests 方式发送form。
例如:
web_submit_data("customerinfo.asp",
"Action=http://lazarus/webflight/customerinfo.asp",
"Method=POST",
"TargetFrame=",
"EncType=multipart/www-urlencoded"
"RecContentType=text/html"
ITEMDATA,
"name=flight", "value=6593", ENDITEM,
"name=reserveFlight", "value=Next >",ENDITEM,
LAST);
1、Action.c(352): 错误 -27492: “HttpSendRequest”失败,Windows 错误代码=12002,且已超出 URL="http://tns.simba.taobao.com/?name=itemdsp&o=j&tanxdspv=http%3A%2F%2Frdstat.tanx.com%2Ftrd%3Ff%3D%26k%3Da09e279ad7f7a12a%26p%3Dmm_23345481_2331600_31554537%26pvid%3D0a6743620000567a4c454c5b00ef8563%26s%3D238x298%26d%3D59420271%26t%3D1450855493pid&tp=3&tsid=0a6743620000567a4c454c5b00ef8563&u=http%3A%2F%2Fhao.rising.cn%2F&r=&pid=mm_23345481_2331600_31554537&count=18&p4p=jsonp0iiihvkwk" 的重试限制(0)
2、Action.c(287): 错误 -26612: 对于“http://entry.baidu.com/rp/home?type=flowbar&fixed_tpl=2&di=u2206792&rsi0=auto&rsi1=50&n=1&title=%E7%91%9E%E6%98%9F%E5%AE%89%E5%85%A8%E7%BD%91%E5%9D%80%E5%AF%BC%E8%88%AA%EF%BC%8D%E5%B8%B8%E7%94%A8%E7%BD%91%E5%9D%80%E5%A4%A7%E5%85%A8%EF%BC%8C%E4%B8%8A%E7%BD%91%E5%B0%B1%E4%BB%8Ehao.rising.cn%E5%BC%80%E5%A7%8B<u=http%3A%2F%2Fhao.rising.cn%2F&ref=&pageWidth=763&pageHeight=452&t=1450855452801&rsi0=763&rsi1=50”,HTTP 状态代码=500 (Internal Server Error)
3、
4、