【问题标题】:JMeter: Resetting Count ValueJMeter:重置计数值
【发布时间】:2016-02-11 16:14:58
【问题描述】:

我正在执行对数据库的 CRUD 调用的基本 API 测试。在 JMeter 中,我的测试计划中有 1 个线程和 3 个线程组,我在每个线程中设置了循环和计数器。 Counters 的原因是在将结果保存到文件时,我想在文件的前缀后面加上计数器值。

问题是计数器永远不会被重置。比如:

Where Count = 1 for all groups, I would expect: 
Thread Group 1, filename_1.json
Thread Group 2, filename_2.json
Thread Group 3, filename_3.xml

Where Group 1 Count = 3, Group 2 Count = 2, Group 3 Count = 1, I would expect: 
Thread Group 1, filename_1.json, filename_2.json, filename_3.json
Thread Group 2, filename_4.json and filename_5.json
Thread Group 3, filename_6.xml

相反,所有组的 Count = 1 我得到的结果如下:

Thread Group 1, filename_11.json
Thread Group 2, filename_14.json
Thread Group 3, filename_18.xml

经过大量搜索和尝试多个建议后,我仍然没有得到我期望的结果。下面是如何配置测试计划的示例。

非常感谢任何建议。

线程组 1 HTTP 标头管理器(应用程序/json) 回路控制器 计数器(Start=1,Increment=1,Maximum=100,Num Format=null,Ref Name=LoopCounter1) HTTP 请求(创建) RegEx (RefName=newRequest, Reg Ex = "id":(.+?)\,"displayName", Template=$1$, Match No.=1, Default=NONE) BeanShell 断言(名称=newRequest,参数=${__setProperty(newRequest,${newRequest},)}) 将响应保存到文件(文件前缀=requestResult_${LoopCounter},变量名称=newRequestFile) 回路控制器 HTTP 请求(读取) HTTP 请求(更新) HTTP 请求(删除) 线程组 2 HTTP 标头管理器(应用程序/json) 回路控制器 计数器(Start=1,Increment=1,Maximum=100,Num Format=null,Ref Name=LoopCounter2) HTTP 请求(创建) RegEx (RefName=newContractId, Reg Ex = "id":(.+?)\,"terminationType", Template=$1$, Match No.=1, Default=NONE) BeanShell 断言 (Name=newContractId, Param=${__setProperty(newContractId,${newContractId},)}) 将响应保存到文件(文件前缀=contractRecords_${LoopCounter2},变量名称=newContractFile) 回路控制器 HTTP 请求(读取) HTTP 请求(更新) HTTP 请求(删除) 线程组 3 HTTP 标头管理器(应用程序/xml) 回路控制器 计数器(开始 = 1,增量 = 1,最大值 = 100,数字格式 = null,参考名称 = LoopCounter3) HTTP 请求(创建) RegEx (RefName=newPricingId, Reg Ex = "id":(.+?)\,"terminationType", Template=$1$, Match No.=1, Default=NONE) BeanShell 断言(名称=newPricingId,参数=${__setProperty(newPricingId,${newPricingId},)}) 将响应保存到文件(文件前缀=pricingRecords_${LoopCounter3},变量名称=newPricingFile) 回路控制器 HTTP 请求(读取) HTTP 请求(更新) HTTP 请求(删除)

更新

我更接近预期的结果。启用“每个线程组上的重置计数器”后,我希望线程组 2 的计数重置为 0。但是,它从前一个线程继续。我需要在每个线程组中重置计数器。原因如下:

线程组 2 HTTP 标头管理器(应用程序/json) 回路控制器 计数器(Start=1,Increment=1,Maximum=100,Num Format=null,Ref Name=LoopCounter2) HTTP POST 请求(创建) ${__FileToString(${payloadArchive}/${__eval(contract_${LoopCounter})}.json,,)}

如您所见,我在线程组 2 的每个循环中将不同的文件传递到 HTTP 请求的正文中。每个 .json 文件都包含基于数据库唯一约束的唯一元素。这些文件被命名为“contract_01.json”、“contract_02.json”、“contract_03.json”等。这就是为什么我希望线程组 2 重新启动它的计数器。

【问题讨论】:

  • 您在描述中说“我有 3 个线程”,但您的代码表明您有 3 个线程组。那么你的意思是在 3 个线程组中的每个线程组中都有 3 个线程吗?或者每个线程组有多少个线程?是否也检查了“为每个用户独立跟踪计数器”?
  • 对不起,我只有 1 个线程和 3 个线程组。 (我在我的原始陈述中更正了这一点)。启用“独立跟踪计数器....”后,我更接近预期的结果。启用“每个线程组上的重置计数器”后,我希望线程组 2 的计数重置为 0。但是,它从前一个线程继续。我需要将每个线程组的计数器重置为从 0 开始。

标签: api jmeter crud


【解决方案1】:

已解决(?)

以下计数器配置似乎提供了所需的结果。

线程组 1 HTTP 标头管理器(应用程序/json) 回路控制器 柜台 开始=空, 增量=空, 最大值=空, 数字格式=null, 参考名称=LoopCounter1 HTTP POST 请求(创建) 线程组 2 HTTP 标头管理器(应用程序/json) 回路控制器 柜台 开始=1, 增量=空, 最大值=空, 数字格式=null, 参考名称=LoopCounter2 HTTP POST 请求(创建) ${__FileToString(${payloadArchive}/${__eval(contract_${LoopCounter})}.json,,)}

如您所见,对于线程组 2 的每个循环,我将不同的文件传递到 HTTP 请求的正文中。 (每个文件都包含基于数据库唯一约束的唯一元素。)文件被命名为“contract_1.json”、“contract_2.json" 等。因此,为什么我希望线程组 2 重新启动它的计数器。

它现在可以正常工作,并且每次循环都能正确抓取正确的文件内容。但是,我不确定为什么计数器 1 的 Start 必须为 null 而计数器 2 的 Start 必须为 1

如果有人发现这个问题,我会很感激知道为什么以及如何纠正它。我只使用了 1 周的 JMeter,没有 Java(或任何编程)背景。

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2021-10-10
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2022-01-18
    • 1970-01-01
    相关资源
    最近更新 更多