【问题标题】:jmeter sends empty http POST body data after BSF PreProcessor modification of a requestjmeter 在 BSF PreProcessor 修改请求后发送空的 http POST 正文数据
【发布时间】:2015-04-04 19:40:40
【问题描述】:

有没有人知道为什么我修改请求正文后 jmeter 传递的是空 POST。

我有一个包含大量 JSON 的请求(很遗憾,我无法用它粘贴图像)

我已将 BSF 预处理器附加到此请求:

import java.util.regex.Matcher;
import java.util.regex.Pattern;
import org.apache.jmeter.config.Argument;
import org.apache.jmeter.config.Arguments;
import org.apache.jmeter.samplers.Sampler;
import org.apache.jmeter.protocol.http.sampler.HTTPSampler;

Sampler sampler = ctx.getCurrentSampler();
String param = sampler.getArguments().toString();
String replacerMCI = vars.get("vMainCaseId");

Pattern r = Pattern.compile("(?<=mainCaseId\":\")(\\d{2,})");
Matcher m = r.matcher(param);
String paramRep = m.replaceAll(replacerMCI);

Argument arg = new Argument("", paramRep);
Arguments argList = new Arguments();
argList.addArgument(arg);
sampler.setArguments(argList);

当我登录控制台查看参数是否被修改时,我可以看到它有一个新值,但是当我开始测试时,我看到 POST 发送的是空数据。

POST https://servername:9443/teamworks/ajaxCoach
POST data:
Cookie Data:
[some cookie data]

【问题讨论】:

    标签: post request jmeter beanshell


    【解决方案1】:

    您的代码看起来不错,只需删除以下行:

    Sampler sampler = ctx.getCurrentSampler();
    

    作为

    1. org.apache.jmeter.samplers.Sampler 类没有“setArguments”方法
    2. 有一个预定义变量 sampler 是父采样器的简写,我猜你的情况是 HTTPSamplerProxy

    如果您的脚本遇到任何问题,请查看 jmeter.log 文件,对于 Pre 和 PostProcessors,即使它们失败,也不会在 GUI 中显示任何内容。

    如果您使用 Beanshell 作为 BSF 语言,您可以在测试开始时添加 debug(); 行,Beanshell 解释器会将调试信息打印到 STDOUT

    【讨论】:

    • 嗨德米特里!感谢您的提示。我稍微改变了实现。现在我直接使用 HTTPArgument 并且正在发送 POST 但是......我发现了另一个问题。 1. POST 在请求正文的开头使用等号发送有没有办法从消息中删除这个等号? POST 看起来像这样:={data:""; ...}
    • 您可以将其删除为arg.setValue(arg.getValue().replaceFirst("\\=",""));
    • 万岁! ;-) 很简单。感谢帮助。很遗憾,因为我没有足够的声望点,所以我不能给予荣誉。
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2019-03-15
    • 2016-07-03
    • 1970-01-01
    • 2017-11-18
    • 1970-01-01
    • 1970-01-01
    • 2021-03-12
    相关资源
    最近更新 更多