LoadRunner下载文件的实验
上一篇 /
下一篇 2008-09-11 13:43:04
/ 个人分类:转载技术资料
转载的一篇文章(收藏用,谢谢那位仁兄了)
今天用LoadRunner进行下载web网站上文件的试验,首先学习了关河Blog中的文章(用LoadRunner下载文件并保存到本地)写了个脚本,运行后却发现该脚本对于二进制文件类型(如rar、bmp等)下载正常,但对于文本文件类型(如txt、xml)等确有问题,问题在于对文件大小的判断问题。
在关河的脚本中,通过flen = web_get_int_property(HTTP_INFO_DOWNLOAD_SIZE);来获取要下载文件的大小。
对于二进制文件,运行日志:
web_link("aa.bmp ") highest severity level was "warning", 824 body bytes, 197 header bytes
flen:1021
文件大小1021字节,包括197字节的header和824字节的body
对于文本文件,运行日志:
web_link("test.xml") was successful, 277 body bytes, 203 header bytes
flen:480
下载生成的文件大小480字节,包括了227字节的body和字节203的header,打开该xml文件内容有错。其实真正的文件大小是227字节,就是body部分。
修改了脚本,把上面获取文件大小的语句改为flen = strlen(lr_eval_string("{fcontent}"));,只取body部分作为文件内容,结果就可以了。
运行日志:
web_link("test.xml") was successful, 277 body bytes, 203 header bytes
flen:277
但是,用该方式却又无法正确下载二进制文件,估计对于二进制文件不能用该方式来获取文件大小,目前没有两全其美的方法,希望有朋友可以指点迷津。
脚本如下:
Action()
{
int flen;
long filedes;
char filename[1024];
web_add_cookie("seraph.os.cookie=ElKlHkQmJlOkFjGjJi; DOMAIN=172.20.16.4");
web_set_max_html_param_len("1024000");
web_url("172.20.16.4:8080",
"URL=http://172.20.16.4:8080/",
"Resource=0",
"RecContentType=text/html",
"Referer=",
"Snapshot=t4.inf",
"Mode=HTML",
EXTRARES,
"Url=/styles/global.css", "Referer=http://172.20.16.4:8080/secure/Dashboard.jspa", ENDITEM,
LAST);
web_link("TEST-306",
"Text=TEST-306",
"Snapshot=t5.inf",
EXTRARES,
"Url=../styles/global.css", ENDITEM,
LAST);
web_reg_save_param("fcontent", "LB=", "RB=", "SEARCH=BODY", LAST);
web_link("test.xml",
"Text=test.xml",
"Snapshot=t6.inf",
LAST);
//获取文本类型的文件大小
flen = strlen(lr_eval_string("{fcontent}"));
//获取二进制文件类型的文件大小
//flen = web_get_int_property(HTTP_INFO_DOWNLOAD_SIZE);
lr_message("-----------------flen:%d",flen);
//生成随机的文件名称,便于并发
strcpy(filename,"d:\\123\\aa_");
strcat(filename,lr_eval_string("{Num}"));
strcat(filename,".xml");
if(flen > 0)
{
//以写方式打开文件
if((filedes = fopen(filename, "wb")) == NULL)
{
lr_output_message("Open File Failed!");
return -1;
}
//写入文件内容
fwrite(lr_eval_string("{fcontent}"), flen, 1, filedes);
//关闭文件
fclose(filedes);
}
return 0;
} web_get_int_property函数获得的是上一次web函数获得响应的总的大小(包括head和body部分),由于对二进制文件,返回的数据包是没有head部分的,因此得到的大小就是二进制文件的大小,可以用web_get_int_property函数得到的值作为该文件的实际大小,至于不能用strlen方式获得下载二进制文件的大小,原因是二进制文件的内容中肯定会出现'\0'这样的字符,导致strlen函数判断失败。
而对于Txt和XML等文件,返回的数据包中是包含head部分的,因此不能用web_get_int_property函数获得的download size来作为文件本身的大小。
我能想到的可行的解决方案是:针对不同的文件采用不同的方法,如果需要在脚本中判断文件类型的话,可以针对下载文件的文件名后缀决定采用何种方式。
收藏
举报
TAG:
转载技术资料