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: 转载技术资料

 

评分:0

我来说两句

Open Toolbar