Jmeter平均响应时间与页面的实际平均响应时间有多接近(How close is Jmeter average response time to real world average response time for a page)

我正在运行一个简单的Jmeter测试,有10个用户,并且加速时间为30秒 - 这意味着每3秒就有1个用户在一个页面上。 我得到的平均响应时间为每页约8秒,而实时,我尝试了多少,页面在2秒内加载。 我不应该如何使用Jmeter结果进行测量。 任何帮助在这里高度赞赏。

I am running a simple Jmeter test with 10 users and ramp up time of 30 seconds - which means 1 user on a page every 3 seconds. I get an average response time of ~8 seconds per page whereas in real time, how much ever I try, the page loads within 2 seconds. I don't how I should use Jmeter results for measurement. Any help here highly appreciated.

原文:https://stackoverflow.com/questions/32074249

更新时间:2019-06-07 21:51

最满意答案

给定正确的JMeter配置结果非常接近真实的用户体验。

为了使您的测试更加真实,请考虑以下事项:

添加HTTP Cookie管理器以启用Cookie支持并处理基于cookie的身份验证

添加HTTP标头管理器 - 可能是服务器能够发送压缩数据的情况,即浏览器发送相关标头,而JMeter不会导致更多数据传输 - >响应时间更长

真正的浏览器下载脚本,样式和图像等嵌入式资源。 但真正的浏览器只执行一次 ,后续请求资源从缓存返回。 JMeter每次都会重新下载资源。 为了模拟浏览器的行为,您需要添加HTTP缓存管理器

“10个用户和30秒加速”并不一定意味着“每3秒1个用户”。 为了确保JMeter产生所需的命中率,将恒定吞吐量计时器添加到您的测试计划中并在那里设置所需的吞吐量。

Given correct JMeter configuration results are pretty much close to the real user experience.

In order to make your test more realistic consider the following:

Add HTTP Cookie Manager to enable cookies support and deal with cookie-based authentication

Add HTTP Header Manager - it might be the case when server is capable of sending compressed data and i.e. browser sends the relevant header, and JMeter doesn't resulting in more data to transfer -> longer response time

Real browsers download embedded resources like scripts, styles and images. But real browsers do it only once, on subsequent requests resources are being returned from cache. JMeter re-downloads the resources each time. In order to simulate browser's behavior you need to add HTTP Cache Manager

"10 users and 30 seconds ramp-up" doesn't necessarily mean "1 user each 3 seconds". In order to ensure that JMeter produces desired hits/s rate add Constant Throughput Timer to your test plan and set desired throughput there.

2015-08-18

相关问答

这是因为在MySQL命令行客户端的情况下,您已经连接到数据库,并且在JMeter的情况下,查询执行时间包括设置数据库连接所需的时间。 您可以通过使用相同的“变量名称”添加JDBC PreProcessor来处理它,并执行某种形式的验证查询,即SELECT 1作为主JDBC Request Sampler的子代。 默认情况下,JMeter不包括前/后处理器和定时器进入主样本所花费的时间,因此使用此变通方法,您将能够从负载测试结果中排除建立连接所需的时间。 请参阅使用JMeter构建数据库测试计划的真

...

给定正确的JMeter配置结果非常接近真实的用户体验。 为了使您的测试更加真实,请考虑以下事项: 添加HTTP Cookie管理器以启用Cookie支持并处理基于cookie的身份验证 添加HTTP标头管理器 - 可能是服务器能够发送压缩数据的情况,即浏览器发送相关标头,而JMeter不会导致更多数据传输 - >响应时间更长 真正的浏览器下载脚本,样式和图像等嵌入式资源。 但真正的浏览器只执行一次 ,后续请求资源从缓存返回。 JMeter每次都会重新下载资源。 为了模拟浏览器的行为,您需要添加HT

...

很简单。 您只需在测试片段中添加一个Transaction Controller 。 在Transaction Controller下移动所有HTTP请求。 如果您只查找所有请求的总时间,请选中Generate parent sample复选框。 It is simple. You just add a Transaction Controller in the Test Fragment. Move all the HTTP requests under the Transaction Cont

...

我认为问题在于: (SELECT time_to_sec(timediff(min(u.datetime), u.datetime)) AS response_seconds

在我的控制台上返回0。 试试: ( select time_to_sec( timediff( from_unixtime( floor( UNIX_TIMESTAMP(u.datetime)/60 )*60 ), u.datetime) ) ) as response_seconds;

喜欢 SELECT avg(re

...

从截图中可以清楚地看出,对于这两种情况(20分钟和30分钟),测试完成后(持续时间达到其终点)响应时间都会增加。 这是因为线程不足的减速时间。 如果您的JMeter测试强制停止,所有活动线程将立即关闭。 所以这些线程生成的请求将获得更高的响应时间。 From your screenshot, it is clearly visible that for both cases (20 min and 30 min) response time got increased after the test

...

如果没有你的JMeter代码,我无法告诉你它有什么区别,但是让我告诉你在一次调用请求时发生了什么: 我们创建一个Session对象,以及我们使用的urllib3连接池 我们对'www.somewebsite.com'进行DNS查询,这不应该对此请求产生太大的负面影响 我们为'www.somewebsite.com:80'打开一个插座 我们发送请求 我们收到响应的第一个字节 我们确定用户是否想要流式传输响应的主体,如果不是,我们会读取所有响应并在本地缓存它。 请记住,三个最密集的部分(通常)是: D

...

从JMeter 3.1开始,建议在JMeter中使用Groovy进行任何形式的脚本编写,因此请考虑切换到JSR223元素。 如果您需要修改Sampler的响应时间,我建议您通过JSR223 PostProcessor进行修改 将JSR223 PostProcessor添加为Sampler的子级,您要修改的响应时间 将以下代码放入“脚本”区域: def delta = (vars.get('containerStartedTime') as long) - (vars.get("containerC

...

最简单的选择是添加持续时间断言 但是,如果它不够灵活,你可以随时更深入地使用Beanshell。 如果持续时间超过某个合理的值, Nithin CV poyyil会根据之前的回复更新代码示例,将请求标记为失败: long expectedDuration = 1000L;

long actualDuration = prev.getTime();

if (actualDuration > expectedDuration) {

prev.setSuccessful(false);

...

基本上一切都包括在内,即: 打开(或获取)连接 执行查询 关闭连接 您可以通过将下一行添加到user.properties文件(位于JMeter的“bin”文件夹中)来检查JDBCSampler.java中的详细信息或启用JDBC协议的调试日志记录 log_level.jmeter.protocol.jdbc=DEBUG

或者通过-J命令行参数将其传递给JMeter启动脚本 jmeter -Jlog_level.jmeter.protocol.jdbc=DEBUG -n -t test.jmx

...

我对其中的一些评论感到震惊...... StackOverflow旨在成为一个帮助他人的社区。 如果你要抱怨我的ponctuation或给出一个模糊,无用的答案,为什么还要费心去评论空间呢? 无论如何,我想通了。 基本上,我多次加入同一个表,但只查询了必要的数据。 在第一次加入时,我使用员工消息查询消息表,并按会话编号对其进行分组。 在第二次连接中,我执行了相同的过程但只从用户中提取了消息。 通过在会话ID上加入它们,它会自动省略用户或员工不在场的任何会话。 默认情况下,groupby返回组中的第

...