簡體   English   中英

pytest:如何不運行參數化 class 方法的所有測試組合?

[英]pytest: how to NOT run all test combinations of a parametrized class method?

我有一個測試 class 在所有方法中都進行了參數化。 我還想用其他變量參數化一些方法。 但是,我不想運行所有組合(因為其中一些總是會失敗)。

考慮以下:

@pytest.mark.parametrize("base_url", ["api/v1/actions/", "api/v1/quotes/"])
class TestAPIResponse:

    @pytest.mark.parametrize("api_verbose_name", ["ação", "declaração"])
    def test_example(self, api_client, base_url, api_verbose_name):
        ...

使用此配置,我們有 4 個測試:

  1. base_url = "api/v1/actions/"api_verbose_name = "ação"
  2. base_url = "api/v1/quotes/"api_verbose_name = "declaração"
  3. base_url = "api/v1/actions/"api_verbose_name = "declaração"
  4. base_url = "api/v1/quotes/"api_verbose_name = "ação"

如何使test_example僅運行上述第三和第四次測試?

現在我正在通過幫助程序 function 獲取api_verbose_name ......

def get_api_verbose_name(base_url: str) -> str:
    if "quotes" in base_url:
        api_verbose_name = "declaração"
    if "actions" in base_url:
        api_verbose_name = "ação"

    return api_verbose_name


@pytest.mark.parametrize("base_url", ["api/v1/actions/", "api/v1/quotes/"])
class TestAPIResponse:
    
    def test_example(self, api_client, base_url):
        api_verbose_name = get_api_verbose_name(base_url=base_url)
        ...

...但這對我來說似乎不是理想的方式。

我可以在沒有這個助手 function 的情況下執行這組測試嗎?

稍微偏離@AnthonySottile 所說的內容,如果您知道要跳過的端點,您可以在對pytest.mark.parametrize的調用中標記它。 下面的示例顯示了如何利用pytest.param來做到這一點。

import pytest


def example(base, api):
    return f"{base}{api}"


@pytest.mark.parametrize("base_url", ["api/v1/actions/", "api/v1/quotes/"])
class TestAPI:
    @pytest.mark.parametrize("api_verbose_name", 
        ["ação", pytest.param("declaração", marks=pytest.mark.skip)]
    )
    def test_example(self, base_url, api_verbose_name):
        result = example(base_url, api_verbose_name)
        assert result == f"{base_url}{api_verbose_name}"

當我們運行測試時,我們可以看到由於跳過了 rest,因此只運行了兩個測試收集了四個測試。

collected 4 items                                                                                                                                               

test_foo.py ..ss                                                                                                                                          [100%]

================================================================= 2 passed, 2 skipped in 0.02s ==================================================================

暫無
暫無

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

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