Loadrunder脚本篇——文件下载
下载简介
对 HTTP协议来说,无论是下载文件或者请求页面,对客户端来说,都只是发出一个GET请求,并不会记录点击后的“保存”、“另存为操作”。
如下,点击页面中tar.gz压缩包,用工具可以清楚的看到,客户端仅是发起了一个GET请求,请求获取点击的资源。接着服务器返回包含请求资源响应消息
LoadRunner记录了客户端发出的对文件的请求,并能够收到服务器返回的内容。因此,我们要做的额外工作就是“保存”、“另存为”---可以通过关联的方法获取服务器返回的内容,并写入文件保存即可。
注意:这里的要保存的内容为http的消息主体,也就是上述两箭头垂直相交形成区域的内容。
具体实例
如下,访问图示页面,并下载红色方框框选的压缩包
脚本主要由以下四个action组成,其中vuser_init,vuser_end的内容为默认值,未存放录制内容:
vuser_init
download_page
download_file
vuser_end
download_page,download_file的具体代码如下
// 访问下载页面
download_page()
{
web_url("dist",
"URL=http://tsung.erlang-projects.org/dist/",
"Resource=0",
"RecContentType=text/html",
"Referer=",
"Snapshot=t11.inf",
"Mode=HTML",
LAST);
return 0;
}
//录制下载操作
download_file()
{
int file_size; // 文件大小 //fwrite缓冲区大小
long file_handle = NULL; // 文件句柄
// 如果要保存的数据超过1024个字节,使用以下函数设置参数大小,保证参数可容纳要保存文件的大小
web_set_max_html_param_len("10000");
//将响应信息存放到 file_content参数
web_reg_save_param("file_content", "LB=", "RB=", "SEARCH=BODY", LAST);
web_link("idx-tsunami-0.1.1.tar.gz",
"Text=idx-tsunami-0.1.1.tar.gz",
"Snapshot=t12.inf",
LAST);
//获取响应文件大小
file_size = web_get_int_property(HTTP_INFO_DOWNLOAD_SIZE);
if(file_size > 0)
{
//以“二进制+写”的方式打开文件(如下,在d盘根目录下新建idx-tsunami-0.1.1.tar.gz文件
if((file_handle = fopen("d:\\idx-tsunami-0.1.1.tar.gz", "wb")) == NULL)
{
lr_output_message("文件操作失败!");
return -1;
}
//写入文件内容
fwrite(lr_eval_string("{file_content}"), file_size, 1, file_handle);
//关闭文件
fclose(file_handle);
}
return 0;
}
注意:
1.如下,从BODY,即消息主体中查找,不指定左右边界,即查找所有消息主体的内容
web_reg_save_param("file_content", "LB=", "RB=", "SEARCH=BODY", LAST);
2.上述的web_link手工改成如下的web_url也是可以的。
web_url("下载idx-tsunami-0.1.1.tar.gz",
"URL=http://tsung.erlang-projects.org/dist/idx-tsunami-0.1.1.tar.gz",
"Resource=0",
"RecContentType=application/x-gzip",
"Referer=http://tsung.erlang-projects.org/dist/",
"Snapshot=t12.inf",
"Mode=HTML",
LAST);
解说:
1. "URL=http://tsung.erlang-projects.org/dist/idx-tsunami-0.1.1.tar.gz",
此处的URL为指定资源下载地址,通常通过右键资源连接-->属性,可看到,如下图
2."Referer=http://tsung.erlang-projects.org/dist/",
这里的Referer指下载资源所引用的页面,Referer是HTTP header的一部分,当浏览器向web服务器发送请求的时候,一般会带上Referer,告诉服务器我是从哪个页面链接过来的,服务器籍此可以获得一些信息用于处理。
源码:
Action() {int flen;//定义一个整型变量保存获得文件的大小long fileContent;//保存文件句柄,也就是文件的内容char fileName[]="";//保存文件路径及文件名char * strNumber;web_set_max_html_param_len("20000");//设置参数的最大长度,注意该值必须大于文件的大小//使用关联函数获取下载文件的内容,在这里不定义左右边界,获得服务器响应的所有内容web_reg_save_param("fcontent", //返回的内容全部存储在fcontent这个参数中"LB=","RB=","SEARCH=BODY",LAST);lr_start_transaction("下载文件"); //设置的事务开始点//web_url方法你可以直接编写,也可以在启动录制的时候,输入下载链接URL进行简单录制,主要注意URL和Resource这两个参数即可;web_url("file.php", #函数名,没有实际作用"URL=http://forum.ubuntu.org.cn/download/file.php?id=129973&sid=78fc8d76767ef49b606595824ceb963d", //下载链接,也就是该链接输入到浏览器会提示下载,获取方法很多;"Resource=1", //1表示是下载资源,0表示是页面资源"RecContentType=application/octetstream","Referer=","Snapshot=t1.inf",LAST);flen = web_get_int_property(HTTP_INFO_DOWNLOAD_SIZE);//获取响应中的文件长度if(flen > 0){ //以写方式打开文件strNumber=lr_eval_string("{random}");//获取一个随机数并转化成字符串 ,NewParam设置参数为随机类型,这里根据自己需要进行参数化设置strcat(fileName,"F:\\test");//将路径保存到file变量中strcat(fileName,strNumber); //拼接文件名strcat(fileName,".pdf");//拼接后缀名,根据需要设置,最后就完成了完整的路径和文件名fileContent = fopen(fileName, "wb");if(fileContent == NULL) //看是否正确打开了需要保存下载内容的文件,fileName是上面准备组织的文件路径;{lr_output_message("打开文件失败!");return -1;}fwrite(lr_eval_string("{fcontent}"), flen, 1, fileContent);//写入文件内容fclose(fileContent);//关闭文件}lr_end_transaction("下载文件",LR_AUTO);//事务结束点return 0;}Loadrunder脚本篇——文件下载的更多相关文章
- Loadrunder脚本篇——关联数组(参数数组)
导言 前面说过可以用关联取出服务器相关的一些动态变化的信息,前面也提过web_reg_save_param中可以设置ord=all,代表从服务器中取出的是一个数组,它试用的场景是当我访问一个发帖网站, ...
- Loadrunder脚本篇——webservice接口测试(二)
1.选择协议--Web Service,如下图 2.导入服务 入口1:点击Manage Services ->弹出窗中选择“Import” ->弹出窗中选择“URL”,填写wsdl地址,导 ...
- Loadrunder脚本篇——webservice接口测试(一)
函数介绍 soap_request 函数执行一个SOAP请求 函数原型 int soap_request( const char *StepName, ExpectedResponse, URL, , ...
- Loadrunder脚本篇——web_submit_data实现提交post请求
概述 web_link()和web_url()函数都是页面访问型函数,实现HTTP请求中的GET方法,如果需要实现POST方法,可使用web_submit_form或web_submit_data() ...
- Loadrunder脚本篇——web_custom_request函数介绍
c语言版本: int web_custom_request(const char *RequestName, , [EXTRARES, ,] LAST ); 参数说明: RequestName ...
- loadrunder脚本篇——执行操作系统命令
思路: 用loadrunner system()函数 函数原型: int system( const char *string ); 示例一:在指定目录下创建指定文件 Action() { char ...
- loadrunder脚本篇——文件读写操作
函数说明 函数原型: size_t fwrite( const void *buffer, size_t size, size_t count, FILE *file_pointer ); 参数说明 ...
- Loadrunder脚本篇——Run-time Settings之Browser Enmulation
浏览器模拟 所有Internet Vuser Header包含一个标识将被模拟的浏览器类型(或无线工具包)的User Agent header.例如User-Agent: Mozilla/3.01Go ...
- Loadrunder脚本篇——Running Time setting之Additional attributes
作用说明 为Vuser脚本提供额外自定义参数.额外参数设置可应用于所有Vuser脚本类型. 说明: Add:添加一个参数 Remove:移除一个参数 可以在这里先输入一些常用的参数名及对应的值,类似常 ...
随机推荐
- python简单处理xml文件
Python若是想从xml里读点信息,用BeautifulSoup可能会容易一点,但是如果要修改xml,BeatifulSoup就搞不定了,其实直接用lxml就好. from lxml import ...
- gcc使用备忘
本文为原创文章,转载请指明该文链接 Options Controling the kind of Output -x language 明确说明输入文件的编码语言,没有该选项的话, gcc 会根据输入 ...
- plsql programming 10 日期和时间戳
年 月 日 时 分 秒 时区 用小时表示的相对于 UTC 的时差 用分钟表示的相对于 UTC 的时差 date 存储日期和时间, 不带时区, 精确到秒 timestamp 存储日期和时间, 不带时区, ...
- input type="file"文件上传时得到文件的本地路劲
<!DOCTYPE html><html><head> <meta charset="UTF-8"> <meta name=& ...
- load data导入数据之csv的用法
今天总结一下:csv格式文件导入的方法. 1.准备数据表:CSV
- hdu 3062+1824(2-sat入门)
题目链接:http://acm.hdu.edu.cn/showproblem.php?pid=3062 思路:根据矛盾关系连边(如果a与b矛盾,则连边a'->b,b'->a),然后强连通缩 ...
- 三个内置模块shutil logging hashlib config
高级的 文件.文件夹.压缩包 处理模块 shutil.copyfileobj(fsrc, fdst[, length])将文件内容拷贝到另一个文件中 1 import shutil 2 3 shuti ...
- java php 3des实现
php.java.android.ios通用的3des方法:http://blog.csdn.net/zcjwsrf/article/details/47659137 PHP使用3DES算法加密解密字 ...
- Python数据驱动ddt
import ddtimport unittest """ddt模块包含了一个类的装饰器ddt和两个方法的装饰器: data:包含多个你想要传给测试用例的参数: file ...
- 如何在MySQL客户端Navicat 上创建存储过程返回结果集
下述引用自<MySQL 必知必会> MySQL命令行客户机的分隔符 如果你使用的是MySQL命令行实用程序,应该仔细阅读此说明.默认的MySQL语句分隔符为;(正如你已经在迄今为止所使用的 ...