一、文件上传

最近做接口测试遇到了上传文件的功能,记录整理一下。

1.抓包从headers里查找上传文件的参数

Jmeter抓包文件上传,文件下载————上传失败,头信息应删除Content-Type_上传文件

  • 1.用chrome记录网络传输,然后操作文件上传。
  • 2.进入网络截取的头文件信息,下面有这个东东request payload
  • 3.-------第一段意思大概是上传的文件名称,这个filename只是一个上传的临时变量。
  • -----第二段是上传的参数名。我们要的就是这个参数名certFile
  • ----第二段是使用的什么方法和参数。{upload:submit Query}.

2.添加http请求后,在files Upload选择上传文件,并输入文件参数 和 MIME-Type

Content-Type:application/octet-stream

 

Jmeter抓包文件上传,文件下载————上传失败,头信息应删除Content-Type_文件名_02

 到这一步已经可以正确的上传文件了,下面是我上传失败遇到的问题。

-------------------------------------------------------------------------------------------------------------

新做一个项目遇到上传zip失败,在此总结一下。

先介绍一下httpRequest的几个参数

  • 自动重定向:勾选后,当发送HTTP请求后得到的响应是302/301时,自动重定向到新的页面
  • 跟随重定向:勾选后,与自动重定向不同的是,会记录重定向过程中的所有请求响应,在查看结果树时可以看到服务器返回的内容,并对响应的内容做关联
  • Use KeepAlive:勾选后,和目标服务器之间使用Keep-Alive方式进行HTTP通信
  • Browser-compatible headers:勾选后,当使用multipart/form-data时,会只发送Content-Disposition标头

Jmeter抓包文件上传,文件下载————上传失败,头信息应删除Content-Type_上传文件_03

Jmeter抓包文件上传,文件下载————上传失败,头信息应删除Content-Type_文件名_04

着重看一下勾选Browser-compatible headers的效果:

未勾选时显示 Content-Type 和Content-Transfer-Encoding

Jmeter抓包文件上传,文件下载————上传失败,头信息应删除Content-Type_上传文件_05

 

勾选时不显示Content-Type 和Content-Transfer-Encoding

其中第二部分显示的Content-Type:application/zip显示的不是头信息里的,显示的是Body体里的MIME-type 

Jmeter抓包文件上传,文件下载————上传失败,头信息应删除Content-Type_上传文件_06

Jmeter抓包文件上传,文件下载————上传失败,头信息应删除Content-Type_文件名_07

 总结失败原因:

目前发现在头信息里添加了Content-Type:multipart/form-data; 就会导致上传文件失败,勾选Browser-compatible headers不知道是冲突还是怎么了,感觉忽略不起作用。最后的解决方法就是在头信息里删除该项,勾选Use multipart/form-data for POST即可。

Jmeter抓包文件上传,文件下载————上传失败,头信息应删除Content-Type_上传文件_08

 二、文件下载

1.添加http request,下面添加后置处理器 Beanshell Postprocessor

Jmeter抓包文件上传,文件下载————上传失败,头信息应删除Content-Type_上传_09

2.后置处理器,添加如下代码

import java.io.*;

byte[] result = prev.getResponseData(); //这个是获取到请求返回的数据,prev是获取上个请求的返回

String defaultFileName = "fs419dbcm5r.zip"; //设置一个默认文件名

String filename = defaultFileName; //文件名为默认文件名

if(!"${filename}".equals(null)) filename = "${filename}"; //取动态文件名,如果不为空则使用新的文件名

String downloadPath = "c:/autoDownloadFile/"; //设置下载文件路径

String file_name = downloadPath + filename ; //代表存放文件的位置和文件名

File filePath = new File(downloadPath);
//如果文件夹不存在则创建

if (!filePath.exists() && !filePath.isDirectory())
{
System.out.println("//不存在");
filePath.mkdir();
} else
{
System.out.println("//目录存在");
}

System.out.println(file_name);

File file = new File(file_name);

FileOutputStream out = new FileOutputStream(file);

out.write(result);

out.close();

3.下载文件到指定目录,如下图效果

Jmeter抓包文件上传,文件下载————上传失败,头信息应删除Content-Type_上传_10