仔细琢磨loadrunner的httppost上传文件到服务器

 

环境:loadrunner11,win7家庭版32位

 

最近遇到一个性能测试,需要模拟很多手机客户端调用后台接口,上传图片到服务器。

接口是http get和http post的,http get比较容易对付,loadrunner新建HTTP协议的脚本,录制IE,启动url输入httpget 的url就行了。但是上传文件这招肯定不行了。直接编写loadrunner的post,我没那本事,那个web_custom_request中的BodyBinary我写不出来。所以只能找工具来录制。

 

想了几招,先是尝试用loadrunner使用HTTP协议录制android的模拟器AVD Manager.exe,结果半天没动静;后来在百度的云调试上启动一个模拟器,用loadrunner录制HTTP协议,不出意外的录制了一大堆脚本出来,除了我想要的没有录到以外,啥都有。

参考:http://mtc.baidu.com/mtc/home.php

题外话:如果图省事,百度的这个手机云调试还是不错的,虽然用15分钟就要续一下。

 


印象中firefox有httppost插件,懒得搞了,上网搜搜相关工具吧。于是搜到了:

Author: zyl910的一个httppost工具,C#写的:

http://www.cnblogs.com/zyl910/archive/2012/09/19/TestHttpPost.html

 

拿来看了看:

002.jpg

仔细琢磨loadrunner的httppost上传文件到服务器_第1张图片

 

没有图片文件,只有postdata,我要是知道postdata怎么填写,我就不用满世界搜工具了。这个界面中的文件名称是我修改了添加上去的。没法子,只好改造了这个工具,添加了一段代码。


//BEING:这一段的内容是我新加的

 

System.IO.FileInfo f = new FileInfo(textBox1.Text);

int flen = (Int32)f.Length;

byte[] bufPost = new byte[flen];

 

FileStream sFile = new FileStream(textBox1.Text, FileMode.Open);

sFile.Read(bufPost, 0, flen);

 

f = null;

sFile = null;

 

//byte[] bufPost = myEncoding.GetBytes(sPostData);

 

//END:这一段的内容是我新加的

 

一看就明白了,就是将要post的数据从文件中读出,而不是从界面上得到。好像写的不是特别严谨,编码都没管。代码跑了一下,发现上传文件失败了,找开发核对了一下HEADER部分,发现是:Content-Type必须要写成"application/octet-stream",再试试,嘿,运气不错,成功了。

 

于是loadrunner使用HTTP协议录制编译出来的exe文件,录制下来,回放脚本,OK搞定了。

 

 

做到这里,任务就算完成了。继续想想,这样每次上传的文件都是相同的,能否不同呢。那就需要每次在loadrunner中打开一个图片文件,然后转换为web_custom_request的BodyBinary需要的那一大堆ASC串。于是就试了试,结果:

 

Action.c(19): start time:2012-10-25 15:13:10.944

Action.c(35): 8000 bytes read

Action.c(35): 8000 bytes read

Action.c(35): 8000 bytes read

Action.c(35): 8000 bytes read

Action.c(35): 8000 bytes read

Action.c(35): 8000 bytes read

Action.c(35): 6049 bytes read

Action.c(60): Total number of bytes read = 54049

Action.c(69): end time:2012-10-25 15:24:36.924

 

图片:54049字节,也就是53k

生成的结果ASC串:264k

一共运行:2012-10-25 15:24:36.924-2012-10-25 15:13:10.944=11分26秒

这个还没有做参数替换上传动作。

 

反思:想想也是,上传的时候需要asc串,先从文件二进制读出,转换为asc串替换,将来真的执行,还得搞成二进制串才能上传,这个也太作孽了,没法子快的起来。

 

打开文件转码再上传,这个方案比较傻,还是在代码执行之前就得到BodyBinary会更快一些,但是有点不服气,有没有搞错loadrunner这个脚本是c写的,而且是编译执行的,居然这么慢,不爽,改写一个vbs的试试。

 

花了点时间,写了一个vbs的脚本,对图片进行转换,faint,居然不到一秒就搞定了。Vbs真是爱死你了,毕竟在wins下面混,vbs还是非常给力的,只需要一个编辑器就行了。

 

以后可以图省事,不用录制了,直接徒手写这个HTTP POST了,不过一张53k的图片,需要生成264k的字符串,loadrunner的脚本写出来估计满眼都是这堆字符串了,要是图片上兆的话,不可想象,非得把那堆asc串写入文件中,临到要用再读出来了。

 

 

文中相关工具下载:

1.      loadrunner读图片文件转换为post内容

http://download.csdn.net/detail/testingba/4686466

这是一个loadrunner脚本,示例如何读出一个图片文件,转换生成一个文本文件,文件的内容是loadrunner httppost上传文件的BodyBinary内容

 

2. httppost相关工具

 

http://download.csdn.net/detail/testingba/4686488

这个压缩包中包括:

1. testhttppost.exe:http post上传文件工具;

2. TestHttpPost: 源码;

 

以上内容改编自:Author: zyl910

http://www.cnblogs.com/zyl910/archive/2012/09/19/TestHttpPost.html

 

3.lr_post.txt: 录制的loadrunnerhttp post上传文件到服务器的示例;

4. getjpg.vbs: 读出一个图片文件,将其内容转换为loadrunner httppost的BodyBinary内容,这是用来比较loadrunner脚本速度的:

 

 



你可能感兴趣的:(仔细琢磨loadrunner的httppost上传文件到服务器)