JMeter 5分钟轮询查询接口并用 ForEach Controller 更新数据:示例脚本和常见错误解决
在JMeter中,可以使用Timer元件来设置测试计划的定时轮询查询。下面是一个示例的JMeter脚本代码(xml格式),演示了如何设置每隔5分钟轮询查询接口,并使用forEach Controller进行数据更新。\n\nxml\n<?xml version="1.0" encoding="UTF-8"?>\n<jmeterTestPlan version="1.2" properties="5.0" jmeter="5.4.1">\n <hashTree>\n <TestPlan guiclass="TestPlanGui" testclass="TestPlan" testname="Test Plan" enabled="true">\n <stringProp name="TestPlan.comments"></stringProp>\n <boolProp name="TestPlan.functional_mode">false</boolProp>\n <boolProp name="TestPlan.serialize_threadgroups">false</boolProp>\n <elementProp name="TestPlan.user_defined_variables" elementType="Arguments" guiclass="ArgumentsPanel" testclass="Arguments" testname="User Defined Variables" enabled="true">\n <collectionProp name="Arguments.arguments"/>\n </elementProp>\n <stringProp name="TestPlan.user_define_classpath"></stringProp>\n </TestPlan>\n <hashTree>\n <ThreadGroup guiclass="ThreadGroupGui" testclass="ThreadGroup" testname="Thread Group" enabled="true">\n <stringProp name="ThreadGroup.on_sample_error">continue</stringProp>\n <elementProp name="ThreadGroup.main_controller" elementType="LoopController" guiclass="LoopControlPanel" testclass="LoopController" enabled="true">\n <boolProp name="LoopController.continue_forever">false</boolProp>\n <stringProp name="LoopController.loops">-1</stringProp>\n </elementProp>\n <stringProp name="ThreadGroup.num_threads">1</stringProp>\n <stringProp name="ThreadGroup.ramp_time">1</stringProp>\n <longProp name="ThreadGroup.start_time">1637302800000</longProp>\n <longProp name="ThreadGroup.end_time">1637302800000</longProp>\n <boolProp name="ThreadGroup.scheduler">true</boolProp>\n <stringProp name="ThreadGroup.duration"></stringProp>\n <stringProp name="ThreadGroup.delay"></stringProp>\n <boolProp name="ThreadGroup.same_user_on_next_iteration">true</boolProp>\n <stringProp name="ThreadGroup.on_sample_error">continue</stringProp>\n <elementProp name="ThreadGroup.main_controller" elementType="LoopController" guiclass="LoopControlPanel" testclass="LoopController" testname="Loop Controller" enabled="true">\n <boolProp name="LoopController.continue_forever">true</boolProp>\n <stringProp name="LoopController.loops">-1</stringProp>\n </elementProp>\n </ThreadGroup>\n <hashTree>\n <TransactionController guiclass="TransactionControllerGui" testclass="TransactionController" testname="Transaction Controller" enabled="true">\n <boolProp name="TransactionController.parent">false</boolProp>\n <boolProp name="TransactionController.generate_transaction_parent">true</boolProp>\n <boolProp name="TransactionController.include_timers">true</boolProp>\n </TransactionController>\n <hashTree>\n <Timer guiclass="UniformRandomTimerGui" testclass="Timer" testname="Uniform Random Timer" enabled="true">\n <longProp name="ConstantTimer.delay">300000</longProp>\n <longProp name="UniformRandomTimer.range">0</longProp>\n </Timer>\n <hashTree>\n <HTTPSamplerProxy guiclass="HttpTestSampleGui" testclass="HTTPSamplerProxy" testname="HTTP Request" enabled="true">\n <elementProp name="HTTPsampler.Arguments" elementType="Arguments" guiclass="HTTPArgumentsPanel" testclass="Arguments" enabled="true">\n <collectionProp name="Arguments.arguments"/>\n </elementProp>\n <stringProp name="HTTPSampler.domain">example.com</stringProp>\n <stringProp name="HTTPSampler.port"></stringProp>\n <stringProp name="HTTPSampler.protocol">http</stringProp>\n <stringProp name="HTTPSampler.contentEncoding"></stringProp>\n <stringProp name="HTTPSampler.path">/api/endpoint</stringProp>\n <stringProp name="HTTPSampler.method">GET</stringProp>\n <boolProp name="HTTPSampler.follow_redirects">true</boolProp>\n <boolProp name="HTTPSampler.auto_redirects">false</boolProp>\n <boolProp name="HTTPSampler.use_keepalive">true</boolProp>\n <boolProp name="HTTPSampler.DO_MULTIPART_POST">false</boolProp>\n <boolProp name="HTTPSampler.monitor">false</boolProp>\n <stringProp name="HTTPSampler.embedded_url_re"></stringProp>\n </HTTPSamplerProxy>\n <hashTree>\n <ForEachController guiclass="ForEachControlPanel" testclass="ForEachController" testname="ForEach Controller" enabled="true">\n <stringProp name="ForEachController.inputVal">APIResponse</stringProp>\n <stringProp name="ForEachController.returnVal">APIResponse</stringProp>\n </ForEachController>\n <hashTree>\n <BeanShellSampler guiclass="TestBeanGUI" testclass="BeanShellSampler" testname="Update Data" enabled="true">\n <stringProp name="BeanShellSampler.query_string">vars.put("APIResponse", "updated data");</stringProp>\n <stringProp name="BeanShellSampler.parameters"></stringProp>\n <boolProp name="BeanShellSampler.resetInterpreter">false</boolProp>\n </BeanShellSampler>\n <hashTree/>\n </hashTree>\n </hashTree>\n </hashTree>\n </hashTree>\n </hashTree>\n </hashTree>\n </hashTree>\n</jmeterTestPlan>\n\n\n在上述脚本中,我们使用了Timer元件来设置每隔5分钟执行一次HTTP请求。然后,我们使用ForEach Controller来遍历接口返回的数据,并在BeanShell Sampler中进行数据更新。请注意替换示例中的实际接口URL和更新逻辑。\n\n另外,关于报错"CannotResolveClassException: Timer"的问题,可能是因为你没有正确引入Timer元件的类。请确保你的JMeter版本与示例脚本中指定的版本一致,并检查是否正确导入了相关的JAR包。\n
原文地址: https://www.cveoy.top/t/topic/pSBJ 著作权归作者所有。请勿转载和采集!