我正在创建一个Python脚本,它始终检查web应用程序是否正常,因为通常会向多个请求发送超时响应。
该脚本使用httplib:
conn = httplib.HTTPConnection("10.255.255.1")
conn.request("HEAD", "/")
ping = conn.getresponse()
然后简单分析返回的http代码。
我无法控制webapp,因此无法创建一个可以返回任何我想要的内容的端点,所以我的问题是:我如何模拟收到超时的情况?
socket.timeout
;来自不同的包。实际上,我通过将不现实的小超时值0.0001秒作为参数传递给httplib.HTTPConnection
而发现了这一点。def requestResultingInTimeout():
# Pretend to request
raise socket.timeout
import socket
。
可能会像这样处理:
from socket import timeout
try:
requestResultingInTimeout()
except timeout:
print("Now that I got a timeout, I'll print this message instead")
更现代的方法是使用responses库:
def call_some_api(agrs):
# here prepare request payload/auth
try:
response = requests.post(
'https://some-api.com/path/',
headers=headers,
data=payload,
timeout=60
)
except ConnectTimeout as error:
# handle exception if needed
测试:
import responses
from requests.exceptions import ReadTimeout, ConnectTimeout
from my_app import call_some_api
@responses.activate
def test_error_timeout(self):
"""test time-out exception handling"""
responses.add(
responses.POST,
'https://some-api.com/path/',
body=ConnectTimeout(),
)
result = call_some_api(test_agrs)
# here is the assertion of results of your code