我正在对数据库的CRUD调用执行基本的API测试 . 在JMeter中,我的测试计划中有1个线程和3个线程组,我在每个线程中设置了循环和计数器 . 计数器的原因是将结果保存到文件时,我想用计数器值附加文件的前缀 .
问题是计数器永远不会重置 . 例如:
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
经过多次搜索并尝试了多个建议后,我仍然没有得到我的期望 . 以下是如何配置测试计划的示例 .
任何建议都非常感谢 .
Thread Group 1
HTTP Header Manager (application/json)
Loop Controller
Counter (Start=1, Increment=1, Maximum=100, Num Format=null, Ref Name=LoopCounter1)
HTTP Request (CREATE)
RegEx (RefName=newRequest, Reg Ex = "id":(.+?)\,"displayName", Template=$1$, Match No.=1, Default=NONE)
BeanShell Assertion (Name=newRequest, Param=${__setProperty(newRequest,${newRequest},)})
Save Response to file (File prefix=requestResult_${LoopCounter}, Var Name=newRequestFile)
Loop Controller
HTTP Request (READ)
HTTP Request (UPDATE)
HTTP Request (DELETE)
Thread Group 2
HTTP Header Manager (application/json)
Loop Controller
Counter (Start=1, Increment=1, Maximum=100, Num Format=null, Ref Name=LoopCounter2)
HTTP Request (CREATE)
RegEx (RefName=newContractId, Reg Ex = "id":(.+?)\,"terminationType", Template=$1$, Match No.=1, Default=NONE)
BeanShell Assertion (Name=newContractId, Param=${__setProperty(newContractId,${newContractId},)})
Save Response to file (File prefix=contractRecords_${LoopCounter2}, Var Name=newContractFile)
Loop Controller
HTTP Request (READ)
HTTP Request (UPDATE)
HTTP Request (DELETE)
Thread Group 3
HTTP Header Manager (application/xml)
Loop Controller
Counter (Start=1, Increment=1, Maximum=100, Num Format=null, Ref Name=LoopCounter3)
HTTP Request (CREATE)
RegEx (RefName=newPricingId, Reg Ex = "id":(.+?)\,"terminationType", Template=$1$, Match No.=1, Default=NONE)
BeanShell Assertion (Name=newPricingId, Param=${__setProperty(newPricingId,${newPricingId},)})
Save Response to file (File prefix=pricingRecords_${LoopCounter3}, Var Name=newPricingFile)
Loop Controller
HTTP Request (READ)
HTTP Request (UPDATE)
HTTP Request (DELETE)
UPDATE
我更接近预期的结果 . 启用“每个线程组上的重置计数器”后,我希望线程组2的计数重置为0.但是,它继续从前一个线程开始 . 我需要重置每个线程组中的计数器 . 原因如下:
Thread Group 2
HTTP Header Manager (application/json)
Loop Controller
Counter (Start=1, Increment=1, Maximum=100, Num Format=null, Ref Name=LoopCounter2)
HTTP POST Request (CREATE)
${__FileToString(${payloadArchive}/${__eval(contract_${LoopCounter})}.json,,)}
正如您所看到的,我使用Thread Group 2的每个循环将不同的文件传递到HTTP Request的主体中 . 每个.json文件都包含基于数据库的唯一约束的唯一元素 . 这些文件名为“contract_01.json”,“contract_02.json”,“contract_03.json”等 . 这就是我希望Thread Group 2重新启动它的计数器的原因 .
1 回答
SOLVED (?)
以下计数器配置似乎提供了所需的结果 .
正如您所看到的,对于Thread Group 2的每个循环,我将一个不同的文件传递到HTTP Request的正文中 . (每个文件包含基于数据库的唯一约束的唯一元素 . )文件名为“contract_1.json ", " contract_2.json”等 . 因此,为什么我希望线程组2重新启动其计数器 .
它现在正在工作并正确地抓取每个循环的正确文件内容 . 但是,我不确定为什么Start 1必须是 null 用于Counter 1而 1 用于Counter 2 .
如果有人看到这个缺陷,我会很高兴知道为什么以及如何纠正它 . 我只使用JMeter一周,没有Java(或任何编程)背景 .