如何在Jmeter中的Bean Shell后处理器中使用CSV数据集配置变量

时间:2016-08-03 13:12:19

标签: testing jmeter automated-tests performance-testing load-testing

在我的应用程序中,我有两个场景。

  • 1。创建:我们在这里预订酒店房间。预订申请后,将返回一个交易ID。
  • 2。取消:我们需要将交易ID传递给申请以取消预订。
  • 我想用jmeter测试,以便在创建调用之后,使用生成的事务ID自动调用相应create的取消调用。

所以我创建了两个线程组。一个用于创建我正在调用create API的创建API,使用Regular Expression Extractor&amp ;;将事务ID保存在CSV文件中。 Bean Shell后处理器。另一个线程是取消,我使用CSV数据集配置&选择交易ID。调用取消API。

问题是我想在调用取消API后从CSV文件中删除该事务ID。我认为Bean Shell Post Processor可以完成这项工作。这是我的CSV数据集配置:

enter image description here

这是我的Bean Shell后处理器代码:

File inputFile = new File("/home/demo/LocalFolder/CSV/result.csv");
File tempFile = new File("/home/demo/LocalFolder/CSV/myTempFile.csv");

BufferedReader reader;
try {
    reader = new BufferedReader(new FileReader(inputFile));

    BufferedWriter writer = new BufferedWriter(new FileWriter(tempFile));

    String lineToRemove = vars.get("transactionId");
    //String lineToRemove = "${transactionId}";
    String currentLine;

    while((currentLine = reader.readLine()) != null) {
        // trim newline when comparing with lineToRemove
        String trimmedLine = currentLine.trim();
        if(trimmedLine.equals(lineToRemove)) continue;
        writer.write(currentLine + System.getProperty("line.separator"));
    }
    writer.close(); 
    reader.close(); 
    boolean successful = tempFile.renameTo(inputFile);
    System.out.println("Completed");
    } catch (FileNotFoundException e) {
        // TODO Auto-generated catch block
        e.printStackTrace();
    } catch (IOException e) {
        // TODO Auto-generated catch block
        e.printStackTrace();
    }

}

但是事务ID不会从文件中删除。我认为vars.get("transactionId")没有返回任何内容或返回错误的值。如果我硬编码转换ID,那么代码工作正常。任何人都可以帮助我吗?

1 个答案:

答案 0 :(得分:0)

JMeter变量仅本地到当前线程组,为了在线程组之间传递数据,您需要使用JMeter属性(props而不是vars) 。有关更详细的说明和用法示例,请参阅Knit One Pearl Two: How to Use Variables in Different Thread Groups文章。

P.S。也许更容易使用HTTP Simple Table Server