[英]Python Requests: assert status_code is not failing
如果 api 調用返回 403 代碼,我試圖通過特定的錯誤消息使測試失敗。 我嘗試了幾個選項:
if int(addresses.status_code) is 403:
fail("Auth Error: Missing Role {}".format(response.json()))
assert addresses.status_code is not 403
assert addresses.status_code is not codes.forbidden
assert addresses.status_code is codes.ok
其中唯一失敗的是最后一個, assert addresses.status_code is codes.ok
。 但是,api 調用響應的狀態代碼是403。我嘗試過確保類型相同等,但不知道還能去哪里。
如何測試 status_code 不是特定值?
is
身份測試。 狀態碼確實與403
或codes.forbidden
不是同一個對象。 狀態值是一個整數,而不是一個單例枚舉對象。
使用==
測試值是否相同:
if addresses.status_code == 403:
# ...
assert addresses.status_code != 403
assert addresses.status_code != codes.forbidden
assert addresses.status_code == codes.ok
或者只是使用
addresses.raise_for_status() # raises an exception if not 1xx, 2xx or 3xx
所述Response.raise_for_status()
方法提出了一個requests.exceptions.HTTPError
異常(的一個子類requests.exceptions.RequestException
,在轉OSError
子類)。
請注意,有時is
可用於整數或任意數量的其他類型。 但是除非有可以使用身份測試的特定文檔,否則您會找到一個實現細節,其中 Python 將出於性能原因重用對象。 小整數(從 -5 到 256)、某些情況下的字符串以及許多其他極端情況就是這種情況。 所以address.status_code is 200
恰好適用於當前的 CPython 解釋器,但這不是給定的,不應依賴。
您正在使用is
,它檢查兩個對象的身份。 為了比較int
你應該使用==
。 事實上,除非檢查單例(即None
)或實際需要時,否則總是使用==
。
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.