簡體   English   中英

如何使用 pytest 測試 try/except 塊並涵蓋所有異常

[英]How to test try/except block with pytest and cover all exceptions

我有一個調用 api 的函數來獲取訪問令牌:

def get_token():
    try:
        url = 'https://call-api/accesstoken'
        token = 'authentication-token'
        headers = {"Authorization": "Bearer %s" % token}
        session = requests.Session()
        response = session.get(url, headers=headers)
        return response.json()
    except HTTPError as http_err:
        print(f'HTTP error occurred: {http_err}')
    except Exception as err:
        print(f'Other error occurred: {err}')

我想用 pytest 測試這個函數並驗證 try/except 塊。 這是我的測試功能:

import responses
import functions as m_functions

@responses.activate
def test_get_token():

    url = 'https://call-api/accesstoken'
    
    responses.add(responses.GET, url, 
        json = {
                "accessToken": "tmp-token1"
                })
    
    response = m_functions.get_token()
    assert response['accessToken'] == 'tmp-token1'

塊 try 內的部分已經過測試,但是如何測試異常部分呢? 目前,只有 try 塊內的部分被測試覆蓋。 我希望我的代碼被完全覆蓋。

任何想法? 謝謝

文檔中所示,您可以指定一個異常作為請求的響應正文以觸發異常:

responses.add(responses.GET, url, body=SomeExceptionObject(...))

因此,您可以進行兩種測試:一種將HTTPError指定為異常,另一種則使用不同的異常進行測試。 然后,您可以使用capsys夾具來捕獲標准輸出。

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

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