如何在bean预处理器中使用java程序

时间:2016-06-26 06:02:20

标签: jmeter

以下程序读取XML文件并压缩为gzip。

我在这里有几个问题。

  1. 我可以直接在JMeter BeanShell预处理器中使用以下程序吗?

  2. 我想使用输出变量作为JSON请求的输入。在Jmeter中有可能吗?

  3. 屏幕截图和细节将不胜感激。

    public static void main(String [] args)抛出异常{

    String line = null; 
    String sb = "";
    File f=new File("D:\\RetailTransactionLog_9419_001_590.xml");
    FileReader fr=new FileReader(f);
    BufferedReader br=new BufferedReader(fr);   
    
    while((line=br.readLine())!=null)
    {
         sb= sb + line;
    }   
    br.close();
    
    
    ByteArrayOutputStream baos = new ByteArrayOutputStream();
    GZIPOutputStream gzos = new GZIPOutputStream(baos);
    gzos.write(sb.getBytes("UTF-8"));
    gzos.close();
    
    String base64CompressedString = Base64.getEncoder().encodeToString(baos.toByteArray());
    System.out.println(base64CompressedString);
    

2 个答案:

答案 0 :(得分:1)

当然,您可以将您的Java代码直接放在JMeter BeanShell预处理器中等等!

将预处理器组件作为JSON请求的子代插入(如附件中的脚本示例所示)。

您不需要导入java.io包,如BufferedReader,ByteArrayOutputStream,File,FileReader,IOException,Base64 ......

还删除主要签名public static void main(String [] args)...

您只需导入“java.util.zip.GZIPOutputStream”(A)

我还用log.info(base64CompressedString)替换你的System.out.println(base64CompressedString),只是为了在jmeter控制台中可视化你的输出(B)......

enter image description here

最后添加代码(C)以在您选择的变量中引用您的结果(在我的示例中为“a”)。

您必须在json请求中使用$ {a}调用变量,就像在我的JMX脚本中一样:

enter image description here

解压缩附件http://uplea.com/dl/9F734367B43FB93

/ bin下的“ReadAndCompressMyFile.jmx”并在C:下放置“test.xml”或更改代码中的路径。

我使用了虚拟采样器而不是你的json请求。

运行我的脚本后,您可以在查看结果树(请求选项卡)和控制台中看到“a”的值(对应于base64CompressedString)。

enter image description here

PS:要使用“虚拟采样器”运行我的脚本,需要在jmeter目录的/ lib / ext下添加jmeter-plugins-dummy-0.1.jar。

希望能帮到你......

答案 1 :(得分:0)

GZIP压缩是相当重的"操作,如果您将拥有大量虚拟用户 - 它可能会成为瓶颈,因此请考虑使用其他方法:

  1. 通过JMeter插件提供__base64Encode()功能
  2. 如果由于任何原因这还不够 - 请转到JSR223 Sampler and Groovy language,Groovy主要与Java兼容,因此您的代码应该可以正常工作(只需删除main方法)