1

在我的测试计划中,我有 2 个端点bidwin. 如果bid端点返回状态 200(它也可以返回 204,但我只需要 200 所以我不能使用${JMeterThread.last_sample_ok})我需要运行win端点。我做了:

  1. 创建定义变量STATUS_OK

    在此处输入图像描述

  2. 根据请求创建正则表达式提取器bid以获取响应代码在此处输入图像描述

  3. 在该控制器下添加If controller和插入win请求在此处输入图像描述

但是if controller条件不起作用,Jmeter 永远不会运行win请求。

知道为什么它不起作用吗?或者也许我可以调试它?如果有任何帮助,我将不胜感激!!!

更新包括测试计划结构在此处输入图像描述

  • 出价请求- 是每个出价请求的 CSV 数据集配置和随机 jsons(就像这里提到的那样)
  • 线程- 这是一个有 200 个用户和 1 个循环的线程
  • 投标发布请求,对于正文,我使用的是 json 文件之一${__FileToString(/home/user/Downloads/jmeter/jsons/${__eval(${JSON_FILE})}.txt,,)}投标请求还包括货币、投标等。它是 Json 提取器,我正在使用该数据为每个投标生成正确的获胜URL 。
  • 如果出价- 如果控制器在此处讨论
  • win - 获取请求,其中 URL 查询不同取决于出价响应(使用 Json 提取器)。网址看起来像: win?auctionId=${AUCTIONID}&bidId=${BIDID}&impId=${IMPRESSIONID}&seatId=${SEAT}&price=${__javaScript((Math.random()* (4 - 1)+1).toFixed(4);)}&cur=${CUR}&adId=${ADID}
4

2 回答 2

3

对于If Controller你应该使用 __groovy 或 __jexl3 函数

将条件解释为变量表达式?如果选择此项,则条件必须是计算结果为“真”的表达式(忽略大小写)。例如,${FOUND} 或 ${__jexl3(${VAR} > 100)}。与 JavaScript 案例不同,仅检查条件是否匹配“真”(忽略大小写)。建议检查这一点并在 Condition 中使用 __jexl3 或 __groovy 函数以提高性能

在你的情况下使用

${__groovy(vars.get("BID_STATUS") == vars.get("STATUS_OK") )}

或者

${__jexl3("${BID_STATUS}" == "${STATUS_OK}")}
于 2018-02-15T09:47:10.577 回答
2

您需要用引号将 JMeter 变量引用括起来,例如:

"${BID_STATUS}" == "${STATUS_OK}"

或者(更好)您可以摆脱这个正则表达式提取器并切换 If Controller 的条件以使用__groovy() 函数,如:

${__groovy(prev.getResponseCode().equals(vars.get('STATUS_OK')),)}

JMeter Groovy 以前的请求状态

更多信息:Apache Groovy - 为什么以及如何使用它

于 2018-02-15T10:40:43.393 回答