Search on the blog

2016年8月18日木曜日

httpbinでテストする

Pythonのurllib3のRetry、Timeoutの動作確認をするためにテスト用のサーバを書こうかどうか迷っていたところ、httpbinという便利なサイトを見つけた。
これは便利。

指定したステータスコードを返す
https://httpbin.org/status/:code
をたたくと、指定した:codeをステータスコードとして返してくれます。

urllib3でステータスコードが400、500番台の場合はバックオフしてリトライするコードをhttpbinで動作確認。
from urllib3.util import Retry
from urllib3 import PoolManager

http = PoolManager(retries=Retry(total=4, backoff_factor=1.0, status_forcelist=range(400, 600)))

response = http.request('GET', 'https://httpbin.org/status/500')
print ("status code=%s." % response.status)

指定した秒だけ待ってレスポンスを返す
https://httpbin.org/delay/:n
をたたくと、min(n, 10)秒間待ってレスポンスを返してくれます。

urllib3のTimeoutの動作確認用ソースです。5秒たつとtimeoutエラーが発生します。
from urllib3.util import Retry, Timeout
from urllib3 import PoolManager

http = PoolManager(timeout=Timeout(5))

response = http.request('GET', 'https://httpbin.org/delay/8', retries=False)
print ("status code=%s." % response.status)

timeoutしても頑張るバージョン。
from urllib3.util import Retry, Timeout
from urllib3 import PoolManager

timeout = Timeout(5)
retries = Retry(total=4, backoff_factor=1.0, status_forcelist=range(400, 600))

http = PoolManager(timeout=timeout, retries=retries) 
response = http.request('GET', 'https://httpbin.org/delay/8')
print ("status code=%s." % response.status)
この場合は、4回リトライしtimeoutエラーになります。

0 件のコメント:

コメントを投稿