频 道 直 达 - 新闻 - 培训 - 软件 - 教程 - 前沿 - 组网 - 系统应用 - 安全 - 编程 - 存储 - 操作系统 - 数据库 - 服务器 - 专题 - 产品 - 案例库 - 读书 - 博客 - BBS
51CTO.COM_中国最大的网络技术网站
找资料:

5.18 如何下载并保存文件到本地

作者: 于涌 编著 出处:人民邮电出版社  2008-06-02 14:09    砖    好    评论   进入论坛
阅读提示:《软件性能测试与LoadRunner实战》一书在介绍软件性能测试概念的基础上,结合实际测试案例的剖析,重点讲解了LoadRunner工具的使用技巧和实战技术。本节讲的是如何下载并保存文件到本地。

5.18 如何下载并保存文件到本地

问题:

如何下载并保存文件到本地?

问题解答:

在进行一个人事代理系统项目开发过程中,因为委托单位人员能够上传和下载电子文件(如:学位照、身份证、护照或者其他Word、Excel、Pdf等格式的电子文件),为了模拟下载的场景,需要编写相关脚本。在HTTP协议中,没有任何一个方法或是动作能够标识“下载文件”这个动作,对HTTP协议来说,无论是下载文件或者请求页面,都只是发出一个GET请求,LoadRunner记录了客户端发出的对文件的请求,并能够收到文件内容。因此,完全可以通过关联的方法,从LoadRunner发出的请求的响应中获取到文件的内容,然后通过LoadRunner的文件操作方法,自行生成文件。您只需要对需存储的文件响应部分内容进行关联,并将这部分信息存储于变量。获得文件内容后,通过fopen,fwrite,fclose函数,就可以将需保存的内容保存成本地文件,这样就完成了文件下载操作。

下面以下载作者在UML软件工程组织上做的一次关于性能测试公开课讲稿为示例,讲述如何完成一个文件的下载过程。因为有好多人不清楚为什么参数化时用这个取值,而不用别的参数。您可以通过借助FlashGet工具或者鼠标右键点击“性能测试实践及其展望”链接查看需要下载文件属性等方式来了解脚本中相应参数的设置,从而完成下载操作。参见FlashGet和鼠标右键文件属性图示,大家可以看到文件下载的地址为“http://www.cnblogs.
com/Files/tester2test/xncssj.pdf”,引用地址为“http://www.cnblogs.com/tester2test/archive/2006
/08/28/487989.html”。

 

 

相应脚本代码:(DownloadFileScript)

#include "web_api.h"
Action()
{
int iflen;     //文件大小
long lfbody;  //响应数据内容大小
web_url("487989.html",
"URL=http://www.cnblogs.com/tester2test/archive/2006/08/28
/487989.html",
"Resource=0",
"RecContentType=text/html",
"Referer=",
"Snapshot=t2.inf",
"Mode=HTML",
EXTRARES,
"Url=http://www.vqq.com/vqq_inset.js?isMin=0&place=
RB&Css=2&RoomName=
5rWL6K+V6ICF5a625Zut6K665Z2b&encode=1&isTime=
0&width=350&height=
240&everypage=0", ENDITEM,
"Url=http://www.vqq.com/image/chat2.gif", ENDITEM,
LAST);
//设置最大长度
web_set_max_html_param_len("10000");
//将响应信息存放到fcontent变量
web_reg_save_param("fcontent", "LB=", "RB=", "SEARCH=
BODY", LAST);
web_url("下载页面",
"URL=http://www.cnblogs.com/Files/tester2test/xncssj.pdf",
"Resource=0",
"RecContentType=text/html",
"Referer=http://www.cnblogs.com/tester2test/archive/
2006/08/28/487989.html",
"Snapshot=t3.inf",
"Mode=HTML",
LAST);
//获取响应大小
iflen = web_get_int_property(HTTP_INFO_DOWNLOAD_SIZE);
if(iflen > 0) 
{
//以写方式打开文件
if((lfbody = fopen("c:\\性能测试实践及其展望.pdf", "wb"))
== NULL)
{
lr_output_message("文件操作失败!");
return -1;
}
//写入文件内容
fwrite(lr_eval_string("{fcontent}"), iflen, 1, lfbody);
//关闭文件
fclose(lfbody);
}
return 0;
}

【脚本分析】

首先,声明了两个变量iflen和lfbody分别存放,被下载文件大小和响应数据内容大小,链接到存放作者讲稿页面,相关脚本如下所示:

int iflen;     //文件大小
long lfbody;  //响应数据内容大小
web_url("487989.html",
"URL=http://www.cnblogs.com/tester2test/archive/2006/08/28/
487989.html",
"Resource=0",
"RecContentType=text/html",
"Referer=",
"Snapshot=t2.inf",
"Mode=HTML",
EXTRARES,
"Url=http://www.vqq.com/vqq_inset.js?isMin=0&place=RB&Css=2
&RoomName=
5rWL6K+V6ICF5a625Zut6K665Z2b&encode=1&isTime=0&width
=350&height=
240&everypage=0", ENDITEM,
"Url=http://www.vqq.com/image/chat2.gif", ENDITEM,
LAST);

然后,根据设置被下载文件的大小,设置最大长度,通过关联函数将被下载文件http://www.cnblogs.com/Files/tester2test/xncssj.pdf内容存放在fcontent变量,同时获得服务器响应文件下载数据信息大小,关于web_get_int_property函数的使用,您可以参看LoadRunner函数帮助了解相关内容。

//设置最大长度
web_set_max_html_param_len("10000");
//将响应信息存放到fcontent变量
web_reg_save_param("fcontent", "LB=", "RB=", "SEARCH=BODY",
LAST);
web_url("下载页面",
"URL=http://www.cnblogs.com/Files/tester2test/xncssj.pdf",
"Resource=0",
"RecContentType=text/html",
"Referer=http://www.cnblogs.com/tester2test/archive/2006/08/28
/487989.html",
"Snapshot=t3.inf",
"Mode=HTML",
LAST);
//获取响应大小
iflen = web_get_int_property(HTTP_INFO_DOWNLOAD_SIZE);

最后,将保存在变量的数据信息一一写入到指定命名文件中,在这里我们依然保存在“c:\性能测试实践及其展望.pdf”文件。相关代码是这样的,如果响应数据信息大小大于0个字节,则以写方式打开文件,如果出错则发出“文件操作失败!”提示信息,否则,将先前保存下载数据信息,写入到该文件,这样就完成了一个下载操作的完整工程。

if(iflen > 0) 
{
//以写方式打开文件
if((lfbody = fopen("c:\\性能测试实践及其展望.pdf", "wb"))
== NULL)
{
lr_output_message("文件操作失败!");
return -1;
}
//写入文件内容
fwrite(lr_eval_string("{fcontent}"), iflen, 1, lfbody);
//关闭文件
fclose(lfbody);
}

【作者提示】

1. 如果您不清楚如何确定要下载文件的原始链接,可以通过鼠标右键,单击“属性”察看被下载文件的数据源链接地址。

2. 文件操作完成之后,必须要进行释放工作(fclose),否则将会造成内存泄漏的情况。内存泄漏在一、两个用户操作可能后果不是很明显,但在做并发性测试或者持久性测试的时候,内存泄漏结果就会出现内存被逐渐被耗尽,最终导致系统崩溃的严重后果,所以大家一定要注意内存泄漏问题情况的发生。

【责任编辑:董书 TEL:(010)68476606】

回书目   上一节   下一节
专题
脚本攻击和防范
PHP+APACHE+MYSQL下载汇总
Oracle数据库技术实用详解:教你如何成为10g OCP
软件性能测试与LoadRunner实战
Oracle数据库精讲与疑难解析
我也说两句

匿名发表

(如果看不清请点击图片进行更换)


中 国 最 大 的 网 络 技 术 网 站 ·
技 术 成 就 梦 想
订阅技术快讯
电子杂志下载
名称:SQL Server数据库管理精品黄皮书
简介:书中文章经过精挑细选,便于用户能根据自己的实际工作和学习,快速在本书寻找到相关资料。内容涵盖了SQL Server的安装与升级、语句查询、数据备份和恢复、自动化任务、数据同步、数据字典、安全和预防、性能和优化、集群等各方面应用信息,以及DBA管理人员在数据库管理工作中
名称:2007路由技术大全
简介:《2007路由技术大全》由51CTO.com网站特别策划制作,该书包括路由器技术、路由器产品、路由器配置、安全设置、路由器故障处理、路由器密码恢复,以及广大网友在实践使用中的心得经验和技巧文章,内容注重实用性,适用于初学者入门,也适合多年从业者提高,是一本实践和理论完
名称:网络安全精品应用黄皮书
简介:《2007精品网络安全黄皮书》包括了9个大类24个小类, 800余篇文章,内容包含了熊猫烧香病毒、DDOS攻击、ARP病等热点问题的介绍及解决方案。从病毒查杀、防范、系统、数据等各方面的安全设置到黑客技术的了解、防范,涉及到了安全应用的全部领域, 由浅至深内容全面。
华为员工自杀频频拷问企业文化
华为员工自杀频频拷问企业文化
网络工程师的职业规划与生存现状
网络工程师的职业规划与生存..
充电计划之热门IT认证官方资料汇总
充电计划之热门IT认证官方资..
· 充电计划之热门IT认证..
· 勇闯IT培训黑色围城
· 如何有效防御SQL注入攻..
· 2008年上半年全国软考..
· 选择适合自己的IT认证
· IPv6协议--拓展网络无..
· 了解统一威胁管理(UTM)..
· 调查:十大发现 解秘技..
· 技术人求职简历完备手册
· Vista SP1对决XP SP3
· 运营商封堵ADSL共享 中..
· LAMP技术精解
· PHP开发应用手册
· 解析35岁技术人的价值..
· 汶川大地震 IT技术人在..
· SOA 面向服务架构
ARP攻击防范与解决方案
ARP攻击防范与解决方案
iSCSI应用与发展
iSCSI应用与发展
SQL Server 2008/2005全解
SQL Server 2008/2005全解
· SQL Server 2008/2005..
· SOA 面向服务架构
· SQL Server 2008/2005..
· iSCSI应用与发展
· RAID——磁盘阵列基础
· Apache技术专题
· 三层交换技术专题
· SQL Server入门到精通
· Apache技术专题
· 国际文档格式标准开战
· 路由器设置与口令恢复
· 打造安全服务器
· PHP开发应用手册
· SOA 面向服务架构
· 企业数据恢复指南
· 了解统一威胁管理(UTM)..
ARP攻击防范与解决方案
ARP攻击防范与解决方案
SQL Server 2008/2005全解
SQL Server 2008/2005全解
iSCSI应用与发展
iSCSI应用与发展
· iSCSI应用与发展
· SQL Server入门到精通
· SQL Server 2008/2005..
· SOA 面向服务架构
· Apache技术专题
· iSCSI应用与发展
· 三层交换技术专题
· Apache技术专题
· RAID——磁盘阵列基础
· 企业数据恢复指南
· 路由器设置与口令恢复
· SOA 面向服务架构
· 了解统一威胁管理(UTM)..
· 反垃圾邮件技术应用
· 访问控制列表(ACL)介绍
· PHP开发应用手册