今天用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;
}