当前位置: 首页 > article >正文

基于Jmeter的性能测试框架搭建

谈到性能测试部分公司连专门用于性能测试的环境都没有更别提性能测试框架/平台了。下面笔者就“基于Jmeter的性能测试框架搭建”这个话题谈谈自己的一些想法。工具JmeterInfluxdbGrafanaTelegrafJenkinsAntGitlab理念测试人员只需专注脚本编写及性能结果分析。脚本提交Gitlab后自动触发构建性能结果实时展现。性能测试脚本统一管理。性能测试框架实现方法依赖Jmeter的Backend Listener监听器采集tps,响应时间cpu,内存等信息至Influxdb时序数据库然后再通过Grafana展现性能结果。依赖Jenkins的webhook插件监听push事件即push脚本至gitlab则触发Ant构建。一、脚本上传小工具开发压测小工具开始构建为了简便测试人员操作特开发此压测小工具实现功能如下上传脚本前初始化本地git仓库。克隆git仓库。根据上传的脚本修改build.xml文件。push脚本和build.xml文件。使用JGit访问Gitlabdom4j处理xml文件。pom.xml配置如下?xml version1.0 encodingUTF-8? project xmlnshttp://maven.apache.org/POM/4.0.0 xmlns:xsihttp://www.w3.org/2001/XMLSchema-instance xsi:schemaLocationhttp://maven.apache.org/POM/4.0.0 http://maven.apache.org/xsd/maven-4.0.0.xsd modelVersion4.0.0/modelVersion groupIdcom.tool/groupId artifactIdperformanceTestTool/artifactId version1.0-SNAPSHOT/version build plugins plugin groupIdorg.apache.maven.plugins/groupId artifactIdmaven-compiler-plugin/artifactId configuration source6/source target6/target /configuration /plugin /plugins /build repositories repository idjgit-repository/id urlhttps://repo.eclipse.org/content/groups/releases//url /repository /repositories !-- Core Library -- dependencies dependency groupIdorg.eclipse.jgit/groupId artifactIdorg.eclipse.jgit/artifactId version4.11.0.201803080745-r/version /dependency !-- Smart HTTP Servlet -- dependency groupIdorg.eclipse.jgit/groupId artifactIdorg.eclipse.jgit.http.server/artifactId version4.11.0.201803080745-r/version /dependency !-- AWT UI Helpers -- dependency groupIdorg.eclipse.jgit/groupId artifactIdorg.eclipse.jgit.ui/artifactId version4.11.0.201803080745-r/version /dependency !-- JUnit Test Support -- dependency groupIdorg.eclipse.jgit/groupId artifactIdorg.eclipse.jgit.junit/artifactId version4.11.0.201803080745-r/version /dependency dependency groupIddom4j/groupId artifactIddom4j/artifactId version1.6.1/version /dependency /dependencies /projectclone项目至本地仓库public static void cloneProject() throws Exception { //每次clone前先初始化 Util.deletefile(localProject); File file new File(localProject); try { //克隆代码库命令 CloneCommand cloneCommand Git.cloneRepository(); cloneCommand.setURI(remoteRepoURI) //设置远程URI .setBranch(master) //设置clone下来的分支 .setDirectory(file) //设置下载存放路径 .setCredentialsProvider(usernamePasswordCredentialsProvider) .call(); } catch (GitAPIException e) { e.printStackTrace(); } }pull操作public static void pullFiles() throws IOException, GitAPIException { //git仓库地址 Git git new Git(new FileRepository(localProject/.git)); git.pull().setRemoteBranchName(master). setCredentialsProvider(usernamePasswordCredentialsProvider).call(); }push 操作public static void pushFiles(String filePath,String commitMess) throws IOException, GitAPIException { File fileFrom new File(filePath); File fileTemp new File(localProject); File fileTo new File(fileTemp.getAbsolutePath()/fileFrom.getName()); fileTo.createNewFile(); Util.copyFiles(fileFrom,fileTo); //拷贝脚本文件至git本地仓库 Repository rep new FileRepository(localProject\\.git); Git git1 new Git(rep); git1.add().addFilepattern(fileFrom.getName()).call(); //此处必须使用本地仓库中需推送的文件名 git1.add().addFilepattern(build.xml).call(); //push修改后的build文件 //提交 git1.commit().setMessage(commitMess).call(); git1.push().setCredentialsProvider(usernamePasswordCredentialsProvider).call(); }build.xml文件配置?xml version1.0 encodingUTF-8 standaloneno? project basedir. defaultrun nameAnt tstamp format patternyyyyMMddhhmm propertytime/ /tstamp !-- jmeter路径-- property namejmeter.home valueD:\tools\PerformanceTesting\Jmeter_influxdb_grafana\apache-jmeter-3.1/ !-- jmeter jtl测试报告生成路径-- property namejmeter.result.jtl.dir valueD:\tools\PerformanceTesting\Jmeter_influxdb_grafana\apache-jmeter-3.1\TestCase\report\jtl/ !-- jmeter html测试报告生成路径-- property namejmeter.result.html.dir valueD:\tools\PerformanceTesting\Jmeter_influxdb_grafana\apache-jmeter-3.1\TestCase\report\html/ !-- 参数化-- property nameReportName valueTestReport/ property namejmeter.result.jtlName value${jmeter.result.jtl.dir}/${ReportName}${time}.jtl/ property namejmeter.result.htmlName value${jmeter.result.html.dir}/${ReportName}${time}.html/ target namerun antcall targettest/ !--性能脚本构建时生成报告时间太长注释掉 -- !-- antcall targetreport/ -- /target target nametest taskdef classnameorg.programmerplanet.ant.taskdefs.jmeter.JMeterTask namejmeter/ jmeter jmeterhome${jmeter.home} resultlog${jmeter.result.jtlName} !-- 构建路径与jenkins上工作空间配置保持一致 -- testplans dirD:\tools\PerformanceTesting\Jmeter_influxdb_grafana\apache-jmeter-3.1\TestCase\jenkins_jobworkspace includes测试.jmx/ property namejmeter.save.saveservice.output_format valuexml/ /jmeter /target target namereport xslt in${jmeter.result.jtlName} out${jmeter.result.htmlName} style${jmeter.home}/extras/jmeter.results.shanhe.me.xsl/ !-- 测试报告-- copy todir${jmeter.result.html.dir} fileset dir${jmeter.home}/extras include namecollapse.png/ include nameexpand.png/ /fileset /copy /target /project通过分析上面的build.xml文件发现构建脚本由includes的值来定义如果值为“*.jmx”则会构建dir目录下所有的jmx文件。由于我们只需构建上传的脚本那有必要修改build文件使includes的值等于上传的脚本名称。testplans dirD:\tools\PerformanceTesting\Jmeter_influxdb_grafana\apache-jmeter-3.1\TestCase\jenkins_jobworkspace includes测试.jmx/修改build文件的includes值public static void modifyBuild(String filePath,String modifyName) throws ParserConfigurationException, IOException, SAXException { DocumentBuilderFactory dbf DocumentBuilderFactory.newInstance(); DocumentBuilder db dbf.newDocumentBuilder(); Document doc db.parse(new File(filePath)); // 读取xml文件 NodeList targetList doc.getElementsByTagName(testplans); //获取testplans节点 for (int i 0; i targetList.getLength(); i) { Node case_node targetList.item(i); // 第一个caseNo节点 Element elem0 (Element) case_node; // caseNo节点对象 String target_name elem0.getAttribute(includes); System.out.println(修改前includes target_name); // 节点属性 elem0.setAttribute(includes,modifyName); String target_name1 elem0.getAttribute(includes); System.out.println(修改后includes target_name1); // 节点属性 } saveXml(filePath, doc); }至此第一阶段的工作已完成。当然你也可以通过Git bash来push脚本触发构建但是你得另外想办法来控制脚本的构建因为Ant是根据build.xml文件来指定构建哪些脚本的。二、配置Jenkins,Gitlab安装jenkins插件。Ant PluginGit pluginGitLab PluginGitlab Hook Plugin可以在线安装也可以下载本地安装下载地址。jenkins-系统配置-全局工具配置。配置jdk,git,ant。jenkins-项目-配置。自定义空间与build.xml设置的构建路径保持一致jenkins构建时会把git仓库pull到该路径下。testplans dirD:\tools\PerformanceTesting\Jmeter_influxdb_grafana\apache-jmeter-3.1\TestCase\jenkins_jobworkspace includes测试.jmx/AI写代码注意下图的Targets需同build.xml文件一致。target namerun antcall targettest/ !--性能脚本构建时生成报告时间太长注释掉 -- !-- antcall targetreport/ -- /target构建由于依赖webhook 来监听push事件触发构建拷贝下图的URL并在“高级”选项中生成“Secret token”后续在gitlab添加webhook。构建触发器构建触发器gitlab-webhook配置。由于只需监听push事件所有下图只勾选了Push events“”。添加webhook后点击“Test”进行测试如果返回200/201则表明webhook配置成功。webhookwebhook-test如果不想使用Secret token配置webhook也可按以下方式来配置打开jenkins的“设置”页面找到API Token然后在gitlab上添加webhook url即可结构如下图2所示(UserId:APITokenjenkins构建器url)。API Tokenwebhook.png三、配置Influxdb,Grafana,TelegrafInfluxdbGrafanaTelegraf在笔者的另一篇文章Jmeter排忧解难—性能测试 监控有提及百度也大把文章此处不再详述。四、编写测试脚本使用jmeter编写一个简单的测试脚本来进行测试主要依赖Backend Listener监听器来集成influxdb。测试脚本测试脚本五、性能结果分析运行“一、脚本上传小工具开发”提及的压测小工具就可以对性能结果做实时监控了。下图1仅对tps和响应时间做采集由于笔者未在被测服务器上安装Telegraf所以cpu,内存等数据暂不采集有兴趣的童鞋可以自行探索。更详细的监控结果如图2所示。性能测试结果性能测试结果六、构建日志登录jenkins可以查看详细的构建日志。Jenkins构建日志后续改进其实以上框架还存在不少待改进之处笔者后续再逐步解决。Grafana性能图表实时展现测试过程中需实时截图形成测试报告不够人性化。解决方案自动生成测试报告并邮件通知。Grafana性能图表需测试人员实时监控人力成本较高。解决方案自动生成测试报告并邮件通知。多脚本构建的话无法区分Grafana展现的性能图表对应哪个脚本。解决方案传参区分脚本并生成每个接口对应的测试报告。如果考虑持续监控可加入预警功能。解决方案依赖Grafana的预警功能。未能自动生成测试报告。解决方案自动生成测试报告并邮件通知。需登录jenkins停止脚本构建操作不够便利。解决方案前端增加停止构建操作。每次只能提交一个脚本进行构建。解决方案支持批量构建。最后下方这份完整的软件测试 视频教程已经整理上传完成需要的朋友们可以自行领取【保证100%免费】​​​软件测试面试文档我们学习必然是为了找到高薪的工作下面这些面试题是来自阿里、腾讯、字节等一线互联网大厂最新的面试资料并且有字节大佬给出了权威的解答刷完这一套面试资料相信大家都能找到满意的工作。

相关文章:

基于Jmeter的性能测试框架搭建

谈到性能测试,部分公司连专门用于性能测试的环境都没有,更别提性能测试框架/平台了。下面,笔者就“基于Jmeter的性能测试框架搭建”这个话题,谈谈自己的一些想法。 工具 Jmeter Influxdb Grafana Telegraf Jenkins Ant Gitlab …...

如何5分钟搞定多游戏模组管理:XXMI启动器的完整解决方案

如何5分钟搞定多游戏模组管理:XXMI启动器的完整解决方案 【免费下载链接】XXMI-Launcher Modding platform for GI, HSR, WW and ZZZ 项目地址: https://gitcode.com/gh_mirrors/xx/XXMI-Launcher 还在为《原神》、《崩坏:星穹铁道》、《绝区零》…...

先进工艺节点下的数字电路库特征化技术与优化策略

1. 数字电路库特征化技术概述在28nm及以下工艺节点的芯片设计中,标准单元库的特征化精度直接影响着时序收敛的成功率。我曾参与过一个7nm移动处理器项目,由于初期库特征化参数偏差0.5ps,导致后端迭代多花费了两个月时间。这个教训让我深刻认识…...

茉莉花插件终极指南:3步彻底解决中文文献管理难题

茉莉花插件终极指南:3步彻底解决中文文献管理难题 【免费下载链接】jasminum A Zotero add-on to retrive CNKI meta data. 一个简单的Zotero 插件,用于识别中文元数据 项目地址: https://gitcode.com/gh_mirrors/ja/jasminum 茉莉花(…...

NVIDIA Isaac Sim 5.0与Isaac Lab 2.2:机器人仿真与训练技术解析

1. NVIDIA Isaac Sim 5.0与Isaac Lab 2.2全面解析:机器人仿真与训练的新纪元在机器人开发领域,仿真环境的重要性不言而喻。它不仅是算法验证的安全沙盒,更是加速研发周期的关键工具。NVIDIA最新发布的Isaac Sim 5.0和Isaac Lab 2.2标志着机器…...

Python时间序列特征工程实战:从基础到高级技巧

1. 时间序列特征工程实战指南在预测分析领域,时间序列数据就像一本被加密的日记,记录着变量随时间变化的秘密。作为一名数据科学家,我经常需要破解这些密码,而特征工程就是我最常用的解码工具。今天要分享的这套时间序列转换方法&…...

Agent 不是替代人,而是重构流程:企业流程再造的落地方法论

Agent 不是替代人,而是重构流程:企业流程再造的落地方法论 封面导语:当所有企业都在讨论「用AI降本裁员」的时候,真正聪明的玩家已经在用智能Agent重构整个业务价值链,把人均产出翻3-5倍。本文基于12个行业、30+Agent落地项目的实战经验,沉淀出可复用的Agent驱动流程再造…...

Java智能地址解析:企业级数据治理的终极架构解决方案

Java智能地址解析:企业级数据治理的终极架构解决方案 【免费下载链接】address-parse Java 版智能解析收货地址 项目地址: https://gitcode.com/gh_mirrors/addr/address-parse 在数字化转型浪潮中,企业面临的最大挑战之一是如何处理非结构化地址…...

【新手教程】2026年OpenClaw/Hermes Agent京东云6分钟简易部署步骤

【新手教程】2026年OpenClaw/Hermes Agent京东云6分钟简易部署步骤。OpenClaw(前身为Clawdbot/Moltbot)作为开源、本地优先的AI助理框架,凭借724小时在线响应、多任务自动化执行、跨平台协同等核心能力,成为个人办公与轻量团队协作…...

VSCode+Ollama+Tabby+Continue——2024最硬核AI编程栈搭建(仅限内部技术白皮书精简版)

更多请点击: https://intelliparadigm.com 第一章:VSCode 大模型插件教程 安装与启用核心插件 在 VSCode 中集成大语言模型能力,首选官方认证插件 GitHub Copilot 或开源替代方案 Tabby(支持本地 Llama 3、Phi-3 等模型&#…...

基于uniapp+springboot的校园失物招领系统的设计与实现(文档+源码)_kaic

第5章 系统实现进入到这个环节,也就可以及时检查出前面设计的需求是否可靠了。一个设计良好的方案在运用于系统实现中,是会帮助系统编制人员节省时间,并提升开发效率的。所以在系统的编程阶段,也就是系统实现阶段,对于…...

四博 AI 智能音箱 4G S3 版本技术方案

下面这版更偏技术方案 原型开发说明 可落地代码骨架,适合放到方案书、技术推广文档、客户交流材料中。代码以 ESP-IDF / ESP32-S3 风格写,重点突出四博方案的工程结构、联网切换、远场拾音、实时打断、MCP 扩展、屏幕异显和客户系统接入。四博 AI 智能…...

Windows 11远程桌面多用户连接终极指南:RDP Wrapper完整解决方案

Windows 11远程桌面多用户连接终极指南:RDP Wrapper完整解决方案 【免费下载链接】rdpwrap RDP Wrapper Library 项目地址: https://gitcode.com/gh_mirrors/rd/rdpwrap 想要在Windows 11家庭版上启用专业版的远程桌面功能吗?RDP Wrapper Library…...

XQuery FLWOR 与 HTML 的融合应用

XQuery FLWOR 与 HTML 的融合应用 引言 在当今信息爆炸的时代,HTML 作为网页标准标记语言,在互联网中扮演着至关重要的角色。而 XQuery,作为一种用于查询和处理 XML 和其他结构化数据的语言,与 HTML 的结合使用为开发者提供了强大的数据操作能力。本文将深入探讨 XQuery …...

SQL分组统计后如何对结果进行二次筛选_深入理解HAVING用法

WHERE 在分组前筛选原始行,HAVING 在分组后筛选聚合结果;HAVING 只能引用 GROUP BY 列、聚合函数、常量及其组合,且必须跟在 GROUP BY 后(或隐式单一分组时)。WHERE 和 HAVING 的区别到底在哪WHERE 是在分组前筛数据&a…...

Kioxia推出面向PC OEM的全新主流KIOXIA BG8系列固态硬盘

新一代客户端固态硬盘产品组合将PCIe 5.0速度带入主流应用 Kioxia Corporation今日宣布推出KIOXIA BG8系列固态硬盘(SSD),这是其面向PC OEM客户的客户端固态硬盘产品线的最新力作。KIOXIA BG8系列将PCIe 5.0的高速性能引入主流市场,兼具新一代技术能力、…...

League Akari终极指南:5分钟掌握英雄联盟智能自动化工具

League Akari终极指南:5分钟掌握英雄联盟智能自动化工具 【免费下载链接】League-Toolkit An all-in-one toolkit for LeagueClient. Gathering power 🚀. 项目地址: https://gitcode.com/gh_mirrors/le/League-Toolkit League Akari是一款基于英…...

首涂第45套模板_苹果CMSv10仿爱奇艺模板

内容目录一、详细介绍二、效果展示1.部分代码2.效果图展示一、详细介绍 首涂第45套模板/苹果CMSv10仿爱奇艺模板 使用说明: 上传到苹果CMS根目录的/template里边解压 到后台自定义菜单添加 快捷菜单 shoutu_45,/template/shoutu45/admin/adm.php 注意去修改/p…...

首涂第四十四套 苹果CMS V10模板源码

内容目录一、详细介绍二、效果展示1.部分代码2.效果图展示一、详细介绍 首涂第四十四套苹果CMSv10模板 后台菜单 shoutu_44,/template/shoutu44/admin/adm.php 更新日志 2025-3-12 修复 模版后台 seo 设置不生效 分类列表《查看更多》只能到指定页面 不能到搜索分类 2025_2_…...

Sonoff Zigbee 3.0 USB Dongle Plus评测与智能家居应用

1. 项目概述:Sonoff Zigbee 3.0 USB Dongle Plus作为智能家居领域的硬件玩家,我最近测试了ITEAD新推出的Sonoff Zigbee 3.0 USB Dongle Plus(以下简称ZBDongle-P)。这款售价仅9.9美元的Zigbee协调器采用德州仪器CC2652P无线MCU芯片…...

日志越多越安全?不优化ELK,你只是在“制造噪音”

日志越多越安全?不优化ELK,你只是在“制造噪音” 日志堆满了磁盘,告警却还是慢半拍。 查询一条错误,要等10秒甚至更久。 你以为自己在做“可观测性”,其实只是——在堆数据。 说句不好听的: 很多团队的ELK,不是监控系统,是“日志坟场”。 一、引子:为什么你的ELK越用…...

暴力枚举就够了?你可能错过了这道题真正的“降维打击”

暴力枚举就够了?你可能错过了这道题真正的“降维打击” 很多人第一次看到这道题——最大单词长度乘积(Maximum Product of Word Lengths),第一反应都是: “不就是两两比较嘛?我会。” 结果代码写完,一跑数据—— 慢得像在拨号上网。 更扎心的是: 你优化了半天,别人一…...

3步搞定Java智能地址解析:告别混乱的收货地址处理难题

3步搞定Java智能地址解析:告别混乱的收货地址处理难题 【免费下载链接】address-parse Java 版智能解析收货地址 项目地址: https://gitcode.com/gh_mirrors/addr/address-parse 你是否曾经为处理用户输入的混乱收货地址而头疼不已?😫…...

DeepSeek V4 刚刚发布!我第一时间体验了:百万上下文+双SDK兼容,API调用实战

DeepSeek V4 刚刚发布!我第一时间体验了:百万上下文双SDK兼容,API调用实战 📅 2026年4月24日 DeepSeek 正式发布 V4 预览版,全系标配百万上下文,同时兼容 OpenAI 和 Anthropic 双 SDK 格式。本文带你快速上…...

告别OpenCV人脸识别,试试用YOLOv8+NCNN在Android上实现实时人像分割(附完整项目导入与避坑指南)

从OpenCV到YOLOv8:Android端高精度人像分割实战指南 当传统计算机视觉技术遇上深度学习模型,移动端图像处理能力正在经历一场革命性升级。如果你已经熟悉OpenCV的人脸检测,现在正是时候探索更强大的YOLOv8分割模型在Android设备上的部署方案。…...

保姆级教程:中科蓝讯AB530X蓝牙芯片工程编译全流程拆解(从prebuild到app.dcf)

中科蓝讯AB530X蓝牙芯片工程编译实战手册:从环境搭建到固件生成 第一次接触中科蓝讯AB530X芯片的SDK开发环境时,面对复杂的编译流程和陌生的工具链,不少开发者都会感到无从下手。这份手册将彻底拆解从prebuild预处理到最终生成app.dcf固件的完…...

汽车电子工程师必看:LIN总线硬件设计中的EMI控制与压摆率实战调优

汽车电子工程师必看:LIN总线硬件设计中的EMI控制与压摆率实战调优 在汽车电子系统的设计中,LIN总线因其成本效益和可靠性成为车身电子控制单元(ECU)间通信的主流选择。然而,随着车载电子设备密度不断增加,电磁兼容性(EMC)问题日益…...

用手机热点和网络调试助手,5分钟搞定ESP8266模块的TCP通信测试

5分钟极简测试:用手机热点快速验证ESP8266的TCP通信能力 刚拿到ESP8266模块时,最让人焦虑的莫过于不确定硬件是否正常工作。我曾见过不少开发者花几小时搭建复杂测试环境,最后发现只是AT指令格式错误。其实要验证基础通信功能,完全…...

避开那些坑!TMS320F28035 CLA编程与调试实战指南(含Debug独门秘籍)

TMS320F28035 CLA编程与调试实战:从语法限制到高效调试的全方位指南 在嵌入式控制系统的开发中,实时性和计算效率往往是决定系统性能的关键因素。德州仪器(TI)的TMS320F28035数字信号处理器通过引入控制律加速器(CLA)这一独特设计,为开发者提…...

如何高效实现B站缓存视频格式转换:m4s-converter完整操作指南

如何高效实现B站缓存视频格式转换:m4s-converter完整操作指南 【免费下载链接】m4s-converter 一个跨平台小工具,将bilibili缓存的m4s格式音视频文件合并成mp4 项目地址: https://gitcode.com/gh_mirrors/m4/m4s-converter m4s-converter是一款专…...