LoadRunner下载文件的实验

发表于:2007-9-11 14:22

字体: | 上一篇 | 下一篇 | 我要投稿

 作者:ppent    来源:ppent的博客

        今天用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来作为文件本身的大小。 

        我能想到的可行的解决方案是:针对不同的文件采用不同的方法,如果需要在脚本中判断文件类型的话,可以针对下载文件的文件名后缀决定采用何种方式。
《2023软件测试行业现状调查报告》独家发布~

关注51Testing

联系我们

快捷面板 站点地图 联系我们 广告服务 关于我们 站长统计 发展历程

法律顾问:上海兰迪律师事务所 项棋律师
版权所有 上海博为峰软件技术股份有限公司 Copyright©51testing.com 2003-2024
投诉及意见反馈:webmaster@51testing.com; 业务联系:service@51testing.com 021-64471599-8017

沪ICP备05003035号

沪公网安备 31010102002173号