Appearance
JMeter入门篇
JMeter简介
JMeter 是 Apache 组织使用 Java 开发的一款测试工具:
- 可以用于对服务器、网络或对象模拟巨大的负载
- 通过创建带有断言的脚本来验证程序是否能返回期望的结果
优点:
- 开源、免费
- 跨平台
- 支持多协议
- 小巧
- 功能强大
缺点:
- 不支持IP欺骗
- 使用JMeter无法验证JS程序,也无法验证页面UI,所以要和Selenium配合来完成Web2.0应用的测试
JMeter安装
准备环境
JMeter 是使用 Java 编写的,必须安装 Java 环境:
- JDK: Java SE Development Kit (java 开发工具包,为 JAVA 程序开发提供环境支持)
- JRE: Java Runtime Environment (java 运行环境,为 JAVA 程序运行提供环境支持)
下载&安装
https://jmeter.apache.org/download_jmeter.cgi
配置中文
找到jmeter.properties,搜索language,修改为zh_CN
配置编码
注意
在jmeter 5.6.1版本后,默认编码即为UTF-8
,可不配置
找到jmeter.properties,搜索encoding,修改为UTF-8
运行
执行jmeter.bat或jmeter.sh
配置外观
Options -> Look and Feel -> Darklaf - IntelliJ
安装 Dummy Sampler 插件
- 下载plugins-manager.jar,存储至${JMETER_HOME}/lib/ext
- 点击Plugins Manager,打开插件管理页面
- 选择
Available Plugins
选项卡 - 搜索Dummy Sampler,点击安装
- 等待自动重启即可
JMeter基本使用
- 测试计划- 添加 - 线程 - 线程组
- 线程组 - 添加 -取样器 - HTTP请求
- 测试计划 - 右键 - 添加监听器 - 查看结果树
JMeter线程组
进 程: 正在运行的程序 线 程: 是进程中的执行线索 线程组: 进程中有许多线程,为了方便管理,可以对线程按照性质分组,分组的结果就是线程组 PS: 三者关系,一个进程可以包含多个线程组,一个线程组可以包含多个线程
并发执行和顺序执行
并发执行
多个线程同时执行
顺序执行
多个线程顺序执行
线程组常用属性
线程数 (Number of Threads(users))
有时也叫做用户数量,线程组中模拟的并发用户数量,也就是同时执行测试计划的线程数。每个用户代表一个独立的线程,可以执行测试脚本。这个数字通常用来模拟实际用户数量,以测试应用程序在多用户同时访问时的性能。
递增周期 (Ramp-up period(seconds))
线程组中每个线程开始执行测试计划的时间间隔。如果用户数量很大,递增周期可以确保不是所有线程同时启动,而是逐渐增加以模拟用户逐渐访问应用程序的情况。单位是秒。
循环次数 (Loop Count)
每个线程执行测试计划的次数。如果将其设置为1,每个线程将执行测试计划一次,然后退出。如果设置为大于1的值,线程将多次执行相同的测试计划,模拟用户的多次操作。这对于模拟用户的不同行为很有用。
指定线程生命周期 (Specify Thread lifetime)
每个线程的生命周期,即线程何时启动和停止。
持续时间 (Duration(seconds))
每个线程执行测试计划的时间限制。线程将在达到指定的持续时间后停止执行。单位是秒。
启动延迟 (Startup delay(seconds))
线程组启动之前的等待时间。这可以用来模拟用户在一段时间后开始访问应用程序的情况,或者在测试开始后一段时间内逐渐引入用户。单位是秒。
配置元件
HTTP请求默认值
右键测试计划,添加,配置元件,HTTP请求默认值
用于设置请求参数的默认值,这些值将应用于测试计划中的所有 HTTP 请求。这样就不必为每个请求都手动设置相同的信息,而是可以在默认值中定义它们。
HTTP信息头管理器
右键测试计划,添加,配置元件,HTTP信息头管理器
用于配置请求的 HTTP 头部信息。HTTP头部包括请求中的元数据,如User-Agent、Cookie等。使用此管理器,可以为特定请求或线程组设置自定义的 HTTP 头部信息。
参数化
在 JMeter 中,参数化是一种测试技术,用于模拟多个用户执行相似但不相同的请求或操作。参数化允许通过使用变量来自动化和重复测试步骤,而不是手动更改每个请求中的值。
通过参数化,可以更好地模拟实际用户的多样性,提高测试的真实性和覆盖范围。这对于评估应用程序的性能和稳定性在各种情况下的表现非常有帮助。
参数化的目的
参数化的主要目的是模拟多个用户或情景执行相同的测试步骤,但每个用户或情景都具有不同的输入数据。这可以用于测试各种情况下的应用程序性能,包括不同用户的输入、不同数据集的处理等。
参数化的使用场景
参数化在许多测试场景中非常有用,例如登录测试,其中每个用户可能具有不同的用户名和密码;搜索测试,其中每个用户搜索不同的关键词;或者数据提交测试,每个用户提交不同的表单数据。
参数化的实现
在 JMeter 中,参数化通常使用变量来实现。可以使用变量来替代测试中的特定值,然后在测试计划中指定变量的值。这些变量可以从不同的数据源中获取,如CSV文件、数据库查询或随机生成的值。
常见的参数化方式
CSV文件参数化
使用CSV文件作为数据源,其中每行包含一组数据,而每个列对应一个变量。JMeter可以通过CSV数据文件配置元件来加载数据,并将数据应用于请求,以便每个线程都使用不同的数据行。
随机参数化
随机生成数据,例如随机数、日期或其他数值,然后将这些数据用于请求。JMeter提供了一些内置函数和变量,可用于生成随机数据。
用户定义的变量
自定义变量,并在测试计划中使用这些变量,以在请求中传递自定义值。这对于需要使用特定值的测试场景非常有用。
数据库查询参数化
通过JDBC请求,从数据库中查询数据,并将查询结果存储在变量中。然后在请求中使用这些变量,以便每个线程都能够获取不同的数据库数据。
用户参数化控制器
使用用户参数化控制器,可以创建用户自定义的参数化逻辑,以根据特定规则生成参数。能够更精确地控制参数值的生成方式。
参数化-用户定义的变量
- 测试计划 - 添加 - 配置元件 - 用户定义的变量
定义
线程设置
参数化-CSV数据文件设置
准备数据
- insert-batch.csv
csv
username,password,email,gender
future-weaver,670b14728ad9902aecba32e22fa4f6bd,leaf_8742@163.com,m
rainbow-weaver,670b14728ad9902aecba32e22fa4f6bd,rainbow-weaver@future-weaver.com,m
定义
- 测试计划 - 添加 - 配置元件 - CSV Data Set Config
线程组设置
- 测试计划 - 添加 - 线程 - 线程组
线程设置
- 线程组 - 添加 - 取样器 - HTTP请求
参数化-用户参数
线程组设置
- 测试计划- 添加 - 线程 - 线程组
线程设置
- 线程组 - 添加 - 取样器 - HTTP请求
定义
- HTTP请求 - 添加 - 前置处理器 - 用户参数
查看结果树
- 测试计划 - 添加 - 监听器 - 查看结果树
参数化-函数
计数器函数(__counter
)
函数助手对话框
线程组设置
- 测试计划- 添加 - 线程 - 线程组
线程设置
- 线程组 - 添加 - 取样器 - HTTP请求
查看结果树
- 测试计划 - 添加 - 监听器 - 查看结果树
随机数函数(__random
)
禁用线程
函数助手对话框
线程设置
- 线程组 - 添加 - 取样器 - HTTP请求
查看结果树
- 测试计划 - 添加 - 监听器 - 查看结果树
时间函数(__time
)
函数助手对话框
线程设置
- 线程组 - 添加 - 取样器 - HTTP请求
查看结果树
- 测试计划 - 添加 - 监听器 - 查看结果树
直连数据库
添加jar包
连接池配置
- 测试计划 - 添加 - 配置元件 - JDBC Connection Configuration
线程组设置
- 测试计划 - 添加 - 线程 - 线程组
线程设置
- 线程组 - 添加 - 取样器 - JDBC Request
查看结果树
- 测试计划 - 添加 - 监听器 - 查看结果树
引用SQL结果
线程配置
添加取样器
- 线程组 - 添加 - 取样器 - Debug Sampler
添加引用线程
- 线程组 - 添加 - 取样器 - HTTP请求
查看结果树
- 测试计划 - 添加 - 监听器 - 查看结果树
断言
响应断言
响应体断言
测试计划 - 添加 - 线程 - 线程组
线程组 - 添加 - 取样器 - HTTP请求
HTTP请求 - 添加 - 断言 - 响应断言
- 测试字段: 响应文本
- 模式匹配规则: 包括
- 测试模式: 添加-老张
测试计划 - 添加 - 监听器 - 查看结果树
状态码断言
测试计划 - 添加 - 线程 - 线程组
线程组 - 添加 - 取样器 - HTTP请求
HTTP请求 - 添加 - 断言 - 响应断言
- 测试字段: 响应代码
- 模式匹配规则: 相等,或者
- 测试模式: 添加200,添加201
测试计划 - 添加 - 监听器 - 查看结果树
大小断言
- 测试计划 - 添加 - 线程 - 线程组
- 线程组 - 添加 - 取样器 - HTTP请求
- HTTP请求 - 添加 - 断言 - 大小断言
- 【解释】参考字段: Size in bytes(完整响应), Response Code(响应代码),Response message(响应信息)
- 完整响应
- 响应字段大小: 完整响应
- Size to Assert: 2192
- 比较类型:
=
- 响应代码
- 响应字段大小: 响应代码
- Size to Assert: 3(200,大小为3)
- 比较类型:
=
- 响应信息
- 响应字段大小: 响应信息
- Size to Assert: 2(OK,大小为2)
- 比较类型:
=
- 测试计划 - 添加 - 监听器 - 查看结果树
断言持续时间
- 测试计划 - 添加 - 线程 - 线程组
- 线程组 - 添加 - 取样器 - HTTP请求
- HTTP请求 - 添加 - 断言 - 断言持续时间
- 断言持续时间(毫秒): 5
- 测试计划 - 添加 - 监听器 - 查看结果树
学习目标总结
- 能知道JMeter的优缺点
- 能掌握JMeter的安装流程
- 能掌握JMeter线程组的设置
- 能掌握JMeter参数化的使用
- 能掌握JMeter直连数据库操作
- 能掌握JMeter的断言