跳到主要内容

JMeter脚本导入

业务场景

用户通过脚本导入,可直接上传用户在JMeter客户端中写好的复杂脚本,通过平台来完成脚本的运行,从而满足复杂场景的需求。

前提条件

  • 平台部署完成,批量数据服务正常
  • 用户拥有批量数据模块权限
  • 用户已安装JMeter客户端

使用限制

  • 平台仅提供JMeter脚本运行能力,不支持在平台上直接编辑JMeter脚本

操作流程

第一步:在“脚本导入”节点配置目标表
选择数据开发 > 批量数据 > 数据加工将脚本导入节点拖动到右侧作业画布中;双击打开脚本导入节点,右侧选中要导入数据的数据表。
此时系统会自动在左侧生成访问地址和请求数据格式样例。【注意:访问地址和当前节点和数据表严格绑定,即地址仅可访问当前节点所选的数据表】 脚本导入

第二步:在JMeter客户端配置平台接口及脚本调试
打开JMeter客户端,创建执行计划,将平台提供的接口信息填入相应配置。

注意
  • 协议:http、https均可
  • 服务器名称或IP:将生成的访问地址前面部分的网址填入其中,如下方示例的地址,只需填写“luban-dev.hexadb.com”
    从平台复制的访问地址示例 https://luban-dev.hexadb.com/api/integration/jmeter/import/1761938705385902082/1759840311425691649
  • 端口号:若实际环境中有端口号则需填写,否则可不填
  • 请求方式:只可选择“POST”
  • 路径:填写访问地址中除去在“服务器名称或IP”中已填写部分
  • 消息体数据:可将平台生成的请求数据格式样例复制其中,并配置各字段的数据实际来源,可为变量,也可为上游取数接口,请按实际填写

第三步:在JMeter客户端保存脚本并上传至平台
根据实际使用进行脚本编写后保存,会在本地生成一个.jmx后缀的脚本文件。同时可在JMeter客户端运行查看结果,以保证脚本能成功执行。
然后将脚本文件上传至平台以完成脚本节点的配置,最后还需配置作业的调度周期,并上线作业,即可周期性运行作业。 脚本导入

第四步:作业级配置
1)在当前作业画布右上角,点击【试运行】可验证当前作业配置是否正确,能够正常运行。

2)试运行成功后,并对当前作业完成调度配置后,再点击【上线】即可上线作业。

第五步:运维监控

1)调度管理:在运维监控_调度管理找到对应作业,点击【查看作业任务】可查看运行详情,主要信息包含作业任务调度明细、各调度的运行结果、日志下载、节点任务血缘等。 最佳实践 最佳实践 2)告警通知:若需监控作业状态,特别是运行失败,可在个人中心 > 消息通知中配置告警,支持邮件、钉钉群通知。对象类型选择“数据加工”、对象名称填写需监控的作业名称,通知类型选择“作业运行”,作业运行失败时,可发送消息通知。 最佳实践

JMeter脚本示例

<?xml version="1.0" encoding="UTF-8"?>
<jmeterTestPlan version="1.2" properties="5.0" jmeter="5.6.2">
<hashTree>
<TestPlan guiclass="TestPlanGui" testclass="TestPlan" testname="数据同步" enabled="true">
<boolProp name="TestPlan.functional_mode">false</boolProp>
<boolProp name="TestPlan.tearDown_on_shutdown">false</boolProp>
<boolProp name="TestPlan.serialize_threadgroups">false</boolProp>
<elementProp name="TestPlan.user_defined_variables" elementType="Arguments" guiclass="ArgumentsPanel" testclass="Arguments" testname="用户定义的变量" enabled="true">
<collectionProp name="Arguments.arguments"/>
</elementProp>
</TestPlan>
<hashTree>
<ThreadGroup guiclass="ThreadGroupGui" testclass="ThreadGroup" testname="线程组" enabled="true">
<stringProp name="ThreadGroup.on_sample_error">continue</stringProp>
<elementProp name="ThreadGroup.main_controller" elementType="LoopController" guiclass="LoopControlPanel" testclass="LoopController" testname="循环控制器" enabled="true">
<stringProp name="LoopController.loops">1</stringProp>
<boolProp name="LoopController.continue_forever">false</boolProp>
</elementProp>
<stringProp name="ThreadGroup.num_threads">1</stringProp>
<stringProp name="ThreadGroup.ramp_time">1</stringProp>
<boolProp name="ThreadGroup.delayedStart">false</boolProp>
<boolProp name="ThreadGroup.scheduler">false</boolProp>
<stringProp name="ThreadGroup.duration"></stringProp>
<stringProp name="ThreadGroup.delay"></stringProp>
<boolProp name="ThreadGroup.same_user_on_next_iteration">true</boolProp>
</ThreadGroup>
<hashTree>
<HTTPSamplerProxy guiclass="HttpTestSampleGui" testclass="HTTPSamplerProxy" testname="数据同步" enabled="true">
<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">{&quot;name&quot;:&quot;hello&quot;,&quot;age&quot;:12}</stringProp>
<stringProp name="Argument.metadata">=</stringProp>
</elementProp>
</collectionProp>
</elementProp>
<stringProp name="HTTPSampler.domain">127.0.0.1</stringProp>
<stringProp name="HTTPSampler.port">8080</stringProp>
<stringProp name="HTTPSampler.protocol">http</stringProp>
<stringProp name="HTTPSampler.path">/api/integration/jmeter/import/1752267177042059265/1749358591425441794</stringProp>
<stringProp name="HTTPSampler.method">GET</stringProp>
<boolProp name="HTTPSampler.follow_redirects">true</boolProp>
<boolProp name="HTTPSampler.auto_redirects">false</boolProp>
<boolProp name="HTTPSampler.use_keepalive">true</boolProp>
<boolProp name="HTTPSampler.DO_MULTIPART_POST">false</boolProp>
<boolProp name="HTTPSampler.BROWSER_COMPATIBLE_MULTIPART">false</boolProp>
<boolProp name="HTTPSampler.image_parser">false</boolProp>
<boolProp name="HTTPSampler.concurrentDwn">false</boolProp>
<stringProp name="HTTPSampler.concurrentPool">6</stringProp>
<boolProp name="HTTPSampler.md5">false</boolProp>
<intProp name="HTTPSampler.ipSourceType">0</intProp>
</HTTPSamplerProxy>
<hashTree/>
</hashTree>
</hashTree>
</hashTree>
</jmeterTestPlan>