在循环HTTP请求中使用多个JSON文件

时间:2016-02-09 18:59:23

标签: json jmeter

我在循环控制器中有一个HTTP请求。我还有多个.json文件,这些文件包含基于我发布的数据库中的唯一约束的唯一值。每个文件都遵循命名约定Contract_ n .json。 (其中n = 1,2,3等)

问题在于:

如何让HTTP Request的Body在每个循环中获取不同的文件。我试图找出实现这一目标的最佳方法。我已经验证了我是否对完整文件名进行了硬编码,它在第一个线程循环中成功。

${__FileToString(C:/.../.../recallable payloads/${__eval(Contract_1)}.json,,)} 

我已经尝试了以下内容,但都失败了:

${__FileToString(C:/.../.../recallable payloads/${__eval(Contract_(.+?))}.json,,)} 
${__FileToString(C:/.../.../recallable payloads/${__eval(Contract_)(.+?)}.json,,)} 
${__FileToString(C:/.../.../recallable payloads/${__eval(Contract_)}(.+?).json,,)} 

关键是,我不能将所有记录都放在一个文件中,因为这种情况不太现实。每个必须单独存储,并通过线程在每个循环上由HTTP请求获取。

HTTP Request and thread layout

User Variables

我刚刚了解了_StringFromFile函数。我应该使用它吗?

我已尝试在身体中使用以下物品。

 ${_StringFromFile(Contract_#'.'json,,1,2)} 

这导致

 POST http://..../2002/crud/Contract
 POST data:
 **ERR**

 "RuntimeException",
 "cause": null,
 "message": "Unexpected character ('*' (code 42)): expected a valid value (number, String, array, object, 'true', 'false' or 'null')\n 

然而我无法在任何地方找到*。

1 个答案:

答案 0 :(得分:0)

如果您使用的是jmeter循环控制器,则可以添加计数器配置元素。看看这里 how to set counter of loop inside loop correctly inside jmeter?

另外我建议将路径放在用户定义的Variables配置元素中以简化事情......就像这样 LOCALDIR $ {__ BeanShell(import org.apache.jmeter.services.FileServer; FileServer.getFileServer()。getBaseDir(),)}

然后你可以参考你的配置,比如$ {localDir} / Contract _ $ {counter_index} .json

如果您对jmeter的结构进行屏幕截图,将会很有帮助。