当服务器总是返回200时,JMeter中的真正错误是什么?

当服务器总是返回200时,JMeter中的真正错误是什么?,jmeter,load-testing,Jmeter,Load Testing,我正在对一个电子商务网站进行负载测试。在中到重载情况下,Jmeter报告异常多的错误,即生成的.csv文件中的succes=FALSE,这将转换为Jmeter仪表板报告中相当高的%错误 在检查Kibana日志时,除了一些警告,没有任何错误,所有http请求的状态都是200。事实上,我能够验证在我的流中创建的测试用户是否能够登录并查看测试应该执行的任何操作 我的问题是-当服务器端只返回200时,JMeter如何确定这个错误(非200?)?对于较少的线程,错误率为0%。首先,我要检查是否有任何断言因

我正在对一个电子商务网站进行负载测试。在中到重载情况下,Jmeter报告异常多的错误,即生成的.csv文件中的
succes=FALSE
,这将转换为Jmeter仪表板报告中相当高的%错误

在检查Kibana日志时,除了一些
警告
,没有任何错误,所有http请求的状态都是
200
。事实上,我能够验证在我的流中创建的测试用户是否能够登录并查看测试应该执行的任何操作


我的问题是-当服务器端只返回200时,JMeter如何确定这个错误(非200?)?对于较少的线程,错误率为0%。

首先,我要检查是否有任何断言因任何原因而失败。因此,禁用任何断言并运行脚本的最原始版本而不存在任何失败的可能性(基于采样器响应除外)将是我的第一步。如果没用的话

HTTP采样器将因返回代码<200,或返回代码>=400,或任何Java异常而失败,这将在无法发送请求或未收到服务器响应(完整)时发生。最常见的是与各种潜在问题相关的超时:

  • JMeter端缺少可用端口。因为您指出问题只会发生在更多JMeter用户身上,所以这是一种可能性。纸上有65535个端口,但Windows和Linux都默认将可用端口数限制在几千个。确保有足够的端口来运行负载,并在提升线程时监视端口使用情况

  • 即使所有端口都可用,根据客户机和服务器的交互方式以及其他网络问题,许多端口可能会在TIME_WAIT或CLOSE_WAIT状态下等待几分钟。因此,理论上您可能有65k个端口,但实际上您没有足够的端口。在这种情况下,有必要检查它发生的原因(可能指向一个bug),并可能减少端口在此*等待状态下的等待时间

  • 您还需要确保您有足够的RAM、JVM堆和CPU:monitor,以查看是否存在可能导致如此缓慢的瓶颈,从而破坏采样器成功完成其工作的能力

如果上述所有操作都按预期工作,则可能是服务器或客户端和服务器之间的某个人(负载平衡器、代理、防火墙)导致了此问题

  • 我将从服务器开始,验证您发送的所有请求是否都由服务器接收。例如,如果您发送了2000个请求,而服务器收到了1000个请求,并且成功地完成了,那么从服务器的角度来看,一切都很好,但Jmeter的错误率将为50%

  • 还要检查JMeter日志定义,确保故障和异常被正确写入(它们是多行消息,在访问它们时可能会导致日志定义中断,因此您不会看到它们)。例如,运行指向不可用服务器的HTTP采样器。查看是否可以诊断返回的异常是什么


除此之外,找出哪一部分对你“撒谎”将是一种方法,但很难根据当前信息提供任何更具体的建议

是否有超时?没有超时,因为断言,主要是持续时间断言,它可以标记为失败。我的脚本中甚至没有持续时间断言。这肯定是较高负载的函数,但我无法关联,因为日志没有errors@DmitriT在原则上我不会不同意,但JMeter文档(和代码匹配)清楚地表明:
确定HTTP状态代码是否成功,即在200到399之间(包括200到399)