职场经验:手把手教你压测..

 

身为后端程序员怎么也要会一点压力测试相关的技术吧, 不然无脑上线项目万一项目火了进来大量请求时出现程序执行缓慢, 宕机等情况你肯定稳稳背锅, 而且这个时候短时间内还没办法解决, 只能使用物理扩容CPU, 内存, 更换网络等几种方式来解决问题, 妥妥的为公司增加支出好吧, 下一个被开的就是你

都是想跑路拿高薪的打工仔, 身上怎么可以背负污点, 赶紧学一手压力测试进行保命, 我先学为敬

本篇文章主打一个学完就会, 奥利给

文中出现软件的版本

  • JMeter: 5.5
  • ServerAgent: 2.2.3

性能调优对各个开发岗位的区别

各个岗位对性能调优的关键节点

  • 前端工程师:
    • 首屏时间: 初次访问项目等待加载时间
    • 白屏时间: 刷新页面到数据全部展示时间
    • 可交互时间
    • 完全加载时间
  • 后端工程师
    • RT: 响应时间
    • TRS: 每秒事务数
    • 并发数: 这应该不会解释了吧
  • 移动端工程师
    • 端到端相应时间
    • Crash率
    • 内存使用率
    • FPS

主要讲一下后端工程师(Java), 毕竟这是吃饭的家伙
对于后端工程师来说, 影响性能的地方主要有两个

  • 数据库读写, RPC, 网络IO, 代码逻辑复杂度, 缓存
  • JVM(Throughput) - JVM(Throughput)

影响性能的关键要素

  • 产品设计
    • 产品逻辑
    • 功能交互
    • 动态效果
    • 页面元素
  • 基础网络
  • 代码质量&架构
    • 架构不合理
    • 研发功底和经验不足
    • 没有性能意识: 只实现功能不注重代码性能, 当业务上量后系统出现连锁反应, 导致性能问题增加
    • 数据库: 慢查询, 过多查询, 索引使用不当, 数据库服务器瓶颈
  • 用户移动端环境
    • 设备类型&性能
    • 系统版本
    • 网络(WiFi, 2G, 3G, 4G, 5G)
    • 硬件及云服务(服务器硬件, CPU, 内存..)

1. 初步了解压力测试

1.1压力测试是什么

 
  1. 压力测试是针对特定系统或组件, 为要确定其稳定性而特意进行的严格测试. 会让系统在超过正常使用条件下运作, 然后再确认其结果

  2. 对系统不断施加压力, 来预估系统`负载能力`的一种测试

  3. 一般而言, 只有在系统基础功能测试验证完成, 系统趋于稳定的情况下, 才会进行压力测试

1.2压力测试的目的

 
  1. 当负载主键增加时, 观察系统各项性能指标的变化情况是否有异常

  2. 发现系统的性能短板, 进行针对性的性能优化

  3. 判断系统在**高并发情况下是否会报错**, 进行是否会挂掉

  4. 测试在系统某个方面达到瓶颈时, 粗略估计系统性能上限

1.3 压力测试的指标

指标含义
相应时间(RT)是指系统对请求作出响应的平均时间, 对于单用户的系统, 响应时间可以很好地度量系统的性能
吞吐量(Throughput)是指系统在单位时间内处理的数量, 每秒事务数TPS 也算是吞吐量的一种
资源利用率CPU占用率, 内存使用率, 系统负载, 网络IO
并发用户数是指系统可以同时承载的正常使用系统功能的用户的数量, 用户不同的使用模式会导致不同用户在单位时间发出不同数量的请求
错误率失败请求占比, 在测试时添加响应断言, 验证不通过即标记为错误, 若不添加, 响应码非200则为错误

评判系统性能, 主要考虑三个性能指标 RT, TPS, 资源利用率

上图充分的展示了响应时间, 吞吐量, 利用率和并发用户数之间的关系

随着并发用户的增加经过轻负载区, 达到最优并发数, 此时利用率高,吞吐量高, 响应时间短

但是如果用户数继续增加, 就会到达重负载区, 此时性能最大化, 但是当超过某一临界值(最大并发数)之后, 响应时间会急剧增加, 利用率平缓, 吞吐量急速下降

我们进行压测的目的主要就是测试出这个临界值的大小, 或者说, 我们系统当前能承受住的最大并发数

2. 压力测试工具 JMeter

老规矩, 先来一波软件介绍 JMeter是 Apache组织开发的基于 Java的开源压力测试工具, 具有体积小, 功能全, 使用方便等特点. 最初被设计用于 Web应用测试, 后来被扩展到其他测试领域.

常用压测工具:

  • Apache JMeter可视化的测试工具
  • LoadRunner 预测系统行为和性能的负载测试工具
  • Apache的 ab压力测试
  • nGrinder韩国研发的一款性能测试工具
  • PAS阿里测试工具

压测目标:

  • 负载上升各项指标是否正常
  • 发现性能短板
  • 高并发下系统是否稳定
  • 预估系统最大负载

2.1 安装 JMeter

写在前面, 需要 Java8环境, 没有的话需要去安装, 教程百度上一大堆

官网地址: jmeter.apache.org/

熟悉的download, 点他


开始下载(是真的慢)

解压之后进入 bin目录下, 双击 jmeter.bat, 就可以启动 JMeter了

上图可以看出, 在我们第一次打开界面时是英文的, 多少有点不友好, 接下来讲解一下怎么将语言更改为中文

2.2 设置 JMeter界面为中文

还是我们的 bin目录下, 有一个 jmeter.properties文件

双击打开, 搜索 language 

去除 #号, 值更改为 zh_CN, 保存文件然后重启软件(双击jmeter.bat)

可以看到, 我们的 jmeter成功更改为了中文界面, 这对于我这种英语白痴来说是很舒服的

2.3 初步使用 JMeter

我们先随便创建一个测试用例, 就是简单测试, 同时讲解一下常用的参数

本次测试采用 20线程, 1秒启动时间, 循环100次, Get请求

2.3.1 创建线程组

  • 线程数: 虚拟的用户数, 一个用户占一个线程
  • Ramp-Up: 等待时间, 设置的虚拟用户(线程数)需要多长时间全部启动
  • 循环次数: 单个线程发送请求的次数
  • 调度器:
    • 持续时间: 该任务执行的时间
    • 启动延迟: 等待多少秒开始执行
2.3.2 创建 http请求

右键线程组-添加HTTP请求

这个中文讲解的很明白, 应该都看得懂的, 有疑问的评论区留言

2.3.3 结果树

结果树, 聚合报告, 图形结果只有新增, 解释在测试

线程组右键-添加-监听器-查看结果树

执行结果分析(启动之后显示界面)

列表列出了每一次的HTTP请求, 绿色的是成功, 红色的话就是失败

  • 取样器结果参数详解
    • Thread Name:线程组名称
    • Sample Start: 启动开始时间
    • Load time:加载时长
    • Latency:等待时长
    • Size in bytes:发送的数据总大小
    • Headers size in bytes:发送数据的其余部分大小
    • Sample Count:发送统计
    • Error Count:交互错误统计
    • Response code:返回码
    • Response message:返回信息
    • Response headers:返回的头部信息
  • 请求
    • 基本数据
    • 入参
    • 请求头
  • 相应数据
    • 响应码
    • 响应头
2.3.4 聚合报告

线程组右键-添加-监听器-聚合报告

执行结果分析(启动之后界面)

image.png

参数解释

  • 样本: 并发量
  • 平均值: 接口请求用时(单位毫秒)
  • 中位数: 请求用时中位数(单位毫秒), 例如2000请求以请求时间排序, 排名1000的用时时长
  • 90%百分位, 95%百分位, 99%百分位和中位数同理
  • 最小, 最大值: 请求用时最小和最大
  • 异常% : 请求中异常的百分比
  • 吞吐量: 单位时间内请求次数
2.3.5 图形结果

线程组右键-添加-监听器-图形结果

image.png

执行结果分析(启动之后显示界面)

image.png

  • 样本数目:总共发送到服务器的请求数。
  • 最新样本:代表时间的数字,是服务器响应最后一个请求的时间。
  • 吞吐量:服务器每分钟处理的请求数。
  • 平均值:总运行时间除以发送到服务器的请求数。
  • 中间值:有一半的服务器响应时间低于该值而另一半高于该值。
  • 偏离:表示服务器响应时间变化、离散程度测量值的大小。
2.3.6 断言

断言主要用来判断结果返回是否符合预期

线程组右键-添加-断言-响应断言

image.png

image.png

假设我们接口的返回状态码字段为code, 200为成功, 那么就可以在断言这里进行配置, 来判断请求是否成功

image.png

3. JMeter插件

3.1 插件安装

首先说明 JMeter是不支持插件的, 所以我们先要 JMeter的插件允许插件下载, 这句话多少有点拗口

网址: Install :: JMeter-Plugins.org

image.png

点击上图红框即可下载插件, 前面说过了 JMeter是 Java8开发的, 插件对应的也是一个 jar包

image.png

下好之后就可以放在 JMeter安装目录下的 lib/ext/ 下了, 具体下载页面也有说明

image.png

上述操作结束之后, 在选项里面就可以看到插件中心Plugins Manager

image.png

弹出以下界面, 点击 Available Plugins搜索我们需要的插件Basic GraphsAdditional Graphs, 勾选上, 然后安装

image.png

Basic Graphs主要显示显示平均响应时间,活动线程数,成功/失败交易数等

image.png

Additional Graphs主要显示吞吐量,连接时间,每秒的点击数等

image.png

在安装成功之后, 在监听器会相应的多出很多的 jc开头的, 这就代表安装成功了

我使用的是 5.5版本的, 之前版本安装之后好像要手动重启, 5.5安装完会自动重启

image.png

4. Linux硬件监控

在压测过程中, 我们需要实时了解服务器的CPU, 内存, 网络, 服务器负载等情况的变化, 这个时候我们就需要对我们的 Linux系统进行监控, 通常来讲, 我们查询 Linux系统的资源占用情况可以使用以下几种方法

  • 使用命令: top, iostat, iotop等
  • 使用 Linux远程连接工具 FinalShell等
  • 宝塔
  • JMeter压测工具 PerfMon

在 JMeter中, 如果需要监控服务器硬件, 那么我们还需要安装 PerfMon插件

image.png

PerfMon监控服务器硬件,如CPU,内存,硬盘读写速度等

进入下述地址开始下载监控包: github.com/undera/perf…

image.png

下载好之后我们可以直接解压放到服务器上, 会看到有两个startAgent文件, 分别是Windows系统和Linux系统的启动脚本

image.png

我们直接启动就可以了, 如果脚本启动连接不上的话可以考虑更改脚本内容

例: Linux系统脚本更改为以下内容

 

sh

复制代码

## 默认启动运行 startAgent.sh 脚本即可 ## 服务启动默认4444端口,根本连接不上,因此自己创建一个部署脚本文件对此进行部署,且把端口修改为7879 nohup java -jar ./CMDRunner.jar --tool PerfMonAgent --udp-port 7879 --tcp-port 7879 > log.log 2>&1 & ## 赋予可执行权限 chmod 755 startAgent.sh

启动成功之后, 脚本同级路径下会多出 log.log的日志文件

image.png

然后我们就可以配置 JMeter了, 线程组-监听器-jp@gc - PerfMon Metrics Collector

image.png

image.png

我是在本地启动了ServerAgent.bat进行测试, 执行结果如下所示:

image.png

注: 文件必须配置, 不然没有图像

具体的配置指标信息建议看官方文档, 太多了.... github.com/undera/perf…

image.png

image.png

ServerAgent闪退问题

Windows系统配置好ServerAgent启动之后窗口闪退可能是 jre版本问题, 可以从下面的链接下载老版的 jre

www.aliyundrive.com/s/Yzw3DZ74w…

下载好之后, 建议安装目录设置在ServerAgent/jre

image.png

并更改startAgent.bat脚本, cd 到老版本 jre路径

image.png

 

总结:

感谢每一个认真阅读我文章的人!!!

作为一位过来人也是希望大家少走一些弯路,如果你不想再体验一次学习时找不到资料,没人解答问题,坚持几天便放弃的感受的话,在这里我给大家分享一些自动化测试的学习资源,希望能给你前进的路上带来帮助。

软件测试面试文档

我们学习必然是为了找到高薪的工作,下面这些面试题是来自阿里、腾讯、字节等一线互联网大厂最新的面试资料,并且有字节大佬给出了权威的解答,刷完这一套面试资料相信大家都能找到满意的工作。

 

          视频文档获取方式:
这份文档和视频资料,对于想从事【软件测试】的朋友来说应该是最全面最完整的备战仓库,这个仓库也陪伴我走过了最艰难的路程,希望也能帮助到你!以上均可以分享,点下方小卡片即可自行领取。

  • 5
    点赞
  • 10
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值