jmeter 带函数压测脚本
包含时间戳获取、md5值计算、随机字符串获取
<?xml version="1.0" encoding="UTF-8"?>
<jmeterTestPlan version="1.2" properties="5.0" jmeter="5.6.3"><hashTree><TestPlan guiclass="TestPlanGui" testclass="TestPlan" testname="dumeter_test_plan"><elementProp name="TestPlan.user_defined_variables" elementType="Arguments" guiclass="ArgumentsPanel" testclass="Arguments"><collectionProp name="Arguments.arguments"/></elementProp><boolProp name="TestPlan.functional_mode">false</boolProp><boolProp name="TestPlan.serialize_threadgroups">false</boolProp></TestPlan><hashTree><ThreadGroup guiclass="ThreadGroupGui" testclass="ThreadGroup" testname="ThreadGroup"><intProp name="ThreadGroup.num_threads">2</intProp><intProp name="ThreadGroup.ramp_time">1</intProp><longProp name="ThreadGroup.duration">10</longProp><boolProp name="ThreadGroup.same_user_on_next_iteration">true</boolProp><boolProp name="ThreadGroup.scheduler">true</boolProp><stringProp name="ThreadGroup.on_sample_error">continue</stringProp><elementProp name="ThreadGroup.main_controller" elementType="LoopController" guiclass="LoopControlPanel" testclass="LoopController"><intProp name="LoopController.loops">-1</intProp><boolProp name="LoopController.continue_forever">false</boolProp></elementProp></ThreadGroup><hashTree><HTTPSamplerProxy guiclass="HttpTestSampleGui" testclass="HTTPSamplerProxy" testname="HTTP Request-0"><stringProp name="HTTPSampler.domain">172.0.0.1</stringProp><stringProp name="HTTPSampler.port">8080</stringProp><stringProp name="HTTPSampler.path">/v1/config</stringProp><boolProp name="HTTPSampler.follow_redirects">true</boolProp><stringProp name="HTTPSampler.method">POST</stringProp><boolProp name="HTTPSampler.use_keepalive">true</boolProp><boolProp name="HTTPSampler.postBodyRaw">true</boolProp><elementProp name="HTTPsampler.Arguments" elementType="Arguments"><collectionProp name="Arguments.arguments"><elementProp name="" elementType="HTTPArgument"><boolProp name="HTTPArgument.always_encode">false</boolProp><stringProp name="Argument.value">{
"expired_on": "2035-01-01T08:00:00+08:00",
"scope_id": "10001",
"name": "rule051_${longts}_${__Random(0, 9999)}",
"func": "base",
"value": "is_ipmask(cli_ip, '1.1.1.1')",
"action_code": "observe",
"action_detail": "",
"enable": 1,
"scope_note": "",
"operator": "geo",
"annotation": ""
}</stringProp><stringProp name="Argument.metadata">=</stringProp></elementProp></collectionProp></elementProp></HTTPSamplerProxy><hashTree><JSR223PreProcessor guiclass="TestBeanGUI" testclass="JSR223PreProcessor" testname="JSR223 预处理程序" enabled="true"><stringProp name="cacheKey">true</stringProp><stringProp name="filename"></stringProp><stringProp name="parameters"></stringProp><stringProp name="script">import java.security.MessageDigest// 获取固定参数
String ak = "ak"
String sk = "sk"// 获取当前时间戳
long currentTimeSeconds = System.currentTimeMillis() / 1000// 将秒级时间戳转换为字符串
String textToHash = currentTimeSeconds.toString()// 生成 sign
String dataToSign = ak + textToHash + sk
MessageDigest md = MessageDigest.getInstance("MD5")
byte[] digest = md.digest(dataToSign.bytes)
String sign = digest.encodeHex().toString()// 将 ak、sign 和时间戳添加到请求头中
vars.put("sign", sign)
vars.put("ts", textToHash)
vars.put("ak", ak)String longts = System.currentTimeMillis().toString()
vars.put("longts", longts)
</stringProp><stringProp name="scriptLanguage">groovy</stringProp></JSR223PreProcessor><hashTree/><HeaderManager guiclass="HeaderPanel" testclass="HeaderManager" testname="HTTP信息头管理器" enabled="true"><collectionProp name="HeaderManager.headers"><elementProp name="" elementType="Header"><stringProp name="Header.name">sign</stringProp><stringProp name="Header.value">${sign}</stringProp></elementProp><elementProp name="" elementType="Header"><stringProp name="Header.name">ak</stringProp><stringProp name="Header.value">${ak}</stringProp></elementProp><elementProp name="" elementType="Header"><stringProp name="Header.name">ts</stringProp><stringProp name="Header.value">${ts}</stringProp></elementProp></collectionProp></HeaderManager><hashTree/></hashTree><ResultCollector guiclass="ViewResultsFullVisualizer" testclass="ResultCollector" testname="查看结果树"><boolProp name="ResultCollector.error_logging">false</boolProp><objProp><name>saveConfig</name><value class="SampleSaveConfiguration"><time>true</time><latency>true</latency><timestamp>true</timestamp><success>true</success><label>true</label><code>true</code><message>true</message><threadName>true</threadName><dataType>true</dataType><encoding>false</encoding><assertions>true</assertions><subresults>true</subresults><responseData>false</responseData><samplerData>false</samplerData><xml>false</xml><fieldNames>true</fieldNames><responseHeaders>false</responseHeaders><requestHeaders>false</requestHeaders><responseDataOnError>false</responseDataOnError><saveAssertionResultsFailureMessage>true</saveAssertionResultsFailureMessage><assertionsResultsToSave>0</assertionsResultsToSave><bytes>true</bytes><sentBytes>true</sentBytes><url>true</url><threadCounts>true</threadCounts><idleTime>true</idleTime><connectTime>true</connectTime></value></objProp><stringProp name="filename"></stringProp></ResultCollector><hashTree/></hashTree></hashTree></hashTree>
</jmeterTestPlan>
对应应用截图