在进行压力测试过程中,经常会涉及到下载文件并保存的过程。至于如何用LoadRunner来实现,网上的资料很多,但是方法都一样的。大体的逻辑如下:
1、 用web_reg_save_param函数获取所有的返回内容
2、 用web_get_int_property函数拿到服务器返回的大小
3、 用fwrite函数将数据流写入到指定目录的文件中。
详细代码如下:
于是我也copy了下,这个脚本下载了搜狗浏览器,并保存到本地。运行一下,坐等下载结果。
咦?报错了,看了下,原来是设置的下载超时时间太短,实际下载时间超过120s了。果断打开配置改了下
找到run-time settings→prefences→advanced opinion后,将step download timeout(sec)的值改为1000(最大值),重新运行了下:
运行成功了,去对应目录运行下
擦~怎么安装包损坏了?果断下载一个官网的正常的包,对比下md5值看下
可以看出
1、 md5和官网的不一样
2、 通过LR下载的包比正常的包多了两百多字节。
果断通过compare对比下两个包的16进制。
发现前面所有的数据都一样,只是LR下载的包最后多加了一些空字符。于是可以定位,是fwrite函数中传的文件长度长了。
看下脚本: flen = web_get_int_property(HTTP_INFO_DOWNLOAD_SIZE);
难道是这个长度获取的长了?
到网上查了下,原来HTTP_INFO_DOWNLOAD_SIZE是计算body和header的大小。咱们需要的只是body,原来如此~~~
既然这个函数统计的结果不准确,只能重新找方法统计大小了。
于是想到了LR还有一个函数可以自己计算大小:web_save_param_length()
重新修改了下脚本:
重新跑一边。发现下载下来的文件长度正确了,和官网正常下载的包一致。
至此,此问题完满解决。
总结一下:
1、 网上的东西即使都用的同样的方法,也未必正确。
2、web_set_max_html_param_len 这个能小则小,很烧内存的
3、 fopen函数分txt读写和二进制流读写,如果以txt读写方式写二进制文件,也会报错。具体参数列表可以参见http://blog.chinaunix.net/uid-20622737-id-1913086.html