Jmeter中的定时器(二)
5--JSR223 Timmer
功能特点
- 自定义延迟逻辑:使用脚本语言动态计算请求之间的延迟时间。
- 灵活控制:可以根据测试数据和条件动态调整延迟时间。
- 支持多种脚本语言:支持 Groovy、JavaScript、BeanShell 等多种脚本语言。
支持的脚本语言
- Groovy:推荐使用,性能优越且功能强大。
- JavaScript:支持 ECMAScript 标准。
- BeanShell:支持 Java 语法。
- 其他语言:支持任何符合 JSR223 规范的脚本语言。
配置步骤
-
添加 JSR223 定时器
- 右键点击需要添加定时器的请求或线程组。
- 选择“添加” -> “定时器” -> “JSR223 定时器”。
-
配置 JSR223 定时器
- 名称:给 JSR223 定时器一个有意义的名称。
- 脚本语言:选择使用的脚本语言(例如 Groovy)。
- 脚本文件:选择脚本文件路径(可选,如果脚本较长或需要版本控制)。
- 脚本:直接在脚本编辑框中编写脚本。
- 参数:定义脚本中使用的参数(可选)。
示例配置
假设我们需要测试一个Web应用,并在每个请求之间添加一个动态计算的延迟时间,延迟时间基于当前请求的响应时间。
-
创建测试计划:
- 右键点击“测试计划” -> 新建 -> 输入测试计划名称(例如“Web应用性能测试”)。
-
添加线程组:
- 右键点击测试计划 -> 添加 -> 线程组 -> 输入线程组名称(例如“用户模拟”)。
- 配置线程组:
- 线程数:10(模拟10个用户)
- 循环次数:10(每个用户发送10次请求)
- 启动延迟:0(立即启动)
-
添加HTTP请求:
- 右键点击线程组 -> 添加 -> 取样器 -> HTTP请求。
- 配置HTTP请求:
- 名称:请求名称(例如“获取用户列表”)。
- 服务器名称或IP:目标服务器的地址(例如
example.com
)。 - 端口号:目标服务器的端口(例如
80
)。 - 协议:HTTP或HTTPS(例如
HTTP
)。 - 方法:请求的方法(例如
GET
)。 - 路径:请求的路径(例如
/api/users
)。
-
添加 JSR223 定时器:
- 右键点击HTTP请求 -> 添加 -> 定时器 -> JSR223 定时器。
- 配置 JSR223 定时器:
- 名称:JSR223 定时器
- 脚本语言:Groovy
- 脚本:在脚本编辑框中编写以下 Groovy 脚本:
// 获取上一个请求的响应时间 int responseTime = prev.getTime()// 计算延迟时间,例如延迟时间为响应时间的一半 int delay = responseTime / 2// 返回延迟时间(单位为毫秒) return delay
-
运行测试:
- 点击工具栏上的“启动”按钮,运行测试。
优化建议
-
脚本语言选择:
- 推荐使用 Groovy,因为它性能优越且功能强大,是 JMeter 官方推荐的脚本语言。
-
脚本文件:
- 如果脚本较长或需要版本控制,可以将脚本保存到文件中,并在 JSR223 定时器中选择脚本文件路径。
-
参数:
- 如果脚本需要使用外部参数,可以在“参数”部分定义参数,并在脚本中引用这些参数。
-
性能影响:
- 注意复杂脚本可能会对测试性能产生影响,特别是在大规模性能测试中。可以通过优化脚本和减少不必要的操作来提高性能。
-
错误处理:
- 在脚本中添加适当的错误处理逻辑,确保脚本在遇到异常时能够优雅地处理。
-
日志记录:
- 使用日志记录功能可以帮助调试和分析脚本执行情况,确保日志文件路径有效且有足够的写权限。
示例配置详细说明
假设我们有一个简单的测试计划,包含一个线程组和一个HTTP请求,并希望在每个请求之间添加一个动态计算的延迟时间,延迟时间基于当前请求的响应时间。
-
创建测试计划:
- 右键点击“测试计划” -> 新建 -> 输入测试计划名称(例如“Web应用性能测试”)。
-
添加线程组:
- 右键点击测试计划 -> 添加 -> 线程组 -> 输入线程组名称(例如“用户模拟”)。
- 配置线程组:
- 线程数:10(模拟10个用户)
- 循环次数:10(每个用户发送10次请求)
- 启动延迟:0(立即启动)
-
添加HTTP请求:
- 右键点击线程组 -> 添加 -> 取样器 -> HTTP请求。
- 配置HTTP请求:
- 名称:获取用户列表
- 服务器名称或IP:example.com
- 端口号:80
- 协议:HTTP
- 方法:GET
- 路径:/api/users
-
添加 JSR223 定时器:
- 右键点击HTTP请求 -> 添加 -> 定时器 -> JSR223 定时器。
- 配置 JSR223 定时器:
- 名称:JSR223 定时器
- 脚本语言:Groovy
- 脚本:在脚本编辑框中编写以下 Groovy 脚本:
// 获取上一个请求的响应时间 int responseTime = prev.getTime()// 计算延迟时间,例如延迟时间为响应时间的一半 int delay = responseTime / 2// 返回延迟时间(单位为毫秒) return delay
-
运行测试:
- 点击工具栏上的“启动”按钮,运行测试。
6--Synchronizing Timer
功能特点
- 并发控制:确保一组线程在同一时间点执行某个请求。
- 灵活配置:可以设置等待的线程数和超时时间。
- 适用于压力测试:特别适合需要模拟大量并发用户的场景。
配置步骤
-
添加同步定时器
- 右键点击需要添加定时器的请求或线程组。
- 选择“添加” -> “定时器” -> “同步定时器”(Synchronizing Timer)。
-
配置同步定时器
- 名称:给同步定时器一个有意义的名称。
- 数量的线程(用户):设置需要等待的线程数。
- 超时(毫秒):设置等待的最大时间(可选)。
参数说明
- 数量的线程(用户):设置需要等待的线程数。例如,如果设置为10,则需要等待10个线程都到达同步点后才会继续执行。
- 超时(毫秒):设置等待的最大时间。如果在指定时间内没有达到设定的线程数,定时器将释放已等待的线程。如果不设置,定时器将无限期等待。
示例配置
假设我们需要测试一个Web应用,并确保每次有10个用户同时执行某个请求。
-
创建测试计划:
- 右键点击“测试计划” -> 新建 -> 输入测试计划名称(例如“Web应用性能测试”)。
-
添加线程组:
- 右键点击测试计划 -> 添加 -> 线程组 -> 输入线程组名称(例如“用户模拟”)。
- 配置线程组:
- 线程数:20(模拟20个用户)
- 循环次数:1(每个用户发送1次请求)
- 启动延迟:0(立即启动)
-
添加HTTP请求:
- 右键点击线程组 -> 添加 -> 取样器 -> HTTP请求。
- 配置HTTP请求:
- 名称:请求名称(例如“获取用户列表”)。
- 服务器名称或IP:目标服务器的地址(例如
example.com
)。 - 端口号:目标服务器的端口(例如
80
)。 - 协议:HTTP或HTTPS(例如
HTTP
)。 - 方法:请求的方法(例如
GET
)。 - 路径:请求的路径(例如
/api/users
)。
-
添加同步定时器:
- 右键点击HTTP请求 -> 添加 -> 定时器 -> 同步定时器。
- 配置同步定时器:
- 名称:同步定时器
- 数量的线程(用户):10(每次等待10个线程)
- 超时(毫秒):(可选)如果不设置,定时器将无限期等待
-
运行测试:
- 点击工具栏上的“启动”按钮,运行测试。
优化建议
-
线程数设置:
- 根据实际需求设置合适的线程数。确保线程数足够大,以便能够达到所需的并发效果。
-
超时设置:
- 如果需要确保测试在一定时间内完成,可以设置超时时间。超时时间应根据系统响应时间和测试需求来设置。
-
放置位置:
- 同步定时器可以放在线程组级别或特定请求级别。放在线程组级别会影响该线程组中的所有请求,放在特定请求级别只影响该请求。
-
多请求场景:
- 如果有多个请求需要同步执行,可以为每个请求单独添加同步定时器,或者将多个请求放在一个线程组中,然后在该线程组中添加同步定时器。
-
性能影响:
- 同步定时器可能会对测试性能产生一定影响,特别是在大规模性能测试中。可以通过调整线程数和超时时间来优化性能。
-
组合使用:
- 同步定时器可以与其他定时器(如固定定时器、统一随机定时器等)组合使用,以实现更复杂的延迟策略。
示例配置详细说明
假设我们有一个简单的测试计划,包含一个线程组和一个HTTP请求,并希望每次有10个用户同时执行某个请求。
-
创建测试计划:
- 右键点击“测试计划” -> 新建 -> 输入测试计划名称(例如“Web应用性能测试”)。
-
添加线程组:
- 右键点击测试计划 -> 添加 -> 线程组 -> 输入线程组名称(例如“用户模拟”)。
- 配置线程组:
- 线程数:20(模拟20个用户)
- 循环次数:1(每个用户发送1次请求)
- 启动延迟:0(立即启动)
-
添加HTTP请求:
- 右键点击线程组 -> 添加 -> 取样器 -> HTTP请求。
- 配置HTTP请求:
- 名称:获取用户列表
- 服务器名称或IP:example.com
- 端口号:80
- 协议:HTTP
- 方法:GET
- 路径:/api/users
-
添加同步定时器:
- 右键点击HTTP请求 -> 添加 -> 定时器 -> 同步定时器。
- 配置同步定时器:
- 名称:同步定时器
- 数量的线程(用户):10(每次等待10个线程)
- 超时(毫秒):(可选)如果不设置,定时器将无限期等待
-
运行测试:
- 点击工具栏上的“启动”按钮,运行测试。
7--泊松随机定时器
功能特点
- 泊松分布:使用泊松分布生成随机延迟时间,使延迟时间更加自然和随机。
- 灵活配置:可以设置平均延迟时间和偏差系数。
- 适用于模拟真实用户行为:特别适合需要模拟真实用户行为的性能测试。
配置步骤
-
添加泊松随机定时器
- 右键点击需要添加定时器的请求或线程组。
- 选择“添加” -> “定时器” -> “泊松随机定时器”(Poisson Random Timer)。
-
配置泊松随机定时器
- 名称:给泊松随机定时器一个有意义的名称。
- 常量延迟偏移(毫秒):设置平均延迟时间。
- 泊松分布的lambda值:设置泊松分布的λ值(Lambda值),控制随机延迟的分布。
参数说明
- 常量延迟偏移(毫秒):设置平均延迟时间。这是泊松分布的期望值(平均值)。
- 泊松分布的lambda值:设置泊松分布的λ值。λ值越大,随机延迟的波动范围越大。
示例配置
假设我们需要测试一个Web应用,并在每个请求之间添加基于泊松分布的随机延迟时间,平均延迟时间为2000毫秒(2秒)。
-
创建测试计划:
- 右键点击“测试计划” -> 新建 -> 输入测试计划名称(例如“Web应用性能测试”)。
-
添加线程组:
- 右键点击测试计划 -> 添加 -> 线程组 -> 输入线程组名称(例如“用户模拟”)。
- 配置线程组:
- 线程数:10(模拟10个用户)
- 循环次数:10(每个用户发送10次请求)
- 启动延迟:0(立即启动)
-
添加HTTP请求:
- 右键点击线程组 -> 添加 -> 取样器 -> HTTP请求。
- 配置HTTP请求:
- 名称:请求名称(例如“获取用户列表”)。
- 服务器名称或IP:目标服务器的地址(例如
example.com
)。 - 端口号:目标服务器的端口(例如
80
)。 - 协议:HTTP或HTTPS(例如
HTTP
)。 - 方法:请求的方法(例如
GET
)。 - 路径:请求的路径(例如
/api/users
)。
-
添加泊松随机定时器:
- 右键点击HTTP请求 -> 添加 -> 定时器 -> 泊松随机定时器。
- 配置泊松随机定时器:
- 名称:泊松随机定时器
- 常量延迟偏移(毫秒):2000(平均延迟时间为2000毫秒)
- 泊松分布的lambda值:1.0(λ值为1.0,表示标准泊松分布)
-
运行测试:
- 点击工具栏上的“启动”按钮,运行测试。
优化建议
-
平均延迟时间:
- 根据实际需求设置合适的平均延迟时间。过短的延迟可能导致服务器过载,过长的延迟可能无法充分测试系统的性能。
-
λ值设置:
- λ值控制随机延迟的分布。较大的λ值会导致更大的随机波动,较小的λ值会使延迟时间更集中于平均值。根据测试需求选择合适的λ值。
-
放置位置:
- 泊松随机定时器可以放在线程组级别或特定请求级别。放在线程组级别会影响该线程组中的所有请求,放在特定请求级别只影响该请求。
-
多请求场景:
- 如果有多个请求需要添加随机延迟,可以为每个请求单独添加泊松随机定时器,或者将多个请求放在一个线程组中,然后在该线程组中添加泊松随机定时器。
-
性能影响:
- 泊松随机定时器可能会对测试性能产生一定影响,特别是在大规模性能测试中。可以通过调整平均延迟时间和λ值来优化性能。
-
组合使用:
- 泊松随机定时器可以与其他定时器(如固定定时器、统一随机定时器等)组合使用,以实现更复杂的延迟策略。
示例配置详细说明
假设我们有一个简单的测试计划,包含一个线程组和一个HTTP请求,并希望在每个请求之间添加基于泊松分布的随机延迟时间,平均延迟时间为2000毫秒。
-
创建测试计划:
- 右键点击“测试计划” -> 新建 -> 输入测试计划名称(例如“Web应用性能测试”)。
-
添加线程组:
- 右键点击测试计划 -> 添加 -> 线程组 -> 输入线程组名称(例如“用户模拟”)。
- 配置线程组:
- 线程数:10(模拟10个用户)
- 循环次数:10(每个用户发送10次请求)
- 启动延迟:0(立即启动)
-
添加HTTP请求:
- 右键点击线程组 -> 添加 -> 取样器 -> HTTP请求。
- 配置HTTP请求:
- 名称:获取用户列表
- 服务器名称或IP:example.com
- 端口号:80
- 协议:HTTP
- 方法:GET
- 路径:/api/users
-
添加泊松随机定时器:
- 右键点击HTTP请求 -> 添加 -> 定时器 -> 泊松随机定时器。
- 配置泊松随机定时器:
- 名称:泊松随机定时器
- 常量延迟偏移(毫秒):2000(平均延迟时间为2000毫秒)
- 泊松分布的lambda值:1.0(λ值为1.0,表示标准泊松分布)
-
运行测试:
- 点击工具栏上的“启动”按钮,运行测试。
8--高斯随机定时器
功能特点
- 高斯分布:使用高斯分布生成随机延迟时间,使延迟时间更加自然和随机。
- 灵活配置:可以设置平均延迟时间和标准差。
- 适用于模拟真实用户行为:特别适合需要模拟真实用户行为的性能测试。
配置步骤
-
添加高斯随机定时器
- 右键点击需要添加定时器的请求或线程组。
- 选择“添加” -> “定时器” -> “高斯随机定时器”(Gaussian Random Timer)。
-
配置高斯随机定时器
- 名称:给高斯随机定时器一个有意义的名称。
- 常量延迟偏移(毫秒):设置平均延迟时间。
- 高斯随机偏移(毫秒):设置标准差,控制随机延迟的分布范围。
参数说明
- 常量延迟偏移(毫秒):设置平均延迟时间。这是高斯分布的均值(μ)。
- 高斯随机偏移(毫秒):设置标准差(σ),控制随机延迟的分布范围。标准差越大,随机延迟的波动范围越大。
示例配置
假设我们需要测试一个Web应用,并在每个请求之间添加基于高斯分布的随机延迟时间,平均延迟时间为2000毫秒(2秒),标准差为500毫秒。
-
创建测试计划:
- 右键点击“测试计划” -> 新建 -> 输入测试计划名称(例如“Web应用性能测试”)。
-
添加线程组:
- 右键点击测试计划 -> 添加 -> 线程组 -> 输入线程组名称(例如“用户模拟”)。
- 配置线程组:
- 线程数:10(模拟10个用户)
- 循环次数:10(每个用户发送10次请求)
- 启动延迟:0(立即启动)
-
添加HTTP请求:
- 右键点击线程组 -> 添加 -> 取样器 -> HTTP请求。
- 配置HTTP请求:
- 名称:请求名称(例如“获取用户列表”)。
- 服务器名称或IP:目标服务器的地址(例如
example.com
)。 - 端口号:目标服务器的端口(例如
80
)。 - 协议:HTTP或HTTPS(例如
HTTP
)。 - 方法:请求的方法(例如
GET
)。 - 路径:请求的路径(例如
/api/users
)。
-
添加高斯随机定时器:
- 右键点击HTTP请求 -> 添加 -> 定时器 -> 高斯随机定时器。
- 配置高斯随机定时器:
- 名称:高斯随机定时器
- 常量延迟偏移(毫秒):2000(平均延迟时间为2000毫秒)
- 高斯随机偏移(毫秒):500(标准差为500毫秒)
-
运行测试:
- 点击工具栏上的“启动”按钮,运行测试。
优化建议
-
平均延迟时间:
- 根据实际需求设置合适的平均延迟时间。过短的延迟可能导致服务器过载,过长的延迟可能无法充分测试系统的性能。
-
标准差设置:
- 标准差控制随机延迟的分布范围。较大的标准差会导致更大的随机波动,较小的标准差会使延迟时间更集中于平均值。根据测试需求选择合适的标准差。
-
放置位置:
- 高斯随机定时器可以放在线程组级别或特定请求级别。放在线程组级别会影响该线程组中的所有请求,放在特定请求级别只影响该请求。
-
多请求场景:
- 如果有多个请求需要添加随机延迟,可以为每个请求单独添加高斯随机定时器,或者将多个请求放在一个线程组中,然后在该线程组中添加高斯随机定时器。
-
性能影响:
- 高斯随机定时器可能会对测试性能产生一定影响,特别是在大规模性能测试中。可以通过调整平均延迟时间和标准差来优化性能。
-
组合使用:
- 高斯随机定时器可以与其他定时器(如固定定时器、统一随机定时器等)组合使用,以实现更复杂的延迟策略。
示例配置详细说明
假设我们有一个简单的测试计划,包含一个线程组和一个HTTP请求,并希望在每个请求之间添加基于高斯分布的随机延迟时间,平均延迟时间为2000毫秒,标准差为500毫秒。
-
创建测试计划:
- 右键点击“测试计划” -> 新建 -> 输入测试计划名称(例如“Web应用性能测试”)。
-
添加线程组:
- 右键点击测试计划 -> 添加 -> 线程组 -> 输入线程组名称(例如“用户模拟”)。
- 配置线程组:
- 线程数:10(模拟10个用户)
- 循环次数:10(每个用户发送10次请求)
- 启动延迟:0(立即启动)
-
添加HTTP请求:
- 右键点击线程组 -> 添加 -> 取样器 -> HTTP请求。
- 配置HTTP请求:
- 名称:获取用户列表
- 服务器名称或IP:example.com
- 端口号:80
- 协议:HTTP
- 方法:GET
- 路径:/api/users
-
添加高斯随机定时器:
- 右键点击HTTP请求 -> 添加 -> 定时器 -> 高斯随机定时器。
- 配置高斯随机定时器:
- 名称:高斯随机定时器
- 常量延迟偏移(毫秒):2000(平均延迟时间为2000毫秒)
- 高斯随机偏移(毫秒):500(标准差为500毫秒)
-
运行测试:
- 点击工具栏上的“启动”按钮,运行测试。
9--BeanShell Timer
功能特点
- 自定义延迟逻辑:使用 BeanShell 脚本动态计算请求之间的延迟时间。
- 灵活控制:可以根据测试数据和条件动态调整延迟时间。
- 支持 BeanShell 脚本:支持使用 BeanShell 脚本语言编写延迟逻辑。
配置步骤
-
添加 BeanShell 定时器
- 右键点击需要添加定时器的请求或线程组。
- 选择“添加” -> “定时器” -> “BeanShell 定时器”。
-
配置 BeanShell 定时器
- 名称:给 BeanShell 定时器一个有意义的名称。
- 文件:选择脚本文件路径(可选,如果脚本较长或需要版本控制)。
- 脚本:直接在脚本编辑框中编写脚本。
- 参数:定义脚本中使用的参数(可选)。
示例配置
假设我们需要测试一个Web应用,并在每个请求之间添加一个动态计算的延迟时间,延迟时间基于当前请求的响应时间。
-
创建测试计划:
- 右键点击“测试计划” -> 新建 -> 输入测试计划名称(例如“Web应用性能测试”)。
-
添加线程组:
- 右键点击测试计划 -> 添加 -> 线程组 -> 输入线程组名称(例如“用户模拟”)。
- 配置线程组:
- 线程数:10(模拟10个用户)
- 循环次数:10(每个用户发送10次请求)
- 启动延迟:0(立即启动)
-
添加HTTP请求:
- 右键点击线程组 -> 添加 -> 取样器 -> HTTP请求。
- 配置HTTP请求:
- 名称:请求名称(例如“获取用户列表”)。
- 服务器名称或IP:目标服务器的地址(例如
example.com
)。 - 端口号:目标服务器的端口(例如
80
)。 - 协议:HTTP或HTTPS(例如
HTTP
)。 - 方法:请求的方法(例如
GET
)。 - 路径:请求的路径(例如
/api/users
)。
-
添加 BeanShell 定时器:
- 右键点击HTTP请求 -> 添加 -> 定时器 -> BeanShell 定时器。
- 配置 BeanShell 定时器:
- 名称:BeanShell 定时器
- 脚本:在脚本编辑框中编写以下 BeanShell 脚本:
// 获取上一个请求的响应时间 int responseTime = prev.getTime();// 计算延迟时间,例如延迟时间为响应时间的一半 int delay = responseTime / 2;// 返回延迟时间(单位为毫秒) return delay;
-
运行测试:
- 点击工具栏上的“启动”按钮,运行测试。
优化建议
-
脚本语言选择:
- 虽然 BeanShell 是一个强大的脚本语言,但 Groovy 通常性能更好且功能更强大。如果可能,建议使用 Groovy 脚本。
-
脚本文件:
- 如果脚本较长或需要版本控制,可以将脚本保存到文件中,并在 BeanShell 定时器中选择脚本文件路径。
-
参数:
- 如果脚本需要使用外部参数,可以在“参数”部分定义参数,并在脚本中引用这些参数。
-
性能影响:
- 注意复杂脚本可能会对测试性能产生影响,特别是在大规模性能测试中。可以通过优化脚本和减少不必要的操作来提高性能。
-
错误处理:
- 在脚本中添加适当的错误处理逻辑,确保脚本在遇到异常时能够优雅地处理。
-
日志记录:
- 使用日志记录功能可以帮助调试和分析脚本执行情况,确保日志文件路径有效且有足够的写权限。
示例配置详细说明
假设我们有一个简单的测试计划,包含一个线程组和一个HTTP请求,并希望在每个请求之间添加一个动态计算的延迟时间,延迟时间基于当前请求的响应时间。
-
创建测试计划:
- 右键点击“测试计划” -> 新建 -> 输入测试计划名称(例如“Web应用性能测试”)。
-
添加线程组:
- 右键点击测试计划 -> 添加 -> 线程组 -> 输入线程组名称(例如“用户模拟”)。
- 配置线程组:
- 线程数:10(模拟10个用户)
- 循环次数:10(每个用户发送10次请求)
- 启动延迟:0(立即启动)
-
添加HTTP请求:
- 右键点击线程组 -> 添加 -> 取样器 -> HTTP请求。
- 配置HTTP请求:
- 名称:获取用户列表
- 服务器名称或IP:example.com
- 端口号:80
- 协议:HTTP
- 方法:GET
- 路径:/api/users
-
添加 BeanShell 定时器:
- 右键点击HTTP请求 -> 添加 -> 定时器 -> BeanShell 定时器。
- 配置 BeanShell 定时器:
- 名称:BeanShell 定时器
- 脚本:在脚本编辑框中编写以下 BeanShell 脚本:
// 获取上一个请求的响应时间 int responseTime = prev.getTime();// 计算延迟时间,例如延迟时间为响应时间的一半 int delay = responseTime / 2;// 返回延迟时间(单位为毫秒) return delay;
-
运行测试:
- 点击工具栏上的“启动”按钮,运行测试。