目录
本篇内容
- 持续集成
解决方案
jenkins + ant + jmeter:
- jenkins:持续集成的领导者
- ant:代码的编译、测试、部署 (maven之前用的是ant)
- jmeter:性能工具、脚本
主机启动:
- 运行 -> 远程启动 远程启动所有
- 远程启动错误查看
持续集成
ant安装配置
- 下载、解压
- 配置环境变量:ANT_HOME PATH=%ANT_HOME%\bin
- 修改jmeter.properties jmeter.save.saveservice.output_format=xml
- 拷贝:jmeter的extras中的ant-jmeter.**.jar放到ant的lib文件夹中(用于邮件)。
验证:在jmeter的extras文件夹中cmd,输入ant.bat -file build.xml -Dtest=Test - 修改build.xml:进入jmeter的extras文件夹,找到build.xml文件(难点,也是最重要的一个地方)
把ant的压缩包解压后,如下图所示:
默认为csv,修改成xml
jenkins安装配置
- 到https://www.jenkins.io下载msi、解压。下载一个tomcat,解压以后,把jenkins.war包放到tomcat webapps的文件夹下面,接下来到tomcat bin文件夹下面找到startup.bat启动tomcat,就可以启动本机的tomcat。
- 安装完成后,浏览器中打开localhost:8080/jenkins。如果是解压在ROOT文件夹下面,就不需要路径带上jenkins。
- 修改密码、安装推荐插件
- 登陆jenkins->进入系统管理->pluginManager管理插件安装AntPlugin和PerformancePlugin是否已经安装
- 系统管理->GlobalTool Configuration 配置Ant路径
- 新建一个任务,选择freestyle project
- 在任务的“构建”中,选择invoke ant,targets要填写build.xml中的antcall的值,保存应用。
如下为第一次安装完成后,打开jenkins的页面。
在路径下,找到密码,直接把密码复制粘贴到这边来。
选定Ant插件安装
插件安装完成之后,会进入到创建第一个管理员用户的界面。
这个Jenkins URL地址不要去修改
Jenkins安装配置完成。
点击开始使用Jenkins,会打开如下画面。
如果安装了中文插件,Jenkins是可以中文汉化的。
左侧菜单栏中点击Manage Jenkins,出现如下System Configuration:
点击上图中右上角的Manage Plugins,会进入到如下界面:
可以在可更新/可选插件/已安装里面搜索Ant Plugin
点击Global Tool Configuration
全局配置:
若未安装Ant插件,是看不到该配置入口的。
点击Ant安装…,默认就会有一个。然后保存&应用。那么jenkins中就已经配置好Ant了
点击新建Item,创建Jenkins job。
会打开一个新建Jenkins job的界面:
输入一个任务名称,选择Freestyle project,点击确定。
配置方式只需要在构建这里,点击增加构建步骤,选择Invoke Ant。
选择刚才在全局配置里面添加的Ant名称,如刚才配置的是ANT-1.9
只需要把build.xml文件的路径复制过来,点击保存并应用。
build.xml文件修改
- project
- target
- property
- mail配置
折叠起来后,只有一个project。
Jenkins中Ant Target如果没有填写的话,会默认用build.xml的default的值,目前defalut值为all,当target为all的时候,默认情况下会做三件事情,第一件test进行测试,第二件report生成报告,第三件mail邮件发送报告。
target name为test
target name为report
target name为mail
需要修改jmeter.home
时间变量的格式:
testplans
如下为要用的jar包,无需更改。
生成报告
如下两个皆为样式文件,选择哪个样式文件可以在report的style处进行修改。
mail的部分,smtp服务默认端口25,发送者的邮箱需要去开通smtp服务,例如qq邮箱默认smtp服务可能没有开启的。
填写授权码,不是密码。
把报告给删了,如果不想删除报告,那么就把这句注释掉。
注释如下:
点击Build Now运行任务
可以查看控制台输出,第一件事先做测试:
此处就是一个聚合报告
第二件事report
打开html文件查看性能测试报告
点击右上角的+号,把性能测试报告展开显示。
每一次请求的实际情况
第三件事情mail,就是把生成的报告发送出来。发送的邮箱用户名和密码是错误的,所以发送测试报告报错了,邮件没有发出来。
jmeter持续集成邮件发送失败,可能因为缺jar包,jar包丢到lib文件夹下面去。
无界面运行
无图形界面可以更节约资源,可以让服务器的资源更可能多的用于性能测试。
不需要打开jmeter,只需要运行写好的脚本。图形界面用于脚本的编写和调试。真正做性能测试的人,一般不会用图形界面来做测试,一般用的是无图形界面的方式做测试。用无图形界面的方式,监听器都可以不用,disable掉。
命令如下所示:
总共请求了2831次
打开nongui001文件夹下面的index.html文件
测试报告如下所示:
Response Times Over Time
随着响应时间的变化,最大才397ms,响应时间还是非常快的。如下为随着时间变化,并发用户图。
如下为Throughput下每秒点击次数Hits Per Second
Throughput下面还有Transactions Per Second的图,与Hits Per Second的图完全一致,说明现在还没有性能问题。
还有Response Time Percentiles的图,时间主要集中在400-500ms以内,响应时间还可以。
需要注意:
**注意点一:**每次运行该命令时,这边保存的文件名每次都需要不一样。不能重复,没有所谓的覆盖
没有修改文件名,会报如下错误:
**注意点二:**如下的文件夹,一定要是全空文件夹,或者不存在的文件夹。
若同一个命令执行两遍,会报如下错误。
性能测试分析
数据
场景设计、监视图表:
- 设计场景:阶梯式、波浪式
- 监视器:用于收集用于性能分析的数据
TPS图标、聚合报告/汇总报告、查看结果树、响应时间、吞吐量
服务器资源监控:cpu、内存、磁盘io - 分析思路: 硬件分析->软件分析
服务器硬件瓶颈 -> 网络瓶颈 -> 服务器操作系统瓶颈(参数配置、数据库、web服务器)->应用瓶颈(sql语句、数据库设计、业务逻辑、算法)【由外而内、由表及里、层层深入】
分析
- cpu问题:有上下文和使用率的分析。在使用的时候,会进行来回的切换,就会出现中断,中断有软中断和硬中断两大类型,就会涉及到上下文。
- 内存问题分析:内存跟CPU进行数据交换,从磁盘读取数据,发送到CPU里面去,相当于过桥,有内存溢出或者内存泄漏等问题。
- 数据库问题分析
- 网络问题分析
- nginx问题分析
- 负载均衡问题分析
性能测试流程
- 测试准备
- 搭建环境
- 测试脚本开发
- 测试执行
- 结果分析与调优
- 测试报告与结果跟踪
1. 测试准备
- 需求分析——熟悉业务,性能测试人员很多情况下,是不参与功能测试的。需要理解构架,需要接口调得通,熟悉数据业务流走向,需要熟悉整体业务。通过熟悉业务,来熟悉软件的功能和架构。
- 明确性能测试目标,找出或验证性能指标。如果没有做过,就找出。如果做过,就对比前后两次的性能变化。需要得到哪些性能指标需要明确出来,有的企业关心TPS,有的企业关心并发用户,有的企业关心响应时间。具体看项目,不同的项目侧重点不同。
- 了解 软件功能、架构。一个系统都是由多个服务构成的。
- 制定 测试模型
- 指定测试计划,做好工作量评估
2. 搭建环境
- 工具选项与准备。协议不一样,所用的工具就会不一样。如果用的是websocket或者mq这些互联网协议,选型用loadrunner是搞不定的,只能采用jmeter,选择工具也是有关系的。
- 被测系统环境搭建(服务器、服务版本更新、数据库数据准备)Docker之类的,mysql5或者mysql7/8数据库版本也是有差别的,性能上有明显区别。
- 网络配置
3. 测试脚本开发
- 协议,例如http协议
- 制作脚本。真正性能测试人员不会去录制脚本。用户定义变量和用户参数之间的差异?
- 调试脚本
- 验证脚本
4. 测试执行
真正性能测试执行的时候,是用无图形界面来执行的。
5. 结果分析与调优
优化的过程,寻求一个平衡。最优性能,并不是得到某一处的最大性能。
可能这个地方调优了,又引出其他方面的问题。反反复复进行。
6. 测试结果与结果跟踪
html报告,自己截图写到word文档里面。
如果是底层问题,短期无法修复,那需要记录缺陷,长期跟踪。
课程回顾
jmeter里面完整的脚本会包含哪三个组成部分:
- 线程组
- 取样器
- 监听器(可有可无)
面向目标场景需要重点学习和掌握:
答疑
怎么找出具体的并发用户数?
0-100的过程中,突然某一个时间点突然出现这个并发用户数在逐渐增加,原先的响应时间是平均的,但是响应时间突然一下子变得很高,变成2秒或者3秒以上,或者是说TPS值不升反而下降了,就已经到拐点区间了。还有一种情况就是报错了,发现有请求失败的情况,这种情况也是拐点区间到了。