加入收藏 | 设为首页 | 会员中心 | 我要投稿 李大同 (https://www.lidatong.com.cn/)- 科技、建站、经验、云计算、5G、大数据,站长网!
当前位置: 首页 > 编程开发 > Java > 正文

如何使jmeter根据访问日志行中存在的时间戳进行日志重放

发布时间:2020-12-15 04:17:57 所属栏目:Java 来源:网络整理
导读:我最近开始加载测试我的webapp. 我用apache访问日志采样器.我按照本教程. https://jmeter.apache.org/usermanual/jmeter_accesslog_sampler_step_by_step.pdf 我能够使它工作.但现在问题是我在不到10分钟的时间内重播了所有的请求. 我希望jmeter根据发布get
我最近开始加载测试我的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

首先我创建了一个线程组,如图所示:

在这里,我永远选择循环计数.如果未选中,则只有csv文件中的第一行正在运行.这些行没有运行.

现在我添加了csv数据集配置,如图所示:

现在我添加了常量计时器,如图所示:

现在我添加了HTTP请求,如图所示:

我添加了视图结果树监听器并点击了播放按钮.

当我看到每个样本的视图结果树中的示例开始时,延迟不是根据csv文件中存在的延迟.我究竟做错了什么.

EDIT2
我将常量计时器作为HTTP请求的子项.请在下面的屏幕截图中找到请求的时间.你看错了吗?

EDIT3

我遵循bean shell timre方法,当延迟大于之前的响应时间时,它工作正常.但是,当前一个响应时间大于延迟时,它无法正常工作.

我修改了csv文件如下(减少延迟到100毫秒)

0,/myAPP/home
100,/myAPP/home

我删除了常量计时器并添加了下面的bean shell计时器.

这是结果表:

这些是日志行:

解决方法

开箱即用的访问日志采样器不适用于您尝试执行的操作.

您有两种选择:

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脚本.

(编辑:李大同)

【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容!

    推荐文章
      热点阅读