史上最全《JMeter压力测试教程》——通俗易懂,3天即可学会

性能测试

为什么要进行性能测试?

  • 满足真实场景的业务需求
  • 招聘需要

性能测试概念:

性能:软件质量属性中的“效率”特性

性能测试:使用自动化工具,模拟不同的场景,对软件各项性能指标进行测试和评估的过程

  1. 后台处理程序的性能(代码性能)
  2. 应用服务器、数据库、架构设计等是否存在瓶颈
  3. 服务器资源消耗(CPU、内存、磁盘、网络)

性能测试的目的:

  1. 评估当前系统能力:验收第三方提供的软件,获取关键的性能指标,与其他类似的产品进行比较
  2. 寻找性能瓶颈,优化性能
  3. 评估软件是否能够满足未来的需要

功能测试和性能测试的关系

  1. 焦点不一样

    **功能测试:**验证软件系统操作功能是否符合产品功能需求规格,主要焦点在功能(正向、逆向)

    **性能测试:**验证软件系统是否满足业务需求场景,主要焦点是业务场景满足(时间、资源)

一般项目中,先功能测试通过中,后进行性能测试

性能测试的策略

基准测试

狭义:单用户测试,单用户循环多次得到的数据

广义:建立基准线,当系统的软硬件环境发生变化后再进行一次基准测试以确定变化对性能的影响

测试数据用途

  1. 基准测试不会单独存在
  2. 为多用户并发测试和综合场景测试等提供参考依据
  3. 为系统/环境配置、系统优化前后的性能提升/下降提供参考指标

负载测试

通过逐步增加系统负载,确定在满足系统性能指标的情况下,找出系统所能承受的最大负载量的测试

稳定性测试

在服务器稳定运行(用户正常的业务负载下)的情况进行长时间测试(1天-1周),并最终保证服务器能满足线上业务需求。

系统在用户要求的业务负载下运行达到规定时间时,系统才能正式上线使用。

其他:压力、并发测试

压力测试

在强负载下的测试,查看系统在峰值情况下是否有功能隐患、系统是否具有良好的容错能力和可恢复能力。

测试场景

  1. 极限负载情况下的破坏性压力测试(c-d)
  2. 高负载下长时间的稳定性压力测试(b-c区间,24/3*24小时的长时间测试)
并发测试

并发测试(绝对并发):指在极短的时间内,发送多个请求,来验证服务器对并发的处理能力

应用场景:抢红包,秒杀,抢购等。

性能测试指标

响应时间

指用户从客户端发起一个请求开始,到客户端接收到从服务器端返回的结果,整个过程所耗费的时间。

注意:

  • 通过HTTP接口请求消息来测试
  • 包括服务器处理时间+网络传输时间
  • 不包括发消息时前端页面的处理时间和收到消息后前端页面的渲染显示时间。

并发数

某一时刻同时向服务器发送请求的用户数

吞吐量(throughput)

单位时间内处理的客户端请求数量,直接体现软件系统的性能承载能力

QPS(Query Per Second)每秒查询数:每秒查询数,控制服务器每秒处理的指定请求数量

TPS(Transactions Per Second)每秒事务数:控制服务器每秒处理的事务请求的数量

事务:即业务,页面的一次操作,可能对应一个请求/多个请求

点击数

所有的页面元素的请求总数量,点击数是请求数,不是一次点击

错误率

是指系统在负载情况下,失败业务的概率

注意:大多数系统都会要求错误率无限接近于0,错误率是一个性能指标,不是功能上的随机BUG

资源使用率

系统各种资源的使用情况

常见的资源指标:

cpu不高于75%-85%

内存不高于80%

磁盘io,不高于90%

网络不高于80%

性能测试流程

  1. 需求分析

    1. 明确被测系统–>明确测试内容–>明确测试策略–>明确测试指标
      • 明确被测系统:熟悉被测系统的业务功能和技术架构
      • 明确测试内容:用户使用频率较高的关键业务,技术角度,逻辑复杂度高的业务,数据量大的业务
      • 明确测试策略:
      • 明确测试指标:有明确的需求指标,执行结果与预期结果对比,没有需求指标:查找资料,类似系统对比,对未来流量的预估
  2. 性能测试计划和方案

    • 测什么:项目背景,测试目的,测试范围
    • 谁来测:进度与分工,交付清单
    • 怎么测:测试策略
  3. 性能测试用例

    [外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-mbtnkO8m-1655777946567)(C:\Users\Administrator\Desktop\笔记包\性能测试.assets\image-20220413110521597.png)]

  4. 性能测试执行

  5. 性能测试分析和调优

    性能测试分析人员经过对结果的分析以后,如果不符合性能需求,则会提出性能bug,由开发人员进行后续的调优

  6. 性能测试报告总结

    • 工作的经过回顾
    • 缺陷分析和调优
    • 风险评估
    • 性能测试结果
    • 测试工作总结与改进

性能测试工具JMeter

主流的性能测试工具:Jmeter,Loadrunner

  • 相同点:都能模拟大量用户,支持多协议,监控及分析报表功能

  • 不同点:

    工具用户量分析报表IP欺骗费用体积扩展性
    Loadrunner多(万)精确(秒)支持收费大(GB)不能扩展
    Jmeter较差(分钟)不支持免费小(50mb)有扩展组件

jmeter环境搭建

JAVA_HOME=JDK路径

path %JAVA_HOME%\bin;%JAVA_HOME%\jre\bin;

JMeter_HOME=路径名

CLASSPATH=%JMETER_HOME%\lib\ext\ApacheJMeter_core.jar; %JMETER_HOME%\lib\jorphan.jar;

path添加 %JMETER_HOME%\bin;

jmeter文件目录结构

  • 修改配置文件 Bin目录
  • 第三方插件 lib/ext目录
  • 帮助手册 printable_docs
  • 启动程序 Bin目录

元件及基本作用域

接口自动化脚本实现过程

  1. 初始化测试数据 配置元件
  2. 对请求数据进行赋值 前置处理器
  3. 调用GET/POST方法发送请求 取样器
  4. 提取响应中特定字段的值 后置处理器
  5. 对提取出来的值与预期结果进行对比 断言
  6. 在控制台查看脚本运行结果 监听器

元件:多个类似功能组建的容器(类似于类)组件:容器中实现独立的某个功能(类似于方法)

元件作用域和执行顺序

原则:
  • 取样器:核心,不和其他元件相互作用,没有作用域
  • 逻辑控制器:只对子节点中的取样器和逻辑控制器起作用
  • 其他元件:父节点是取样器则只对取样器起作用,父节点不是取样器,则作用域是该元件父节点下的其他所有后代节点(包括子节点,子节点的子节点等)
执行顺序

同一作用域(目录级别缩进)下不同类型元件:

  1. 配置元件
  2. 前置处理程序
  3. 定时器
  4. 取样器
  5. 后置处理程序
  6. 断言
  7. 监听器

同一作用域下多个相同的元件:

  • 按照测试计划中从上 到下顺序依次执行

Jmeter三个重要组件

线程组

控制Jmeter用于执行测试的一组用户

分类
  • Setup线程组:预测试操作,所有脚本之前执行
  • 普通线程组:执行测试用例,可以有一个或者多个(并行或者串行)
  • Teardown线程组:测试后操作,所有脚本执行之后
参数介绍:

线程数:虚拟用户数,用户数越多,负载越大

Ramp-Up:全部虚拟用户数启动需要的时间

循环次数:指定运行次数,次数越多,运行时间越长,选中永远则一直运行,需设置调度器,设置脚本持续时间

启动延迟:脚本启动延迟等待的时间

延迟创建线程直到需要:勾选则可适当节省系统资源

JMeter参数化(函数)

定义:使用不同的测试数据,调用相同的测试方法进行测试

本质:实现测试数据与测试方法的分离

  1. 用户定义的变量:配置元件里,全局变量,引用变量的格式${变量名}
  2. 用户参数:前置处理器,同一组参数,不同用户访问的时候可以获取不同的值
  3. CSV数据文件设置:当不同用户或者同一用户多次循环的时候,都能获取到不同的值
  4. __counter函数:自动生成不重复的数据,让每个用户每次循环都能取到不同的数据,且不需要提前定义
  5. __Random函数:生成随机数,参数一,参数二,界定了随机数生成的范围
  6. __time函数:获取当前的时间,设置格式yyyy-MM-dd hh:mm:ss 不设置格式为1970年至今的毫秒值

JMeter断言

  1. 响应断言
    • 响应文本:来自服务器的响应文本,即主体
    • 响应代码:响应的状态码,例如:200
    • 响应信息:响应的信息,例如:OK
    • Response Headers:响应头部
    • Request Headers:请求头部
    • Request Data:请求数据
    • URL样本:请求URL
    • Document(text):响应的整个文档
    • 忽略状态:忽略返回的响应状态码
    • 包括:文本包含的正则表达式
    • 匹配:整个文本匹配的指定的正则表达式
    • Equals:整个返回结果的文本等于指定的字符串(区分大小写)
    • Substring:返回的结果包含指定字符串(区分大小写)
    • 否:取反
    • 或者:逻辑或,存在多个测试模式(预期结果)
    • 测试模式:指定的结果,可以填多个
  2. json断言
    • 填写Assert JSON Path exist(实际结果—json路径)
    • 勾选Additionally assert value,Match as regular expression
    • 填写Expect Value (期望结果)
    • Expect null希望为空
    • Invert assertion 反转断言
  3. 断言持续时间
    • 持续时间(毫秒):HTTP请求允许的最大响应时间,超过则认为失败

JMeter关联

正则表达式:左边界(.*?)右边界

  1. 正则表达式提取器:
    • 引用名称:存放提取出来的参数名称
    • 正则表达式:左边界(.*?)右边界
    • 模板:用$$引用起来,正则表达式中有多个提取值,则可以是 2 2 2, 表示解析到第几个值给参数
    • 匹配数字:0代表随机取值,-1代表全部取值,1代表取第一个值
  2. XPath提取器
    • Use Tidy当需要处理的页面时HTML格式时,必须选中该选项,XML或者XHTML时取消选中
    • 引用名称:存放提取出来的参数
    • XPthon Query:xpath表达式
    • 匹配数字:0随机,-1所有,1第一个
    • 缺省值:参数默认值
  3. JSON提取器
    • name of created variables :变量名
    • json path expressions :json表达式
    • Match No.:匹配数字,0随机,1,第一个,-1,全部
    • default values:参数默认值
  4. jmeter属性(跨线程组关联)
    • BeanShell取样器,保存属性,__ setproperty,读取属性, __ property
    • 作用:可以实现跨线程组关联

jmeter脚本录制

有API可以根据接口文档写测试脚本,没有的话就可以抓包来写或者直接录制脚本

步骤:

  1. 添加HTTP代理服务器并进行配置
  2. 设置本机的浏览器代理服务器
  3. 设置包含模式,排除模式

JMmeter直连数据库

直连数据库的作用
  1. 用作请求的参数化:登录时需要的用户名,可以从数据库中查询
  2. 用作结果的断言:添加购物车下订单,检查接口返回的订单号是否与数据库中生成的订单号一致
  3. 清理垃圾数据:添加商品编号不能重复,再执行该脚本不能成功,需要下次执行前删除该商品数据
  4. 准备测试数据:通过数据库来准备大量的性能测试数据

连接步骤:

  1. 将连接驱动包放入lib/ext目录重启

  2. 添加配置元件JDBC Connnection Configuration

    参数介绍:

    variable name:连接池名称

    URL:jdbc:mysql://localhost:3306/tpshop2.0

    ​ 协议+数据库ip+数据库端口+连接的数据库名

    JDBC DRIVER class: com.mysql.jdbc.driver

    若出现查询为空的情况,URL后面要添加 ?useUnicode=true&characterEncoding=utf-8

  3. 添加JDBC Request 取样器

    参数:

    Variable Name :数据库连接池名字

    Query Type:select statement 查询操作,update statement增删改操作

    query:填写SQL语句,末尾不加;分号

    Variable name:保存SQL语句返回结果的变量名

jmeter逻辑控制器

If控制器:

​ 控制子节点的元素是否运行

循环控制器:

​ 线程组循环次数对线程组下所有的HTTP请求有效,循环控制器只对子节点下的HTTP有效,循 环控制器次数为a,线程组循环次数为b,循环控制器下的请求运行为a*b次。

Foreach控制器:

​ 与用户定义的变量或者正则表达式一起使用,读取返回结果中一系列相关的变量值,该控制器 下的取样器都会被执行一次或多次,每次读取不同的变量值。

JMeter定时器

同步定时器(Synchronizing Timer)

可以阻塞线程,累计一定的请求,当在规定的时间内达到一定的线程数量,这些线程会在同一时间点一起释放,瞬间产生很大的压力,两个参数,模拟用户数量,超时时间

常数吞吐量定时器

实现以固定的频率访问网页的功能单位是每人每分钟,QPS单位是每秒,要进行换算

固定定时器

必须添加在需要等待的HTTP请求的子节点下,可以在HTTP信息头管理器中,修改HTTP请求的头域

弱压力测试

设置线程组打开时间,在一个长的时间段,有若干个用户访问

高并发高频率

高并发:同步定时器

高频率:常数吞吐量定时器

jmeter分布式测试

  • 应用场景:当测试机无法模拟用户需要的业务负载量时,需要使用多台测试机配合测试
  • 原理:分布式测试分为一台控制及和多台代理机,控制机负责发布测试任务给代理机,代理机接收任务并向服务器发送请求,接收服务器返回的响应,然后将测试结果返回给控制机,由控制机对测试结果数据进行汇总统计
  • 前期准备:防火墙已关闭,客户端都在同一子网,所有系统使用相同版本的JMeter和JDK,已经为RML设置了SSL或将其禁用
  • 代理机设置:修改服务端口,bin目录下的jmeter配置文件中server port,关闭server.rml.ssl,注意去掉注释,打开bin目录下的jmeter-server.bat
  • 控制机:bin目录,配置文件中修改remote_host=ip:端口,ip:端口,代理机之间用逗号隔开,关闭server.rml.ssl,注意去掉注释。运行,远程启动所有。

jmeter图形化报告

将脚本文件放入bin目录,在当前目录运行cmd

命令为:jmeter -n -t 脚本文件 -l日志文件 -e -o 目录

-n 无图形化界面 -t 被运行的脚本文件 -l将运行信息写入日志文件 -e 生成测试报告 -o 指定报告输出的目录

  • 5
    点赞
  • 38
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 1
    评论
JMeter是一款免费的开源软件,用于进行压力测试、负载测试和功能测试。下面是一个简单的JMeter压力测试教程,帮助你了解如何使用JMeter进行压力测试。 1. 下载和安装JMeter 首先,你需要从JMeter官方网站(https://jmeter.apache.org/)下载并安装JMeter软件。 2. 创建测试计划 打开JMeter软件,点击“File” -> “New”,创建一个新的测试计划。在左侧的树形结构中,你可以看到测试计划中的各个元素,如线程组、HTTP请求、断言等。 3. 添加线程组 线程组是JMeter中最基本的元素,用于模拟并发用户。在测试计划中,右键点击“Test Plan”,选择“Add” -> “Threads(Users)” -> “Thread Group”。 在线程组属性中,你可以设置用户数量、循环次数、启动延迟等参数。 4. 添加HTTP请求 在线程组下面添加HTTP请求,用于模拟用户的请求。右键点击线程组,选择“Add” -> “Sampler” -> “HTTP Request”。 在HTTP请求属性中,你可以设置请求的URL、请求方法、请求头、请求参数等。 5. 添加断言 断言用于验证服务器的响应是否符合预期。右键点击HTTP请求,选择“Add” -> “Assertions” -> “Response Assertion”。 在断言属性中,你可以设置验证响应的方式、验证规则等。 6. 运行测试计划 在测试计划中,点击“Run”按钮,JMeter将开始模拟并发用户的请求,并记录服务器的响应时间、吞吐量、错误率等数据。 7. 分析测试结果 JMeter提供了多种报告和图表,帮助你分析测试结果。在测试计划中,右键点击“Summary Report”,选择“Add” -> “Listener” -> “Aggregate Report”。 在报告属性中,你可以选择显示的字段、排序方式等。 以上就是JMeter压力测试的基本流程,希望能帮助你进行有效的性能测试。

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

测试工程师小斌

创作不易,您的支持是我最大的动

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值