JMeter JSR223 Groovy 逐行读取文件并执行HTTP POST请求

4
  • 我正在尝试迭代文件夹中的文件。每个文件有多个以换行符分隔的JSON字符串。一旦检索到JSON,就必须获取JSON的特定节点并将其POST到http服务器。

  • 最初我想使用csv数据集配置,但我能够从文件中获取嵌套的json。在阅读了一些JMeter教程之后,我最终决定使用JSR223来编写自定义脚本,该脚本读取文件并将其放入ctx中,采样器将使用该数据发送数据。

这是我目前所做的。

Test plan
    -> Thread group
        -> JSR223 PreProcessor : This is where i am reading file and adding it to vars, its like "json_{number}" and "GETfileLength"
    -> ForEach Controller : This is sibling of Thread group
        -> HTTP Request : Inside for Each controller has a configuration of host, port and the path and in the body i have mentioned ${json_out}
        -> View Results Tree 
        -> Summary Report    

在前置处理器中存在的Groovy脚本

    log.info("------ start ----------");
    File file = new File("/data/sample1.json")
    def line;
    def noOfLines=0
    file.withReader { reader ->
        while ((line = reader.readLine()) != null) {
            noOfLines++
            vars.put("json_"+noOfLines, line)
        }
    }
    vars.put("GETfileLength",noOfLines.toString()) ;
    log.info("------ end ----------");

这里输入图片描述 这里输入图片描述 这里输入图片描述

  • 在上述测试计划的层次结构中,我没有看到脚本被调用(已检查日志)。如果我删除forEach控制器,脚本会被调用,但我不知道如何在动态变量的http POST主体中给出变量名称。
1个回答

1
根据文档

在采样器请求之前,预处理器执行某些操作。

请检查执行顺序

请注意,只有当有适用于它们的采样器时,计时器、断言、预处理器和后处理器才会被处理。逻辑控制器和采样器按照它们在树中出现的顺序进行处理。其他测试元素根据它们被发现的范围以及测试元素的类型进行处理。[在一种类型内,元素按照它们在树中出现的顺序进行处理]

这就是为什么您的脚本对于forEach控制器无法工作的原因。
尝试使用JSR223采样器而不是JSR223预处理器。您也可以忽略采样结果。

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接