一、前言

3/14号收到领导的要求搭建出一套性能自动化部署框架给其它业务线进行使用,接到这个通知当时头也挺大的,去年公司服务上云之前还用过pts那一套产品所以对于性能测试这块还是有些自己的见解,但是呢pts那块的确是贵了点所幸用了目前比较受各中小型企业欢迎的jmeter来作为公司的性能自动化框架。

在说搭建之前我先废话两句谈谈自己对于性能自动化的理解看法

  • 对于公司的前后端框架、服务、中间件,DB交互流程你必须有一定的理解,换句话说你应该要知道一个接口的请求下来整体的链路大概是怎样的,这样在你搭建这套部署框架的时候你才能考虑的更周全
  • 目前阿里云pts包括其它收费产品都有提供一套性能压测工具,虽然能够做的一定程度的懒人,白痴化但是你要考虑的是公司研发团队的整体成本,开源jmeter框架能否解决目前公司业务所需,如果可以有免费的为何不用?
  • 任何自动化测试框架是要能测出问题的,除非你们的产品无任何问题,但是这是不可能的,测不出问题的自动化等于就是玩具毫无作用可言,所以在满足第一条的情况下你才能做够的更多
  • 针对本公司中型企业来说日常访问量大概在30W+上下波动,流水大概每天两百万上下,所以说做压测也是有必要的,现在搭起来也能够让公司研发体系的系统架构更加完善
二、部署方案

3/20进行了部署方案的落实,反响还不错都得到领导的认同,也得到一些良好的建议,接下来聊下方案吧

  • 此次搭建的是由jmeter+arms进行结合,从而达到输出效果的最大化,以jmeter为触发点,然后用arms对接口进行全链路的监控分析,快速找到系统水位,性能瓶颈

1.arms之前参加过阿里举办的arms大会,现在公司生产环境也正在使用这套产品,效果真的不错全链路监控能够快速的定位到问题的来源,阿里自家淘宝,天猫都是用的这套监控产品

2.arms的压测监控成本也跟运维多多少少聊了一下,以时间跟服务节点数量进行计算,可做的使用开启不用关闭而且一次压测下来也就几十上百RMB的成本还是可以接受的

引入性能测试目的

方案都来源于我们的目标,而目标确是我们做这件事的动力来源,针对本公司我觉得能够带来以下好处(仅简单例举以下几个)

  1. 深入了解业务各种场景下的性能表现、以及系统的稳定性情况
  2. 通过性能测试找到前端服务、微服务、中间件、底层DB交互的性能瓶颈,并进行优化
  3. 对于公司大型系统的架构建立起一套完善的测试指标
  4. 确定各业务线的性能指标是否符合预期效果
三、部署图

  1. 测试人员对所需压测的接口进行脚本录制
  2. 录制脚本放在指定的SVN地址上
  3. 通过Jenkins选择所需的并发量,循环次数,集合点等场景进行一键触发
  4. 触发shell脚本的运行
  5. 触发钩子程序运行对硬件资源实行实时的性能监控报警
  6. 压测脚本运行结束触发钩子程序终止
  7. 邮件发送性能测试报告

1.jmeter环境搭建比较简单,在此我就不细说如何搭建的了,网上资料一大把大家可以去搜索,最主要的是大家要会根据公司业务进行灵活运用这才是你应该做的,否则就是玩具毫无意义

2.jenkins环境可以根据我之前文档的总结进行搭建再次我就不叙说了

四、脚本设计

脚本A:

#!/bin/bash#获取当前进程ID
PID=`echo $$`
bash /data/script/mail-alarm.sh $PID &#设置基础环境变量及配置
source /etc/profile
jtl=/data/jmeter/result
report=/data/jmeter/report
path=/data/jmeter/jmeters/apache-jmeter-5.1.1/testcase
#htmlPath=/data/jmeter/jmeters/apache-jmeter-5.1.1/jmeter-report/html
#report=/data/workspace/apache-tomcat-8.5.37/webapps/jmeter_report
#rm -rf $htmlPath/*
rm -rf $jtl/*
rm -rf $report/*
rm -rf $path/*
svn checkout svn://xiaolong@192.168.55.43/project/test/jmeter/ $path/
file=`ls $path/`
string=`echo ${file:0-3}`
dt=`date -d today +"%Y-%m-%d %T"`#并发和循环次数参数化方法调用
function concurrentAndLoop(){var1=`cat $path/$file|grep ThreadGroup.num_threads`var2=`cat $path/$file|grep LoopController.loops`threads=`echo $var1 |awk -F'>' '{print $2}'`threadsNum=`echo ${threads%<*}`loops=`echo $var2 |awk -F'>' '{print $2}'`loopsNum=`echo ${loops%<*}`sed -n '/ThreadGroup.num_threads/p' $path/$file |sed "s/$threadsNum/$1/g" $path/$file > $path/case.jmxsed -n '/LoopController.loops/p' $path/case.jmx |sed "s/$loopsNum/$2/g" $path/case.jmx > $path/case2.jmxcat $path/case2.jmx > $path/$filesed -i '1d' $path/$filesed '1i <?xml version="1.0" encoding="UTF-8"?>' $path/$file
#    sed -i 's#<?xml version="2.0" encoding="UTF-8"?>#<?xml version="1.0" encoding="UTF-8"?>#g' $path/$filerm -rf $path/case.jmx $path/case2.jmx
}#判断录制脚本是否上传并执行脚本
if [ $string == "jmx" ];thenconcurrentAndLoop $1 $2jmeter -n -t $path/$file -l $jtl/result.jtl -e -o $report/ #   cd /data/jmeter/ant/apache-ant-1.9.13/bin;ant#   cd $htmlPath;fileName=`ls TestReport*`#  mv $htmlPath/TestReport* $report/#邮件发送测试报告
sendEmail -f ***** -s smtp.exmail.qq.com -u "$dt 自动化性能测试报告" -o message-content-type=html -o message-charset=utf-8 -xu ****** -xp ****** -t ****** -m "$dt jmeter性能测试报告结果: *****"elseecho -e "\033[31;47m 未找到录制的jmx格式脚本文件,请SVN上传jmx格式录制的脚本 \033[0m"fi

脚本B

#!/bin/bash#配置基本变量
path1=/data/jmeter/alarm#获取jmeter.sh脚本运行进程PID
PID=`ps -ef|grep "jmeter.sh" |awk '{if(NR==1){print $2}}'`while [ $1 -eq $PID ]
dotop -bn 1 > $path1/alarm-report.txt#获取CPU使用率CPU=`sed -n 3p $path1/alarm-report.txt |awk -F'us' '{print $1}'`var=`echo $CPU| awk -F':' '{print $2}'`CpuValue=`echo $var |awk -F'.' '{print $1}'`#获取内存使用率值usedMem=`sed -n 4p $path1/alarm-report.txt|awk -F'used' '{print $1}'|awk -F',' '{print $2}'|awk -F'k' '{print $1}'|awk '{print $1}'`TotalMem=`sed -n 4p $path1/alarm-report.txt|awk -F'used' '{print $1}'|awk -F'k' '{print $1}'|awk '{print $2}'`MemValue=`awk 'BEGIN{printf "%.0f\n",('$usedMem'/'$TotalMem'*100)}'`if [ $CpuValue -ge 90 ]||[ $MemValue -ge 90 ];thensendEmail -f ******* -s smtp.exmail.qq.com -u "$business压测性能监控报警" -o message-content-type=text -o message-charset=utf-8 -xu ***** -xp Xl123456 -t xiaolong@hzyushi.cn -m "CPU或内存使用率过高,CPU使用率: $CpuValue%  Memory使用率: $MemValue%" -a $path/alarm-report.txtecho -e "\033[31;47m 硬件报警钩子程序终止! \033[0m"exit 1fisleep 1#获取最新PIDPID=`ps -ef|grep "jmeter.sh" |awk '{if(NR==1){print $2}}'`
doneecho -e "\033[32;47m 钩子程序运行结束,监控一切正常! \033[0m"

脚本思路分析

  1. 主要通过脚本A中植入脚本B(A是用来跑jmeter脚本的,B是用来监控服务器硬件资源的)
  2. 当A脚本运行会触发B的运行
  3. B会对A进行每个1秒的进程监控,如果进程存在B就会对服务器硬件资源进行持续性监控,存在异常则会进行报警处理
  4. A脚本运行结束B也随之结束监控

jmeter部署框架大概就此结束了,还要结合云上arms框架对压测服务打入探针才可以进行实时监控,arms那块其实看看官方文档就行,比较简单在此就不多说了

谈谈自己为公司设计的jmeter自动化部署框架相关推荐

  1. DevOps平台中的自动化部署框架设计

    本文目录: 一.背景 二.我们的需求是什么? 三.概念澄清 四.概念模型 五.总体设计 六.关键点设计 七.总结 一.背景 说到自动化部署,大家肯定都会想到一些配置管理工具,像ansible,chef ...

  2. Windows下搭建ant+jenkins+jmeter自动化接口测试框架

    Windows下搭建ant+jenkins+jmeter自动化接口测试框架 引言 为什么要持续集成? 1.减少风险 2.减少假定 3.减少重复过程 4.增强项目的可见性 5.持续集成可以带来两点积极效 ...

  3. Windows下搭建ant+jenkins+jmeter自动化接口测试框架(详细篇)

    引言 为什么要持续集成? 1.减少风险 2.减少假定 3.减少重复过程 4.增强项目的可见性 5.持续集成可以带来两点积极效果: (1)有效决策:持续集成系统为项目构建状态和品质指标提供了及时的信息, ...

  4. 架构设计:服务自动化部署和管理流程

    本文源码:GitHub·点这里 || GitEE·点这里 一.分布式服务 从常规分布式架构系统来说,划分出十来个独立的微服务模块是很常见的,然后不同的开发人员分工几个服务块,负责日常开发和维护,微服务 ...

  5. Chef自动化部署框架

    之前: scp ssh 运行shell脚本 现在: 在Server端用PostgreSQL数据库保存所有Client的用户名和密码 自动scp.ssh,专注shell脚本 之前: 所有Client安装 ...

  6. 机械设计制造及其自动化专业的前景与出路

    机械设计制造及其自动化专业的前景与出路 标签 :  机械设计  机械制造  机械电子  车辆工程-机械工程专业一直是近期咨询的热门专业,下面海天跨考就为大家简单介绍一下机械专业的情况,希望能帮助广大考 ...

  7. 中小型运维团队如何设计运维自动化平台

    前言 我给中小型运维团队的定义是整个团队人数(所有运维工程师 + 运维开发工程师)为 20 人以下,一般这样的团队,能为自动化投入的资源也许就 1.2 个开发人员. BAT 等大公司的 DevOps ...

  8. python接口测试框架与自动化实战_Python接口自动化从设计到开发,测试框架实战与自动化进阶视频课程...

    Python接口自动化从设计到开发,测试框架实战与自动化进阶视频课程21套高级软件测试,性能测试,功能测试,自动化测试,接口测试,移动端测试,手机测试,WEB测试,渗透测试,测试用例设计,黑盒测试,白 ...

  9. 博图V15自动化许可证管理器打不开_@大学生:机械设计制造及其自动化专业电脑选购指南...

    机械设计制造及其自动化(机械设计专业,机械制造和机电一体化可参考)专业电脑选购指南 开 幕 雷 击 对于大多数机械学子来说,四年的求学生涯除了班里凤毛麟角的几个女生,你能见到异性的地方也只有社团或者学 ...

最新文章

  1. 仅为方便自己记忆一些滤波器【仅为考试】
  2. 微软服务器sql server,解析:微软SQL Server 2008特性和功能
  3. ASP.NET 文件操作实例
  4. 学习C语言深入解剖笔记之关键字的秘密
  5. SQL Server 解读【已分区索引的特殊指导原则】(1)- 索引对齐
  6. DUL 恢复简单表测试
  7. 经典的 Fork 炸弹解析
  8. 8266串口调试助手_200行Python代码实现串口调试助手(2) 界面构建
  9. LeetCode 159. 至多包含两个不同字符的最长子串(滑动窗口)
  10. Java 利用 split 方法切割字符串
  11. Linux设备驱动开发详解
  12. WIN10禁用security center、自动更新、Defender Service
  13. ideaIU的学习一
  14. 七大顶级编程学习网站
  15. 2022质量员-土建方向-岗位技能(质量员)特种作业证考试题库及模拟考试
  16. GitHub中国区前100名到底是什么样的人?
  17. bmp怎么改jpg格式?
  18. html幸运数字游戏,十二生肖的幸运数字
  19. 探访广东电子垃圾第一镇:家庭作坊饮鸩止渴---ESM
  20. 红米note3android驱动,为何我的红米NOTE3 装不了USB驱动

热门文章

  1. linux fcitx 守护进程,Fedora 20 安装搜狗拼音输入法
  2. 程序员励志:哈佛校训
  3. 广东高考英语计算机辅助口语考试,2011年广东高考英语计算机辅助口语考试.doc...
  4. WTL 自绘控件库 (CQSProgressBar)
  5. 豆瓣评分9.3:畅销38年,这部经典终于出配套习题解答了
  6. 全球反诈骗组织拒绝救援赴柬的台湾民众,背后原因让网友力挺
  7. 计算机论文订票系统,计算机系毕业论文火车订票系统的设计与实现.doc
  8. 【笔试面经】21.12.30 疯狂游戏研发岗(C++)笔试
  9. 【Active Learning - 10】图像分类技术和主动学习方法概述
  10. Mosquito源码分析(一)