我最近开始加载测试我的webapp。
我使用了apache访问日志采样器。我按照本教程。
https://jmeter.apache.org/usermanual/jmeter_accesslog_sampler_step_by_step.pdf
我能够让它发挥作用。但现在问题是我在不到10分钟的时间内重播了所有的请求。
我希望jmeter根据发布get请求的时间戳运行get请求。
我无法在线找到任何此类配置。
我可以编写脚本来卷曲特定时间戳的get请求。但我想用jmeter。
是否可能。
修改
我创建了一个带有以下行的示例csv文件:
0,/myAPP/home
5000,/myAPP/home
5000,/myAPP/home
首先我创建了一个线程组,如图所示:
这里我永远选择了循环计数。如果未选中,则只有csv文件中的第一行正在运行。这些行没有运行。
现在我添加了csv数据集配置,如图所示:
现在我添加了常量计时器,如图所示:
现在我添加了HTTP请求,如图所示: 我添加了视图结果树监听器并点击了播放按钮。
当我看到每个样本的视图结果树中的示例开始时,延迟不是根据csv文件中存在的延迟。我做错了什么。
EDIT2 我将常量计时器作为HTTP请求的子项。请在下面的屏幕截图中找到请求的时间。你看错了吗?
EDIT3
我遵循了bean shell timre方法,当延迟大于之前的响应时间时,它工作正常。但是,当前一个响应时间大于延迟时,它无法正常工作。
我修改了csv文件如下(减少延迟到100毫秒)
0,/myAPP/home
100,/myAPP/home
100,/myAPP/home
我删除了常量计时器并添加到bean shell计时器下面。
这是结果表:
这些是日志行:
答案 0 :(得分:7)
开箱即用的访问日志采样器不适用于您尝试执行的操作。
您有两种选择:
1 - 在Jmeter之外进行所有处理工作并创建一个包含两个字段的CSV文件:URL和Delay,然后使用CSV数据集配置。
Youtube JMeter CSV教程:
http://www.youtube.com/watch?v=aEJNc3TW-g8
2 - 在JMeter中进行处理。如果您是Java开发人员,则可以编写beanshell脚本来读取文件并解析URL和时间戳并计算延迟。
这是一个例子:
How to read a string from .csv file and split it?
编辑1
使用您的问题和屏幕截图中的数据看起来一切正常。
关于JMeter延迟的一些事情(使用计时器)
- JMeter将在请求之后(而不是之前)添加延迟
- Jmeter将在服务器完成响应后启动延迟。
在你的情况下(我四舍五入到最接近的秒):
最初请求时间为12:59:53
+请求花了24.5秒
+ 0秒延迟
=下一个请求应该是在13:00:18,这确实是在下一个请求发生时。
13:00:18的第二次请求
+请求花了1.8秒左右
+ 5秒延迟
=下一个请求应该是在13:00:25,这确实是在下一个请求发生时。
我认为你想要的是下一个请求不会影响响应时间。另外,您需要创建$ {delay} - $ {responseTime}
的延迟 编辑2
为了创建一个延迟,它会影响响应时间,你需要使用beanshell计时器而不是常量计时器。
这是代码(把它放在beanshell计时器的脚本部分中):
rtime = Integer.parseInt(String.valueOf(prev.getTime())); // on first run will raise warning
delay = Integer.parseInt(vars.get("delay"));
Integer sleep = delay - rtime;
log.info( "Sleep for " + sleep.toString() + " milli-seconds" );
return sleep;
编辑3
如果response_time> desired_delay吗
如果睡眠计算小于零,则不会有任何中断。它只会睡眠零毫秒。
如果现有请求尚未完成,则只有一个线程无法发出额外请求。从技术上讲,当一个线程不足以保持确切的延迟时,应该可以让不同的线程开始发出请求,但这需要内部线程通信,这可能非常快速地变得非常混乱并且需要beanhell脚本。
答案 1 :(得分:0)
我知道这是一个旧线程,但我遇到了同样的需求 - 重新模拟记录的请求, 我所做的是:
我的 csv 看起来像:{timstamp},{method} 例如:
2016-06-24T18:25:03.621Z,/myAPP/home
2016-06-24T18:25:04.621Z,/myAPP/home
我将差异从现在到 setUp Thread Group 中的第一个时间戳保存为 属性(不是变量,因为变量不在组之间共享)
我使用这个差异来计算每个请求执行前的延迟
完美运行,多线程并且请求永远不会重复:)
*注意:我只想通过 csv 一次,如果您想多次重复它,则必须重新计算在步骤 2 中初始化的差异
*注意 2:确保你有足够的线程来异步运行所有请求
这种方法将给您带来两个主要的延迟优势:
-使用真实日志数据而不转换为延迟
-当延迟小于响应时间时它可以解决您的问题,因为在这种情况下请求将从另一个线程运行