如何测量Python请求POST请求的服务器响应时间?

Shu*_*eng 20 python network-programming python-3.x python-requests server

我创建了这样的requestsPOST请求,其中我指定了超时阈值:

response = requests.post(url, data=post_fields, timeout=timeout)

但是,为了确定"良好"的阈值,我想提前对服务器响应时间进行基准测试.

如何计算服务器的最小和最大响应时间?

小智 43

Response返回的对象requests.post()具有一个名为的属性elapsed,该属性给出了Request已发送和Response已接收之间的时间差.要获得秒数,请使用以下total_seconds()方法:

response = requests.post(url, data=post_fields, timeout=timeout)
print(response.elapsed.total_seconds())
Run Code Online (Sandbox Code Playgroud)

应该提到的requests.post()是同步操作,这意味着它"阻塞"直到收到响应.

  • 只是想在任何“响应”上添加“已用”,而不仅仅是“ POST”请求的响应。 (3认同)
  • 请注意,这不会让您花费时间从服务器下载响应,而只会花费直到获得没有响应内容的返回标头为止的时间。如果您希望经过的时间包括下载响应所花费的时间,则必须使用time.clock() (2认同)

Dan*_*ott 5

这取决于您是否可以通过大量测试请求访问服务器,或者是否需要等待真正的请求发生。

如果您需要真实的请求数据,则需要包装调用以确定每个请求的时间:

start = time.clock()
response = requests.post(url, data=post_fields, timeout=timeout)
request_time = time.clock() - start
self.logger.info("Request completed in {0:.0f}ms".format(request_time)
#store request_time in persistent data store
Run Code Online (Sandbox Code Playgroud)

您需要在某个地方存储一段时间内每个请求的结果(文件,数据库等)。然后,您可以只计算响应时间的统计信息。

如果您有可用的测试服务器,则可以使用apachebench之类的工具在不使用python的情况下对响应进行基准测试,并为每个请求发送测试数据:

https://gist.github.com/kelvinn/6a1c51b8976acf25bd78

  • Python 3.8 中删除了 time.clock() 函数。首选替换似乎是“time.perf_counter()”。 (3认同)