首页 文章

JMeter:重置计数值

提问于
浏览
0

我正在对数据库的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 回答

  • 0

    SOLVED (?)

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

    Thread Group 1
        HTTP Header Manager (application/json)
         Loop Controller
           Counter
                  Start=null, 
                  Increment=null, 
                  Maximum=null, 
                  Num Format=null, 
                  Ref Name=LoopCounter1
           HTTP POST Request (CREATE)
    Thread Group 2
        HTTP Header Manager (application/json)
         Loop Controller
           Counter
                  Start=1, 
                  Increment=null, 
                  Maximum=null, 
                  Num Format=null, 
                  Ref Name=LoopCounter2
           HTTP POST Request (CREATE)
        ${__FileToString(${payloadArchive}/${__eval(contract_${LoopCounter})}.json,,)}
    

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

    它现在正在工作并正确地抓取每个循环的正确文件内容 . 但是,我不确定为什么Start 1必须是 null 用于Counter 1而 1 用于Counter 2 .

    如果有人看到这个缺陷,我会很高兴知道为什么以及如何纠正它 . 我只使用JMeter一周,没有Java(或任何编程)背景 .

相关问题