当前位置: 首页 > 知识库问答 >
问题:

在 jMeter/Groovy 中创建计时器时遇到问题

吕作人
2023-03-14

我在csv文件中有时间戳值,我正在jMeter中的ThreadGoup中加载该文件。我使用JSR223脚本来计算每个线程之间的延迟时间,但我很难做到这一点。

我想启动没有真实数据的线程,这就是我使用 csv 日志文件中的时间戳的原因。但我不知道如何为此配置等式。我正在脚本中的 csv 读取时间戳,我知道等待时间应该等于当前时间戳值 - 以前的线程时间戳值,但我如何实现这一点?

def long wait=0;

// this returns the currents threads timestamp value from the csv
def long ts = Double.valueOf(vars.get("timestamp")).longValue();

wait = ts - {previous timestamp in csv}

return wait;

我正在使用groovy编写脚本,在我的线程组中我有httpRequest和JSR223定时器。有什么想法吗?

共有3个答案

傅经业
2023-03-14

习惯于查看jmeter.log文件——通常它应该包含Groovy(或jmeter)测试错误或失败的原因。通过单击JMeter GUI右上角的黄色三角形,可以打开Log Viewer窗口

将代码修改为:

if (vars.get('previousTimestamp') != null) {
    long ts = vars.get('timestamp') as Long
    long wait = ts - (vars.get('previousTimestamp') as Long)
    return wait
} else {
    vars.put('previousTimestamp', vars.get('timestamp') as String)
    //return 1000
}

逻辑是:

  1. 如果定义了 previousTimestamp 变量 - “sleep”表示上一个时间戳和当前时间戳之间的增量时间
  2. 如果未定义 previousTimestamp 变量 - 将当前时间戳变量存储previousTimestamp 并且不Hibernate。您可以取消注释,返回 1000 行以提供 1 秒的“默认”睡眠

以防万一,请查看Groovy指南中的数学函数和转换数据类型,它应该会让您更深入地了解您试图实现的内容。

柴瀚
2023-03-14

您的代码应该是:

 // this returns the currents threads timestamp value from the csv
 long ts = vars["timestamp"].toLong();
 long wait = ts - {previous timestamp in csv}
 return wait;

我不明白这一价值的来源:

{csv中的上一个时间戳}

最后,你需要了解计时器是如何工作的:

  • 定时器
  • 范围规则

所以如果你真的想在采样器之间应用它,确保你把你的定时器作为流量控制动作的子:

徐德海
2023-03-14

您应该将其传递给睡眠方法,而不是返回等待:

 sleep(wait);

要阅读CSV,请参阅答案

 类似资料:
  • 问题内容: 我想创建一种秒表,当分钟数达到20分钟时,会弹出一个对话框,该对话框不是问题。但是我的分钟变量在此代码中没有增加。 问题答案: 您可以使用以下方法真正简化整个程序:

  • 当您在网站或应用程序上执行任何操作时,它们自然会有暂停和延迟。 这些可以使用计时器(Timers)进行模拟。 JMeter发送请求时不会在每个采样器/请求之间应用延迟。 如果在服务器上执行负载/压力测试没有指定延迟,它将会超载。 这可能不完全是我们想要的。可以添加一个计时器元素,该元素允许您定义在每个请求到达时间等待的终止。 下面给出了JMeter提供的所有计时器元素的列表: 同步定时器 JSR2

  • 我使用以下方式安装Gatsbyjs: 它安装,然后当我试图创建一个新的网站,它显示一些错误。 我尝试了盖茨比新网站,但它显示了一些错误: PS C:\Users\Klawnny\Dropbox\react电子商务 gatsby-cli@2.7.53更新了一个包在46.004s PS C:\用户\克劳尼\Dropbox\电子商务与反应 文件C:\Users\Klawnny\AppData\Roami

  • 我对编码相当陌生,所以这可能是一个愚蠢的问题,但我找不到任何解决方案。我想计算到日期之间的差异(以天为单位)。它在大多数情况下都有效,但当月份发生变化时,我会得到奇怪的解决方案<第一个例子: 今天-2018年9月30日=78天, 今天-2018年9月31日=79天(?) 今天-2018年10月1日=80天 第二个例子: 今天-2018年8月31日=49天, 今天-2018年9月1日=49天 密码

  • 我最近在VSCODE中调试时遇到了一个很大的问题。我已经试着通过搜索网站和重新安装我的一些扩展来修复它。 它不会在调试控制台中显示结果,而是将以下输出写入终端:

  • 问题内容: 我正在尝试玩 文件如此[处(1)])和here(2)所述。 (1)一个不好的例子: 第一种方法可行,但我不想依赖某些东西。第二个结果是仅播放了一些前导帧,听起来更像是单击。从ByteArrayInputStream播放时,不会是IO问题。 请与您分享为什么会发生这种情况。TIA。 问题答案: 我不确定为什么您链接的第二种方法会启动另一个线程;我相信音频还是会以自己的方式播放。剪辑播放完

  • 我正在尝试在tkinter自定义标题栏。 使用以下代码: null 我希望能够添加一个最小化按钮。我尝试用 作为命令创建一个类似于关闭按钮的按钮,但它不能与 一起工作。 null 此外,移动有一个很大的问题,当你尝试移动窗口时,它会移动窗口,使其左上角位于光标所在的位置。这是非常恼人的,也不是Windows的典型行为。 如果有人知道如何解决这些问题,我们将不胜感激。 编辑:我现在已经成功地制作了一

  • 问题内容: 我想要一个每2秒更改一次自己的私有变量的类。我知道如果我做类似的事情 它会在2秒后执行,是否有办法告诉它每2秒执行一次操作,或者,如果我将其放入 能行吗 在旁注中,确切的作用是什么? 问题答案: 使用安排它每两秒钟复发: 从指定的时间开始计划指定的任务以重复执行固定速率。随后的执行大约每隔固定的时间间隔执行一次,并间隔指定的时间。 从javadoc中获取: 终止此计时器,放弃任何当前计