如何将pytest测试报告中参数间的短横线替换为空格
解决pytest参数化测试名称中分隔符混淆的问题
你遇到的这个问题是因为pytest默认会把参数值里的特殊字符替换成连字符,而且在组合多维度参数化的测试名称时也用连字符连接,导致参数自带的连字符和分隔用的连字符混在一起,很容易让人误解。不用额外定义多个fixture,我们可以通过@pytest.mark.parametrize的ids参数自定义测试名称的显示逻辑,轻松把分隔符换成空格。
方法1:手动指定参数显示ID
直接给每个参数化装饰器添加ids参数,传入和参数值完全一致的列表,pytest就会用你指定的文本作为测试名称的一部分,且不同维度的参数会自动用空格分隔:
import pytest @pytest.mark.parametrize("option_a", ["-r", "-s"], ids=["-r", "-s"]) @pytest.mark.parametrize("option_b", ["--alpha", "--beta", "--gamma"], ids=["--alpha", "--beta", "--gamma"]) def test_foo(option_a, option_b): assert option_a in ["-r", "-s"]
方法2:用Lambda自动生成ID
如果参数值数量较多,手动写ids太繁琐,可以用lambda函数直接把参数值本身作为显示ID,写法更简洁:
import pytest @pytest.mark.parametrize("option_a", ["-r", "-s"], ids=lambda x: x) @pytest.mark.parametrize("option_b", ["--alpha", "--beta", "--gamma"], ids=lambda x: x) def test_foo(option_a, option_b): assert option_a in ["-r", "-s"]
效果验证
修改后运行测试,报告会变成这样:
======================================= test session starts ======================================= platform linux -- Python 3.9.7, pytest-6.2.4, py-1.10.0, pluggy-0.13.1 -- /usr/bin/python3 cachedir: .pytest_cache rootdir: /home/guest/Desktop/project, configfile: pytest.ini collected 6 items test_ping.py::test_foo[--alpha -r] PASSED [ 16%] test_ping.py::test_foo[--alpha -s] PASSED [ 33%] test_ping.py::test_foo[--beta -r] PASSED [ 50%] test_ping.py::test_foo[--beta -s] PASSED [ 66%] test_ping.py::test_foo[--gamma -r] PASSED [ 83%] test_ping.py::test_foo[--gamma -s] PASSED [100%] ======================================= 6 passed in 0.02s ========================================
现在测试名称里的参数用空格清晰分隔,--alpha和-r不会再被误解成一个参数,完美解决了你的困扰。
内容的提问来源于stack exchange,提问作者Buttonwood
相关产品推荐
相关产品推荐

