基于Jmeter和Jenkins搭建性能测试框架

news2024/12/29 9:07:15

搭建这个性能测试框架是希望能够让每个人(开发人员、测试人员)都能快速的进行性能测试,而不需要关注性能测试环境搭建过程。因为,往往配置一个性能环境可能需要很长的时间。

1、性能测试流程

该性能测试框架工作的流程主要有:触发测试–>部署测试脚本–>部署被测系统–>Jmeter打压–>被测系统日志分析,5个阶段。 
体现在Jenkins上,就是下面这个jenkins 的MultiJob Project——Performance-test-jobs: 

注意:在选择Performance-test-jobs的构建步骤时,要选择Conditional steps(multiple)。

下面对该性能测试框架搭建的过程进行详细的介绍。

2、环境需求

 

整个测试框架需要以下机器: 
1)jenkins master:用于管理测试机、建立性能测试job、启动性能测试、展示性能测试结果。 
2)Load generator:用来给被测试服务器发送请求,当一台Load generator发送的并发请求数达不到测试要求时,可能需要配置多台。Setup ENV阶段的Performance-test-script-deployment以及Run test阶段的job都是运行在这机器上的。 
3)被测试服务器:用于安装被测试服务的机器,分析被测试服务的log的job也是运行在这个机器上的。 
其中,Load generator和被测试服务器都是作为slave节点挂载在jenkins master上的。

3、安装必要软件

3.1、安装Jenkins及插件

安装Jenkins的步骤,这里不展开讲了。这里主要介绍一下与性能测试有关的jenkins插件——Performance Plugin。这个插件的作用是解析Jmeter生成的测试报告,直观的展示出来。 
安装插件的方法很简单,登陆Jenkins,在Manage Plugins界面搜索“Performance Plugin”点击安装即可。 
如果安装正确,在性能测试job的配置页面的 “Add post-build action” 步骤里面能够看到 “Publish Performance Test Result Report” 选项。

3.2、Jmeter安装及配置

在性能测试压力机上,下载并安装Jmeter(下载地址:Apache JMeter - Download Apache JMeter),解压到目录/usr/local。[下载二进制的] 
之后,下载jmeter-plugins插件JMeterPlugins-Standard-1.2.0.zip(下载地址Install :: JMeter-Plugins.org)。 
解压后将其中的jar包拷贝至jmeter安装目录/lib/ext/目录(如果没有则创建之)下即可。 
这个插件的作用是,当通过no-GUI方式执行测试之后,将生成的测试结果文件*.jtl解析成图片的形式,比较直观。

3.3、安装系统资源监控插件

为了监控被测服务器的系统资源,需要在被测试机上安装ServerAgent,下载ServerAgent-2.2.1.zip(下载地址Install :: JMeter-Plugins.org),并在被测试机上启动startAgent.sh。该插件能够对服务器的 CPU、内存、Swap、磁盘 I/O、网络 I/O 进行监控!

4、Jmeter GUI上制定测试计划

我们的测试执行实在Jenkins中通过非GUI方式执行Jmeter压力测试的。在JmeterGUI上制定测试计划的目的是,将测试计划保存成.jmx文件,以便能够在Jmeter的非GUI模式下执行测试。

4.1、建立Thread Group

有三个必须设置的属性(见下图红框部分),这里采用函数__P()设置属性名和默认值的形式设置这三个属性,以方便在使用no-GUI模式启动Jmeter进行测试时,使用–jmeterproperty选项对属性值进行赋值。 

4.2、添加HTTP Request

由于我们的测试是发送HTTP请求给Serving服务器,因此这里选择添加的Sampler是HTTP Request。 
这里需要添加被测服务器的域名或者网址,这里也采用函数__P()设置属性名和默认值的形式设置这个属性。 

另外,还要设置请求的具体地址Path。由于我们测试过程中请求的网址是不一样的。因此需要需要对这个Path进行参数化,指定为变量${path}。又由于我们请求的网址是存放到一个叫作path.log的文件中的。因此,参数化的方法适宜采用CSV Data Set Config。这里Filename我们设置为属性UrlFile,该属性可以在使用no-GUI模式启动Jmeter进行测试时,使用–jmeterproperty选项指定具体的文件。 


 

4.3、添加Listener

在TestPlan上右击,Add–>Listener–>Aggregate Report。 
另外,添加了PerfMon Metrics Collector的Listner,来收集被测试机的CPU,memory信息。 


可以指定将report保存到某个文件,如上图中所示保存到jtl文件,在非GUI模式下运行Jmeter这是非常必要的。

 

4.4、生成测试计划jmx文件

一切设置妥当之后,点击菜单栏上的File->Save Test Plan As. 
此步骤可以将该Test Plan保存为.jmx格式的文件。该文件用来进行non-GUI方式进行Jmeter测试。 

5、non-GUI方式执行Jmeter

non-GUI方式执行Jmeter的命令:

jmeter.sh -n -t test.jmx -l result.jtl \

--jmeterproperty threadCount=${CONCURRENCY} \

--jmeterproperty LoopCount=${LOOPCOUNT} \

--jmeterproperty adclient=${SERVER} \

--jmeterproperty UrlFile=path.log \

--jmeterproperty RampUp=${RAMPUP} \

--jmeterproperty throughput=${THROUGHPUT}

说明: 
-n 非 GUI 模式 -> 在非 GUI 模式下运行 JMeter 
-t 测试文件 -> 要运行的 JMeter 测试脚本文件 
-l 日志文件 -> 记录结果的文件 
–jmeterproperty设置test.jmx中的属性(见“Jmeter GUI上制定测试计划”部分)

6、生成报告图表

我们可以通过Jenkins上安装的JMeterPlugins-Standard插件来将测试结果文件.jtl格式的文件解析成图表。

$JMETEREXT= /usr/local/apache-jmeter-2.13/lib/ext

java -jar $JMETEREXT/CMDRunner.jar  --tool Reporter \

--generate-png ResponseTimesOverTime.png --input-jtl result.jtl  --plugin-type ResponseTimesOverTime

java -jar $JMETEREXT/CMDRunner.jar  --tool Reporter \

--generate-png CPU.png --input-jtl cpu.jtl  --plugin-type PerfMon

java -jar $JMETEREXT/CMDRunner.jar  --tool Reporter \

--generate-png MEM.png --input-jtl  mem.jtl  --plugin-type PerfMon

java -jar $JMETEREXT/CMDRunner.jar  --tool Reporter \

--generate-png TransactionsPerSecond.png --input-jtl  trans.jtl  --plugin-type TransactionsPerSecond

7、job shell设置

Jenkins的job中通过参数传递给jmeterproperty中的变量中。 
Execute shell的内容:

source /etc/profile

THROUGHPUT=`expr 60 \* ${QPS}`

RUNFOLDER=/usr/local/jmeter-demo/src/test/jmeter

JMETERBIN=/usr/local/apache-jmeter-2.13/bin

JMETEREXT=/usr/local/apache-jmeter-2.13/lib/ext

RESULTJTL=$RUNFOLDER/result.jtl

CPUJTL=$RUNFOLDER/cpu.jtl

MEMJTL=$RUNFOLDER/mem.jtl

TRANSJTL=$RUNFOLDER/trans.jtl

rm -f $RUNFOLDER/path.log

rm -f $RUNFOLDER/*.jtl

rm -f $RUNFOLDER/*.png

rm -f $WORKSPACE/*.png

rm -f $WORKSPACE/*.jtl

cd /usr/local/jmeter-demo/src/test/jmeter && python appending.py ${APPENDING}

cd /usr/local/jmeter-demo/src/test/jmeter && $JMETERBIN/jmeter.sh -n -t test.jmx -l result.jtl \

--jmeterproperty threadCount=${CONCURRENCY} \

--jmeterproperty LoopCount=${LOOPCOUNT} \

--jmeterproperty adclient=${SERVER} \

--jmeterproperty UrlFile=path.log \

--jmeterproperty RampUp=${RAMPUP} \

--jmeterproperty throughput=${THROUGHPUT}

java -jar $JMETEREXT/CMDRunner.jar  --tool Reporter --generate-png ${RESULTJTL%.*}_ResponseTimesOverTime.png --input-jtl  $RESULTJTL  --plugin-type ResponseTimesOverTime

java -jar $JMETEREXT/CMDRunner.jar  --tool Reporter --generate-png ${CPUJTL%.*}_CPU.png --input-jtl  $CPUJTL  --plugin-type PerfMon

java -jar $JMETEREXT/CMDRunner.jar  --tool Reporter --generate-png ${MEMJTL%.*}_MEM.png --input-jtl  $MEMJTL  --plugin-type PerfMon

java -jar $JMETEREXT/CMDRunner.jar  --tool Reporter --generate-png ${TRANSJTL%.*}_TransactionsPerSecond.png --input-jtl  $TRANSJTL  --plugin-type TransactionsPerSecond

cp /usr/local/jmeter-demo/src/test/jmeter/*.png $WORKSPACE

cp /usr/local/jmeter-demo/src/test/jmeter/result.jtl $WORKSPACE

感谢每一个认真阅读我文章的人,礼尚往来总是要有的,虽然不是什么很值钱的东西,如果你用得到的话可以直接拿走:


这些资料,对于【软件测试】的朋友来说应该是最全面最完整的备战仓库,这个仓库也陪伴上万个测试工程师们走过最艰难的路程,希望也能帮助到你!有需要的小伙伴可以点击下方小卡片领取

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.coloradmin.cn/o/985055.html

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈,一经查实,立即删除!

相关文章

【代码随想录】dfs和bfs (所有可能的路径、岛屿数量)

所有可能的路径&#xff1a; 力扣&#xff08;LeetCode&#xff09;官网 - 全球极客挚爱的技术成长平台 class Solution { public:vector<int> path;vector<vector<int>> result;void dfs(vector<vector<int>> graph, int x){//1 确认递归函数…

Java日志框架的扛把子 - SLF4J - SLF4J的原理和实践

1. Java世界中的日志框架 Java世界中的日志框架 其中&#xff0c;slf4j和jcl属于门面日志框架&#xff0c;而其它的几个则是真正干活的ddidic底层日志框架。冷知识&#xff1a;其中标红的日志框架&#xff0c;它们的作者是同一人。不同的日志框架&#xff0c;API接口往往也不一…

解锁前端Vue3宝藏级资料 第一章 带你深入了解Vue3项目创建 2 (使用 Webpack 5 搭建 vue项目)

在之前的文章中&#xff0c;我们已经了解了如何使用Vue CLI来创建Vue项目的开发环境。现在&#xff0c;大家已经可以轻松地运用Vue CLI来构建自己的Vue项目了。然而&#xff0c;你可能仍然对背后的工作原理感到困惑。接下来&#xff0c;我将引导你们在不使用Vue CLI的情况下&am…

Python超入门(1)__迅速上手操作掌握Python

# 1.第一个代码&#xff1a;输出语句 # 1.第一个代码&#xff1a;输出语句 print("My dogs name is Huppy!") print(o----) print( ||| ) print("*" * 10) """ 输出结果&#xff1a; My dogs name is Huppy! o----||| ********** "&…

私有化部署即时通讯平台,完美替代飞书和钉钉的SaaS系统

在当今快速发展的数字化时代&#xff0c;企业对于安全、灵活、可定制的即时通讯平台需求不断增长。作为一家领先的品牌&#xff0c;WorkPlus专注于提供私有化部署的即时通讯平台&#xff0c;完美替代飞书和钉钉的SaaS系统。本文将重点介绍WorkPlus如何通过创新的解决方案&#…

2023高教社杯数学建模B题思路分析 - 多波束测线问题

# 1 赛题 B 题 多波束测线问题 单波束测深是利用声波在水中的传播特性来测量水体深度的技术。声波在均匀介质中作匀 速直线传播&#xff0c; 在不同界面上产生反射&#xff0c; 利用这一原理&#xff0c;从测量船换能器垂直向海底发射声波信 号&#xff0c;并记录从声波发射到…

【MATLAB第72期】基于MATLAB的LightGbm(LGBM)梯度增强决策树多输入多输出回归预测模型

【MATLAB第72期】基于MATLAB的LightGbm(LGBM)梯度增强决策树多输入多输出回归预测模型 一、学习资料 (LGBM)是一种基于梯度增强决策树(GBDT)算法。 往期研究了多输入单输出回归预测方法&#xff0c;本次研究多输入多输出回归预测。 参考链接&#xff1a; lightgbm原理参考链…

高德地图API使用教程

高德地图API使用教程 开发前准备获取key值和相关安全密钥 简单使用需求开发h5范围打卡-vue3地图选点-vue3 开发前准备 获取key值和相关安全密钥 进入高德开放平台 https://lbs.amap.com/ 登录后&#xff0c;打开我的应用&#xff08;无账号要先注册&#xff09; 打开我的应用…

3dsmax 蒙皮替换骨架

需求 本文描述部分来源于 TAZORN&#xff0c;最后附上Python实现 保留蒙皮信息&#xff0c;将骨骼替换成新的骨架模型M上的Skin目前指定的是骨架A&#xff0c;在蒙皮信息不变的情况 下更换成骨架B 替换的操作需要用到 SkinUtilities 工具 手动进行骨骼替换的方法 Snapshot原…

maven打包时显示无效jdk版本

1、配置当前项目所需的Jdk版本 2、与当前项目指定的jdk版本相同 3、与当前项目指定的jdk版本相同 4、与当前项目指定的jdk版本相同 5、指定主项目启动时的vm配置与当前项目所需版本相同

手写Spring:第18章-数据类型转换工厂设计实现

文章目录 一、目标&#xff1a;数据类型转换工厂二、设计&#xff1a;数据类型转换工厂三、实现&#xff1a;数据类型转换工厂3.1 工程结构3.2 数据类型转换工厂类图3.3 定义类型转换接口3.3.1 类型转换处理接口3.3.2 类型转换工厂3.3.3 通用类型转换接口3.3.4 类型转换注册接口…

共筑安全防线|与安全狗相约2023年国家网络安全宣传周

在《关于网络安全和信息化工作重要指示》里 “坚持筑牢国家网络安全屏障”被提及 网络安全的重要性再次被重申 实际上 在“十四五”数字经济发展规划及“二十大”上 网络安全也被多次强调 “网络安全”不再简单停留在字面意思上 它成为囊括 你我个人隐私安全、信息安全 …

Linux:LVS (NAT群集搭建)

模拟环境 外网入口服务器 外网 192.168.8.88 内网ip 192.168.254.4 web1 服务器 ip 192.168.254.1 网关&#xff1a; 192.168.254.4 web2 服务器 ip 192.168.254.2 网关&#xff1a; 192.168.254.4 共享存储服务器 ip 192.168.254.3 介绍 访问 外网192.16…

方案:TSINGSEEE青犀AI智能分析网关森林防火智慧监管平台方案

一、方案背景 森林是地球上最重要的生态系统之一&#xff0c;对环境、气候、水循环和空气质量具有重要影响。森林火灾会造成巨大的经济损失&#xff0c;具有发生面广、突发性强、破坏性大、危险性高、处置扑救特别困难等特点&#xff0c;严重危及人民生命财产和森林资源安全&a…

video标签自动播放音视频并绘制波形图

html中的<video>标签可以用来播放常见的音视频格式&#xff0c;支持的格式包括:MP3、Ogg、WAV、AAC、MP4、WebM、AVI等&#xff0c;当然支持的格式也和浏览器和操作系统有关。这里以一个可以自动播放音视频并绘制波形图的页面为例说明一下<video>标签的用法。 vid…

NPM使用技巧

NPM使用技巧 前言技巧全局模块位置PowerShell报错安装模块冲突 NPM介绍NPM命令使用方法基本命令模块命令查看模块运行命令镜像管理 常用模块rimrafyarn 前言 本文包含NodeJS中NPM包管理器的使用技巧&#xff0c;具体内容包含NPM介绍、NPM命令、常用模块等内容&#xff0c;还包…

Android开发常见问题:字符串乱码问题

前言 最近的项目里遇到了字符串乱码的问题&#xff0c;记录一下研究心得。 正文 一、byte数组如何保存字符串 通常情况下&#xff0c;数据的传输和读取都是通过socket&#xff0c;读取socket需要使用byte数组&#xff0c;例如要写入一个字符串到socket中&#xff0c;我们需…

Redis-带你深入学习数据类型Hash【面试重点】

目录 1、基础知识 2、相关命令 2.1、hset、hget 2.2、hexists 2.3、hdel 2.4、hkeys、hvals、hgetall 2.5、hmget、hmset 2.6、hlen 2.7、hsetNX 2.8、Hincrby、Hincrbyfloat 3、应用场景-缓存 4、缓存方式对比 1、基础知识 redis中存储数据本身就是以键值对的形式…

华为OD机试 - 真正的密码 - 数据结构list(Java 2023 B卷 100分)

目录 专栏导读一、题目描述二、输入描述三、输出描述四、解题思路具体解题思路&#xff1a; 五、Java算法源码六、效果展示1、输入2、输出 华为OD机试 2023B卷题库疯狂收录中&#xff0c;刷题点这里 专栏导读 本专栏收录于《华为OD机试&#xff08;JAVA&#xff09;真题&#…

智慧商城项目

智慧商城 - 授课大纲 接口文档&#xff1a;https://apifox.com/apidoc/shared-12ab6b18-adc2-444c-ad11-0e60f5693f66/doc-2221080 演示地址&#xff1a;http://cba.itlike.com/public/mweb/#/ 01. 项目功能演示 1.明确功能模块 启动准备好的代码&#xff0c;演示移动端面…