脚本开发-文件下载

by:授客 QQ1033553122

下载简介

对 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,告诉服务器我是从哪个页面链接过来的,服务器籍此可以获得一些信息用于处理。

loadrunner 脚本开发-文件下载的更多相关文章

  1. loadrunner 脚本开发-参数化之将内容保存为参数、参数数组及参数值获取

    转自:http://blog.sina.com.cn/s/blog_13cc013b50102v49c.html(查看原文) 在VuGen中默认使用{}的字符串称为参数 注意:参数必须在双引号中才能用 ...

  2. Loadrunner脚本开发规范

    Loadrunner脚本开发规范 目录 1.一般约定... 3 2.代码注释约定... 4 3.格式化代码... 5 1.一般约定 1.1具体脚本规则,必须在具体代码中加注释,以便脚本开发人员阅读和理 ...

  3. Loadrunner脚本开发-基于HTTP协议的流媒体视频在线播放服务器性能测试

    脚本开发-基于HTTP协议的流媒体视频在线播放服务器性能测试 by:授客 QQ:1033553122   目的 实现基于http协议的流媒体在线视频播放,服务器性能测试脚本,模拟用户浏览器方式在线播放 ...

  4. Loadrunner 脚本开发-利用loadrunner开发Windows Sockets协议脚本

    脚本开发-利用loadrunner开发Windows Sockets协议脚本 by:授客 QQ:1033553122 欢迎加入软件性能测试交流QQ群:7156436 实践举例 Socket服务端简单实 ...

  5. Loadrunner 脚本开发-利用Loadrunner生成Web service测试脚本

    脚本开发-利用Loadrunner生成Web service测试脚本 1.选择协议--Web Service,如下图 2.导入服务 入口1:点击Manage Services ->弹出窗中选择“ ...

  6. loadrunner 脚本开发-执行操作系统命令

    脚本开发-执行操作系统命令 by:授客 QQ:1033553122 思路: 用loadrunner system()函数 函数原型: int system( const char *string ); ...

  7. loadrunner 脚本开发-基本知识

    脚本开发-基本知识 1)编码工具设置 自动补全输入Tools->General Options->Environment->Auto complete word 显示功能语法Tool ...

  8. Loadrunner 脚本开发-利用web_submit_data函数实现POST请求

    脚本开发-利用web_submit_data函数实现POST请求   by:授客 QQ:1033553122 概述 web_link()和web_url()函数都是页面访问型函数,实现HTTP请求中的 ...

  9. Loadrunner 脚本开发-从文件读取数据并参数化

    脚本开发-从文件读取数据并参数化 by:授客 QQ:1033553122   直接上代码: char* testfn() { int count, total = 0; //char buffer[1 ...

随机推荐

  1. 一个简单的C语言题背后的故事

    最近看到了一个C语言问题,是要计算出这个函数的输出: #include <stdio.h> int Test(int x,int y, int z){ printf("x,y,z ...

  2. Spring Boot Runner启动器

    Runner启动器 如果你想在Spring Boot启动的时候运行一些特定的代码,你可以实现接口ApplicationRunner或者CommandLineRunner,这两个接口实现方式一样,它们都 ...

  3. Java架构师最关键三个思维转变方式,框架的合理运用

    很久没有写思维的文章,特别是在写完思维的逻辑和思维的框架后,对于理论层面的自己也不太想写,但是对于实际案例层面的写起来又比较花时间,而且案例基本在IT专业领域不是所有人都能看明白. 我们前面写过思维的 ...

  4. http协议返回码

    有五种可能取值:1xx:指示信息--表示请求已接收,继续处理2xx:成功--表示请求已被成功接收.理解.接受3xx:重定向--要完成请求必须进行更进一步的操作4xx:客户端错误--请求有语法错误或请求 ...

  5. linux日常运维常用命令

    ---查看端口占用 netstat -ap | grep 8000 ---重启nginx sudo /usr/sbin/nginx -c /usr/local/nginx/conf/nginx.con ...

  6. 函数isNaN() parseFloat() parseInt() Math对象

    isNaN() 定义和用法 isNaN() 函数用于检查其参数是否是非数字值. isNaN(x) x 是特殊的非数字值 NaN(或者能被转换为这样的值) console.log(isNaN(NaN)) ...

  7. CentOS 安装 kafka

    首先确保JDK已正确安装并设置好环境变量 安装Zookeeper 到官网下载: https://mirrors.tuna.tsinghua.edu.cn/apache/zookeeper/ zooke ...

  8. ClickHouse之初步认识

    最近在Percona的blog上看到一篇文章:Column Store Database Benchmarks: MariaDB ColumnStore vs. Clickhouse vs. Apac ...

  9. [TensorFlow] Introducing TensorFlow Feature Columns

    Welcome to Part 2 of a blog series that introduces TensorFlow Datasets and Estimators. We're devotin ...

  10. Java对日期Date类进行日期加减运算,年份加减,月份加减

    package com.cy; import java.security.InvalidParameterException; import java.text.ParseException; imp ...