LoadRunner下载文件脚本

在看普泽关于pezybase的测试报告的时候,发现里面有用到jmeter(http协议)并发测试下载文件,考虑到后面可能需要在公司pezybase的并发下载,把之前使用过的loadrunner下载文件脚本重新运行和整理一下。

  一、http协议

  loadrunner使用http协议是无法录制到下载过程的,只会往服务器发送一个下载请求,其实服务器已经把数据返回给客户端了,但是loadrunner是录制不到保存文件到本地这个过程,所以就是需要我们手动把收到的内容保存打本地即可。(http协议上传文件的完整过程是可以直接录制的,在UC中已经使用过)。

  注意:下面脚本中用到的LR函数如下,还使用了一些C语言基本的文件操作方法。在脚本中还可以加入一些判断来进行事务是否成功以及文件大小是否正确等的判断;

  web_reg_save_param:关联函数,放在http请求前面,保存请求返回的内容;

  web_url:http请求函数,向指定的url发送请求,下载文件也就是直接往下载链接发送请求;

  web_get_int_property:获取下载请求返回的文件长度;

  web_set_max_html_param_len:设置web_set_max_html_param_len方法中参数的最大长度,要求大于需要下载文件的大小;


Action() {

int flen;//定义一个整型变量保存获得文件的大小

long fileContent;//保存文件句柄,也就是文件的内容

char fileName[]="";//保存文件路径及文件名

char * strNumber;

strNumber=lr_eval_string("test{NewParam}");//获取一个随机数并转化成字符串 ,NewParam设置参数为随机类型,这里根据自己需要进行参数化设置

strcat(fileName,"C:/test/");//将路径保存到file变量中

strcat(fileName,strNumber); //拼接文件名

strcat(fileName,".pdf");//拼接后缀名,根据需要设置,最后就完成了完整的路径和文件名

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)

{               //以写方式打开文件

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;

}

 二、java user协议

  使用java user协议更简单,就是直接使用java编写一段从指定链接下载文件的脚本即可;


import java.io.BufferedInputStream;

import java.io.FileOutputStream;

import java.io.IOException;

import java.net.MalformedURLException;

import java.net.URL;

import java.net.URLConnection;

import lrapi.lr;

public class Actions {

public int init() throws Throwable

{

return 0;

}//end of init

public int action() throws Throwable

{

int DownLoadSize = 0;

String path = "c:\\temp\\";  //设置下载文件保存路径

String vuid = String.valueOf(lr.get_vuser_id()); //获取当前虚拟用户ID并转换成字符串

DownLoadSize = UrlTools.getHttpFileByUrl("http://forum.ubuntu.org.cn/download/file.php?id=129973&sid=78fc8d76767ef49b606595824ceb963d",vuid,path); //调用UrlTools.getHttpFileByUrl()

return 0;

}//end of action

public int end() throws Throwable

{

return 0;

}//end of end }

class UrlTools

{

public static int getHttpFileByUrl(String address,String userid,String path)

{

//定义下面需要用到的变量

URL url;

URLConnection conn = null;

int BUFF_SIZE = 1024;

byte[] buf = new byte[BUFF_SIZE];

int DownLoadSize = 0;

BufferedInputStream bis;

FileOutputStream fos = null;

int size = 0;

try

{

url = new URL(address); //address为传递进来需要下载的链接

conn =  url.openConnection();//使用url实例化需要下载的链接

bis = new BufferedInputStream(conn.getInputStream()); //把需要下载的文件内容保存在bis这个输入流中

fos = new FileOutputStream(path+"\"+userid+"test000001"+“.pdf”));//组成完整路径,并实例化到输出流,这里可以进行参数化,如参数化文件名, // 路径需要事先手动创建好,当然你也可以在脚本中创建实现不同的路径

System.out.println("需要下载的文件大小为:" + conn.getContentLength()/1024 + "k");

while((size = bis.read(buf)) != -1)   #按照设置的buf大小写文件并记录下载的大小

{

fos.write(buf,0,size);

DownLoadSize = DownLoadSize+size;

}

bis.close();

fos.close();

System.out.println("用户" + userid + "下载" + url +"完成!");

}catch(MalformedURLException e)

{

System.out.println("下载发生异常:");

e.printStackTrace();

}catch(IOException e)

{

System.out.println("下载发生异常:");

e.printStackTrace();         }

return DownLoadSize/1024;

}

}

最新内容请见作者的GitHub页:http://qaseven.github.io/

时间: 2024-09-19 08:29:24

LoadRunner下载文件脚本的相关文章

性能测试-请问loadrunner下载文件保存到本地,怎么自动获取下载的文件名和类型呢

问题描述 请问loadrunner下载文件保存到本地,怎么自动获取下载的文件名和类型呢 用loadrunner做下载文件的性能测试的时候,怎么自动获取到我下载的文件名呢? 解决方案 http://blog.csdn.net/gzh0222/article/details/6788888 解决方案二: [原创]Loadrunner下载文件,并自动生成不重复的文件名

ftp自动下载文件脚本分享(ftp命令下载文件)_DOS/BAT

复制代码 代码如下: cd /home/oracle/ftpdatashort_ymd=$(date +%y%m%d)file="10628110.20""$short_ymd"".zip"ftp -niv<<!open 221.236.6.241user XXXX XXXXmget $filebye!

WCF HTTP 错误 404.3 - Not Found(由于扩展配置问题而无法提供您请求的页面。如果该页面是脚本,请添加处理程序。如果应下载文件,请添加 MIME 映射。)

错误信息: HTTP 错误 404.3 - Not Found 由于扩展配置问题而无法提供您请求的页面.如果该页面是脚本,请添加处理程序.如果应下载文件,请添加 MIME 映射. 最可能的原因: 可能是缺少处理程序映射.默认情况下,静态文件处理程序将处理所有内容. 您要使用的功能可能尚未安装. 没有为网站或应用程序启用相应的 MIME 映射.(警告: 请不要为用户不应下载的 .ASPX 页或 .config 文件等内容创建 MIME 映射.) 如果未安装 ASP.NET. 可尝试的操作: 在 s

jsp脚本下载文件遇到的问题

问题描述 我用的FineReport官方的jsp代码,其中修改了一点自已的,用的是tomcat5.5<%@pagelanguage="java"contentType="application/x-msdownload"pageEncoding="gb2312"%><%Stringfilename=(String)request.getParameter("filename");//获取参数filename,

使用jspSmartUpload的下载文件的经验教训

js|下载 昨天晚上用jspSmartUpload下载文件,写了一个下载的页面(Download.jsp)如下: <%@ page contentType="text/html;charset=gb2312" %> <html><%@ page import="java.io.*,mail.util.Encoding" %><jsp:useBean id="mySmartUpload" scope=&qu

python下载文件时显示下载进度的方法

 具体分析如下: 将这段代码放入你的脚本中,类似:urllib.urlretrieve(getFile, saveFile, reporthook=report) 第三个参数如下面的函数定义report,urlretrieve下载文件时会实时回调report函数,显示下载进度 1 2 3 4 5 6 7 8 def report(count, blockSize, totalSize): percent = int(count*blockSize*100/totalSize) sys.stdou

Ajax请求二进制流进行处理(ajax异步下载文件)的简单方法

摘要: ajax请求一个二进制流(文件),转换为Blob进行处理或者下载保存文件 需求 管理后台需要随时下载数据报表,数据要实时生成后转换为excel下载. 文件不大,页面放置"导出"按钮,点击按钮后弹出保存文件对话框保存 说明:第一种方法使用a标签直接可以满足大部分人需求,第二种方法纯粹是在说实现方法以及更好的操作体验,不需要(举一个需要第二种方法的例子:如果生成很慢就需要生成过程中禁用按钮,防止连续生成)用到的可以不用看 解决方案 方法一 请求文件的接口能改为GET则可以使用这种方

想写一个自动从某一个网站下载文件的软件

问题描述 如题,想写一个自动从某一个网站下载文件(如pdf等格式)的软件,用什么语言写呢?java可以么,还是只能用脚本语言?大家指点下,不是很懂 解决方案 解决方案二:大家帮帮忙

帮下忙啊,ajax中没法用response下载文件啊

问题描述 在用ajax的页面中添加个下载图片的按钮,在自己没有ajax项目就能用,在公司的项目上就不能用,症状是点了按钮后没反应,页面下面提示系统错误-1072896748BAIDU了一下好像说是ajax和respongse有冲突?忘各位大虾帮帮忙啊System.IO.FileStreamfs=System.IO.File.OpenRead(path);//path是图片地址byte[]FileData=newbyte[fs.Length];fs.Read(FileData,0,(int)fs.