• 博客园logo
  • 会员
  • 众包
  • 新闻
  • 博问
  • 闪存
  • 赞助商
  • HarmonyOS
  • Chat2DB
    • 搜索
      所有博客
    • 搜索
      当前博客
  • 写随笔 我的博客 短消息 简洁模式
    用户头像
    我的博客 我的园子 账号设置 会员中心 简洁模式 ... 退出登录
    注册 登录

yxchun

  • 博客园
  • 联系
  • 订阅
  • 管理

公告

View Post

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.Collectors


    def 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 = result
    SampleResult.successful = true
    
} catch (Exception e) {
    def error = "❌ 创建失败: ${e.message}"
    log.error(error, e)
    SampleResult.responseData = error
    SampleResult.successful = false
}

 

posted on 2025-10-29 11:37  yxchun  阅读(2)  评论(0)    收藏  举报

刷新页面返回顶部
 
博客园  ©  2004-2025
浙公网安备 33010602011771号 浙ICP备2021040463号-3