【发布时间】: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 开始。