【性能测试】——Jmeter请求响应保存到文件

场景:

    某待测文件管理系统,50并发下载大小为500MB的tif格式文件,保存到本地。


遇到的问题:   

    访问文件下载接口,请求成功响应,但是下载文件保存目录下找不到下载文件。想通过jmeter查看请求详情,可一旦从查看结果树中点击下载请求,jmeter便会卡死。


分析过程:

    存在两个问题:

    目录下找不到下载文件,有两种可能:

        1.文件成功下载保存到本地,但不在该目录

        2.文件并没有成功保存到本地

    jmeter点击下载请求后卡死,最有可能的原因:

        1.下载文件直接在请求的响应中打开,导致jmeter内存溢出,卡死


设计实验,验证猜想,确认问题原因:

       1. 通过系统界面,执行下载,发现:

            a.点击下载后,浏览器弹出窗口,用户可选择打开或保存

            b.选择保存后,文件自动保存到浏览器的下载目录下

        通过该实验初步推测,该系统文件下载的保存功能比较依赖于浏览器。

       2.从文件管理系下载一个只有几kb大小,且文件名相对特殊的文件(如文件系统中没有可以自己通过记事本制造一个测试文件,上传到文件系统),使用jmeter访问下载接口下载该文件,发现:

            a.请求成功后,使用everything工具在本地查找下载的文件,本地无该文件

            说明:文件并没有成功保存到本地

            b.在查看结果树种点击下载请求,查看请求响应,响应中展示的是下载文件的内容

            说明:文件下载接口请求系统中文件,系统直接在请求响应中返回文件

       总结:下载请求是成功的,下载脚本是正确的,但由于系统设计的原因,文件下载后并没有自动保存为文件。


要解决的问题:将jmeter请求的响应保存为本地文件。

解决方法:通过在beanshell后置处理器中编写js代码实现。

源码:

import java.io.*;

byte[] result = prev.getResponseData();            //getResponseData()方法获取请求响应数据,prev指上个请求

String file_name = "E:\\download\\test.tif";        //存放文件的位置和文件名

File file = new File(file_name);

FileOutputStream out = new FileOutputStream(file);

out.write(result);                                          //写入到文件

out.close();

你可能感兴趣的:(【性能测试】——Jmeter请求响应保存到文件)