今天用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
但是,用该方式却又无法正确下载二进制文件,估计对于二进制文件不能用该方式来获取文件大小,目前没有两全其美的方法,希望有朋友可以指点迷津。
脚本如下:
{
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;
}