1.背景
在我们实际应用中,需要测试下载文件接口,但是没有浏览器又如何直接下载呢?MeterSphere 可以使用 BeanShell 写脚本的方式来实现该测试。
2.实现原理
1、通过写 BeanShell 后置脚本可以将响应内容转换成文件输出
2、需要特别说明的是,通过服务器去请求下载接口,文件只能下载到请求该接口的服务器上,而不是我们自己的客户端
3、通过 MeterSphere 的 docker-compose 文件可以看出 docker 挂载的路径是 /opt/metersphere/data,所以建议下载到该路径下
4、如果选择其他路径,就会下载到容器的路径下,查看需要进容器里面看
3.具体案例
1、在接口测试写一个下载接口并生成一个 case
2、在后置操作选择后置脚本-BeanShell,并写以下脚本
import
java.io.*;
byte
[] result = prev.getResponseData();
String file_name =
"/opt/metersphere/data/xxxx.xxx"
;
File file =
new
File(file_name);
FileOutputStream out =
new
FileOutputStream(file);
out.write(result);
out.close();
3、执行该接口,可以看到响应体是我们文件的内容
4、在服务器的该路径下可以看到该文件,说明下载成功了
你好,我使用上述方法保存文件的时候提示无权限,我进入后台把文件夹的权限修改为777了,但是还是无法保存,有什么方法可以解决吗
报错信息:
2024-08-09 13:31:09 INFO 9adf1b49 1-1 Thread started: 9adf1b49 1-1
2024-08-09 13:31:09 ERROR 9adf1b49 1-1 Problem in JSR223 script, JSR223PostProcessor
Sourced file: inline evaluation of: import java.io.*; byte [] result = prev.getResponseData(); String file_name = . . . '' : Typed variable declaration : Object constructor : at Line: 5 : in file: inline evaluation of:
import java.io.*; byte [] result = prev.getResponseData(); String file_name = . . . ‘’ : new FileOutputStream ( file )
Target exception: java.io.FileNotFoundException: /opt/test.jpg (Permission denied)
in inline evaluation of: ``import java.io.*; byte [] result = prev.getResponseData(); String file_name = . . . ‘’ at line number 5
javax.script.ScriptException
at bsh.engine.BshScriptEngine.evalSource(BshScriptEngine.java:87)
at bsh.engine.BshScriptEngine.eval(BshScriptEngine.java:46)
at java.scripting/javax.script.AbstractScriptEngine.eval(AbstractScriptEngine.java:231)
at org.apache.jmeter.util.JSR223TestElement.processFileOrScript(JSR223TestElement.java:237)
at org.apache.jmeter.extractor.JSR223PostProcessor.process(JSR223PostProcessor.java:45)
at org.apache.jmeter.threads.JMeterThread.runPostProcessors(JMeterThread.java:991)
at org.apache.jmeter.threads.JMeterThread.executeSamplePackage(JMeterThread.java:605)
at org.apache.jmeter.threads.JMeterThread.processSampler(JMeterThread.java:502)
at org.apache.jmeter.threads.JMeterThread.run(JMeterThread.java:265)
at java.base/java.lang.Thread.run(Thread.java:840)
现在opt的权限我改回去了,我改为drwxrwxrwx 下载文件的时候也是提示无权限