![](/img/trans.png)
[英]How to mark specific combinations of parametrized pytest arguments?
[英]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 個測試:
base_url = "api/v1/actions/"
和api_verbose_name = "ação"
base_url = "api/v1/quotes/"
和api_verbose_name = "declaração"
base_url = "api/v1/actions/"
和api_verbose_name = "declaração"
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.