jmeter与python请求-不同的响应时间

jmeter与python请求-不同的响应时间,jmeter,python-requests,load-testing,Jmeter,Python Requests,Load Testing,我正在使用Jmeter和python请求包运行负载测试,但是当我尝试访问同一个网站时,会得到不同的结果 目标网站: 申请次数:100 Jmeter的平均响应时间:1965ms python请求的平均响应时间:4076ms 我已经检查了jmeter和python请求的响应html内容是否相同。所以这意味着他们都从网站上得到了正确的回复。但不知道为什么它之间有2倍的差异。有人知道这有什么深层次的原因吗 python请求示例代码: repeat_time = 100 url = 'http://www

我正在使用Jmeter和python请求包运行负载测试,但是当我尝试访问同一个网站时,会得到不同的结果

目标网站:

申请次数:100

Jmeter的平均响应时间:1965ms

python请求的平均响应时间:4076ms

我已经检查了jmeter和python请求的响应html内容是否相同。所以这意味着他们都从网站上得到了正确的回复。但不知道为什么它之间有2倍的差异。有人知道这有什么深层次的原因吗

python请求示例代码:

repeat_time = 100
url = 'http://www.somewebsite.com/'
base_time = datetime.datetime.now()
time_cost = base_time
for i in range(repeat_time):
    start_time = datetime.datetime.now()
    r = requests.get(url, headers=headers)
    end_time = datetime.datetime.now()
    print str(r.status_code) + ';time cost: %s' % (end_time - start_time)
    time_cost += (end_time - start_time)
print 'total time: %s' % (time_cost - base_time)
print 'average time: %s' % ((time_cost - base_time).total_seconds() / repeat_time)

如果没有JMeter代码,我无法告诉您区别是什么,但让我告诉您在一次请求调用中发生了什么:

我们创建一个会话对象,以及我们使用的urllib3连接池 我们对“www.somewebsite.com”进行DNS查找,这不会对该请求产生太大的负面影响 我们为“www.somewebsite.com:80”打开了一个套接字 我们发出请求 我们收到响应的第一个字节 我们确定用户是否想要流式传输响应体,如果不想,我们读取所有响应体并在本地缓存。 请记住,三个最密集的部分通常是:

DNS查找有各种原因,但正如我已经说过的,它在这里不应该是一个问题 套接字创建这始终是一项昂贵的操作 读取整个正文并在本地缓存它。 也就是说,每个响应对象都应该有一个属性,该属性将为您提供响应主体的第一个字节的时间。换句话说,它将测量从实际发送请求到找到报头结尾之间的时间

这可能会为您提供比您现在测量的更准确的信息,即到消息最后一个字节的时间

也就是说,请记住,您在for循环中所做的工作也经常调用垃圾收集器:

创建会话、它的适配器、适配器连接池等。 创建套接字 丢弃插座 放弃会话 转到1 如果只创建一次会话,脚本通常会执行得更好