jmeter 创建100个现场组,每个线程组里面有1个http请求,http接口内容为读取CSV文件
思路:先读取csv文件,将数据放到list数组里;再创建线程组和接口并填写数据
import org.apache.jmeter.control.LoopController import org.apache.jmeter.protocol.http.sampler.HTTPSamplerProxy import org.apache.jmeter.testelement.TestPlan import org.apache.jmeter.threads.ThreadGroup import org.apache.jorphan.collections.HashTree import org.apache.jmeter.save.SaveService import org.apache.jmeter.testelement.TestElement import java.io.FileOutputStream import java.nio.file.Files import java.nio.file.Paths import java.util.stream.Collectorsdef filePath = Paths.get("C:/Users/yxchun/Desktop/imedia/imedia.csv")List<String> csvLines = []if (Files.exists(filePath)) {// 使用Java 8 Stream API读取csvLines = Files.lines(filePath).filter { line -> line.trim() && !line.trim().startsWith("#") }.map { line -> line.trim() }.collect(Collectors.toList())log.info("使用NIO读取CSV文件,共 ${csvLines.size()} 行数据")} else {log.error("CSV文件不存在")}// 显示统计信息log.info("数据统计:")log.info("总行数: ${csvLines.size()}")if (!csvLines.isEmpty()) {log.info("第一行: ${csvLines[0]}")log.info("最后一行: ${csvLines[-1]}")}try {log.info("开始创建符合规范的JMX文件...")log.info("使用: ${csvLines[0]}")// 初始化SaveService SaveService.loadProperties()// 创建测试计划 - 使用JMeter的标准方式def testPlan = new TestPlan("标准测试计划")testPlan.setEnabled(true)testPlan.setProperty(TestElement.GUI_CLASS, "TestPlanGui")testPlan.setProperty(TestElement.TEST_CLASS, "TestPlan")def testPlanTree = new HashTree()testPlanTree.add(testPlan)def threadGroupsTree = new HashTree()// 创建3个线程组,如果创建100个,将3写成100(1..3).each { i ->// 创建循环控制器def loopController = new LoopController()loopController.setEnabled(true)loopController.setName("Loop Controller")loopController.setLoops(1)loopController.setContinueForever(false)loopController.setProperty(TestElement.GUI_CLASS, "LoopControlPanel")loopController.setProperty(TestElement.TEST_CLASS, "LoopController")// 创建线程组def threadGroup = new ThreadGroup()threadGroup.setEnabled(true)threadGroup.setName("线程组-${i}")threadGroup.setNumThreads(1)threadGroup.setRampUp(1)threadGroup.setScheduler(false)threadGroup.setProperty(TestElement.GUI_CLASS, "ThreadGroupGui")threadGroup.setProperty(TestElement.TEST_CLASS, "ThreadGroup")threadGroup.setProperty("ThreadGroup.on_sample_error", "continue")threadGroup.setSamplerController(loopController)// 创建HTTP请求def httpSampler = new HTTPSamplerProxy()httpSampler.setEnabled(true)httpSampler.setName("HTTP请求-${i}")httpSampler.setDomain("example.com")httpSampler.setPort(443)httpSampler.setProtocol("https")// 使用${csvLines[i]}拿到内容httpSampler.setPath("${csvLines[i]}")httpSampler.setMethod("POST")httpSampler.setFollowRedirects(true)httpSampler.setUseKeepAlive(true)httpSampler.setProperty(TestElement.GUI_CLASS, "HttpTestSampleGui")httpSampler.setProperty(TestElement.TEST_CLASS, "HTTPSamplerProxy")// 构建正确的树结构def loopTree = new HashTree()loopTree.add(httpSampler)def tgTree = new HashTree()tgTree.add(loopController, loopTree)threadGroupsTree.add(threadGroup, tgTree)log.info("创建线程组-${i}")}testPlanTree.add(threadGroupsTree)// 保存文件def outputFile = new File("1_standard_test_plan.jmx")FileOutputStream fos = new FileOutputStream(outputFile)SaveService.saveTree(testPlanTree, fos)fos.close()def result = "✅ 标准JMX文件创建成功: ${outputFile.absolutePath}"log.info(result)SampleResult.responseData = resultSampleResult.successful = true} catch (Exception e) {def error = "❌ 创建失败: ${e.message}"log.error(error, e)SampleResult.responseData = errorSampleResult.successful = false }
本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mzph.cn/news/949713.shtml
如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!