zl程序教程

您现在的位置是:首页 >  其他

当前栏目

【性能测试】Jmeter工具使用1

测试性能工具 JMeter 使用
2023-09-11 14:17:06 时间

目录

【性能测试回顾】

【今日学习目标】

性能测试工具 Jmeter和Loadrunner:

Loadrunner:工业级的性能测试工具,可以模拟大量用户,并监控性能指标提供报表。

Jmeter:性能测试工具,Jmeter软件的功能与Loadrunner基本一致。

选择jmeter的原因:

jmeter环境搭建: 

jmeter的功能概要: 

jmeter文件目录结构:

基本配置 

修改语言:

修改外观:

jmeter元件及基本作用域: 

基本元件:

作用域的原理:

作用域的原则:

Jmeter三个重要组件: 

Jmeter的第一个案例:

线程组的介绍:

线程组的分类:

线程组的属性:

HTTP请求:

案例1:

案例2:

案例3:

jmeter响应中出现乱码时: 

Jmeter参数化 

用户参数:

配置方法:

CSV数据文件设置: 

函数:


【性能测试回顾】

详见:【性能测试】理论学习笔记_小慌慌的博客-CSDN博客 

(1)性能测试的概述

  • 定义:

使用的自动化的工具,模拟不同的业务场景,对软件的各项性能指标进行测试和验证的过程。

  • 目的:

发布时评估系统的能力 出现性能缺陷后,定位问题 预估未来的性能

  • 与功能测试对比:

功能测试焦点:有/没有——正向/逆向
性能测试焦点:好/不好——时间/资源 项目中一般都要进行功能测试和性能测试;在功能测试结束后,进行性能测试的工作

(2)性能测试的类型

  • 基准测试:

狭义上讲:单个用户进行业务场景的测试,记录性能指标,作为后续负载测试的标准 广义上讲:在某个时刻/状态下,针对特定的业务场景进行测试并记录对应的性能指标,当软 硬件发生变化后,再测试系统的性能指标,对比观察系统性能是否有上升/下降

  • 负载测试:

逐步增加负载(压力/请求/用户),运行软件业务场景,观察性能指标的变化。通过负 载测试可以找到系统的最优负载量和最大负载量

  • 稳定性测试:

在一定的负载量(用户正常的业务场景的负载量)的情况下,长时间运行,观察系统 能否稳定运行(观察性能指标)

(3)性能测试的监控指标

  • 响应时间:

从客户端发送请求开始,到收到服务器的响应为止的全部时间。等于应用程序处理时间和网络时间之和。

  • 并发数:

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

  • 吞吐量:

单位时间内服务器处理请求的数量。直接用来衡量服务器处理能力的性能指标。

  1. QPS:每秒处理的接口请求数量 
  2. TPS:每秒处理的事务请求数量(事务可能会对应一个接口请求,也可以对应多个接口请

求)TPS = 并发数(在同一秒内发送的请求数) / 响应时间(所有请求的平均响应时间)

  • 错误率:

在性能负载的场景下,失败事务数占总的事务数的比例。

  • 点击数:

不是指的是页面上的一个点击动作,指的是访问页面时,加载所有页面元素(图片、文 本、链接等)的请求数

  • 资源利用率:

在性能测试的过程,已使用的资源占总的资源的比例。 

CPU、内存、磁盘、IO(根据经验,一般使用率达成80%以上要注意分析)

(4)性能测试的流程

  • 性能测试需求分析
  • 性能测试的计划和方案
  • 性能测试的用例编写
  • 性能测试的执行

        性能测试脚本的编写/录制 搭建性能环境
        运行脚本
        监控性能指标 性能分析和调优

  • 性能测试的报告

【今日学习目标】

掌握Jmeter环境搭建

理解Jmeter的主要元件及相关的作用域 

理解线程组、HTTP请求的配置使用

掌握Jmeter参数化的应用

性能测试工具 Jmeter和Loadrunner:

Loadrunner:工业级的性能测试工具,可以模拟大量用户,并监控性能指标提供报表。

  • 优势:

        支持的用户量大 详细的分析报表 支持IP欺骗

  • 缺点:

        收费

        体积大 无法定制功能

Jmeter:性能测试工具,Jmeter软件的功能与Loadrunner基本一致。

  • 优点:

       免费开源
       体积小
       可扩展的组件

  • 缺点:

        不支持IP欺骗

        分析和报表能力比lr弱 

选择jmeter的原因:

Jmeter免费 Jmeter能提供的功能与loadrunner基本一致,能满足绝大多数的性能测试需要

jmeter环境搭建: 

(1)安装JDK

下载(注意选择操作系统对应的位数32/64) 安装(一键式)
配置环境变量
验证:

java -version

(2)安装Jmeter

下载(注意下载的版本与JDK版本的对应关系) 安装(解压缩)
配置环境变量
验证:

双击Jmeter.bat
执行:java -jar ApacheJMeter.jar

jmeter的功能概要: 

jmeter文件目录结构:

bin目录:

docs目录:

 

printable-docs目录:

 

component_reference.html:是最常用到的核心元件帮助文档。

 lib目录:

基本配置 

修改语言:

  • 临时修改:

 

  • 永久修改:

 

修改外观:

 

jmeter元件及基本作用域: 

基本元件:

 

【基本元件】

取样器:发送请求。类似于自动化中的业务测试语句

逻辑控制器:控制元件执行顺序。类似于自动化中的逻辑控制语句

前置处理器:对发送的请求参数进行预处理。类似于自动化中的参数化。

后置处理器:对收到的响应数据进行处理。类似于自动化中获得对应的测试结果。

定时器:等待一定时间。类似于自动化中的sleep语句

测试片段:封装的脚本,供其他脚本调用。类似于自动化中封装的函数

配置元件:测试前的环境及数据配置。类似于自动化中的初始化动作

监听器:查看测试的结果。类似于自动化中的日志和报告。

作用域的原理:

按照jmeter测试计划的树形结构来定义作用域(有点儿类型python的缩进)

作用域的原则:

  • 取样器是jmeter的核心,不作用于其他的组件
  • 逻辑控制器,只对子节点起作用
  • 对于其他的组件,如果父节点是取样器的话,则只对父节点起作用;如果父节点不是取样器的话,则对父节点下的所有组件起作用

Jmeter三个重要组件: 

Jmeter的第一个案例:

 

线程组的介绍:

模拟多人操作

 

如果有多个线程组时,可以并行或者串行执行 如下图,“独立运行每个线程组”勾选,则所有的线程组按照添加顺序串行执行; 如果未勾选,则并行执行(先后顺序无法保证)

线程组的分类:

普通线程组:用于发送业务请求的线程组(受并行、串行配置的影响) 

setup线程组:在所有的线程组之前执行(不受并行、串行配置的影响)

teardown:在所有的线程组之后执行(不受并行、串行配置的影响)

线程组的属性:

  • 线程数:

需要模拟的虚拟用户数。

  • ramp-up time:

模拟的虚拟用户数全部启动所需要的时间。

  • 目的:

为了模拟性能测试的场景,更接近用户的使用习惯(用户慢慢接入系统)

  • 循环次数:

设置为固定次数n时:脚本运行时发送请求的次数为n 设置循环次数为“永远”时,脚本会一直运行下去,不停止

  • 调度器:

一般与循环次数为“永远”的设置配合使用

持续时间设置为n时:脚本的请求发送的时间为n秒

延迟启动设置为n时:脚本的请求发送在等待n秒后再进行

延迟创建线程直到需要:当启动线程发送请求时,才分配资源;如果暂未启动该线程,则不分配。如果 不勾选,在jmeter点击运行时立即分配(使用不多,了解即可,无法观察效果)

  • 线程数m和循环次数n的关系:

如果同时配置,实际发送的HTTP请求数应该为m*n 

虽然发送请求的次数相同,但是不能相互替换

线程数:代表并发用户数,体现服务器的负载量

循环次数:代表执行时间

HTTP请求:

 

案例1:

发送请求时:

协议未填写,则默认为HTTP协议

端口未填写,则默认为80端口

将GET请求参数放在路径中填写

案例2:

发送请求时:

协议选择HTTPS

端口号为443 

将GET请求参数放在下面的参数列表中进行填写

 

案例3:

发送POSt请求

方法选择POST

将参数内容放入到消息体数据中,在发送时参数会添加到请求体中发送

 

查看结果数:

 

 

 

jmeter响应中出现乱码时: 

修改配置文件jmeter.properties(bin目录下)中的内容:

 

Jmeter参数化 

用户定义的变量:

配置方法1:配置元件中配置

添加路径:测试计划——线程组——配置元件——用户定义的变量

参数设置:参数名:参数值

在HTTP取样器中应用:${参数名}

线程组下配置的用户定义的变量,在线程组下生效,与测试计划中配置的变量冲突时,以线程组下的为准

配置方法2:在测试计划中配置(全局生效)

用户参数:

使用用户定义的变量时,不同的用户在访问时,读取的参数值完全相同,如果希望每个用户在访问时的 变量不同,可以使用用户参数。

配置方法:

  • 添加位置:线程组——前置处理器——用户参数
  • 添加用户:可以添加多组用户
  • 添加参数:针对每个用户添加多个参数

CSV数据文件设置: 

使用用户参数时,每个用户可以取不同的数据,但是同一用户的多次循环时读取的数据是不变的。如果想让同一用户多次循环读取时的数据也不同,需要使用CSV数据文件设置的方式。

 1、定义CSV数据文件

2、添加线程组 

3、配置CSV数据文件设置

添加位置:线程组——配置元件——CSV数据文件设置

参数配置:

4、添加HTTP请求

引用参数值时,使用时CSV数据文件中定义的变量名

5、查看结果树

函数:

通过counter函数在生成动态变化的数值

在HTTP取样器中,应用counter函数生成的函数字符串,就可以读取counter函数生成的数值。

  • 如果counter参数设置为:TRUE,则每个用户分别从1开始计算,每循环一次加1 
  • 如果counter参数设置为:FALSE,则所有用户公用一个计数器,每发送一个请求时,取值加1