簡體   English   中英

Python 請求:斷言 status_code 沒有失敗

[英]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身份測試。 狀態碼確實與403codes.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.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM