繁体   English   中英

Python 从 function 返回参数化测试

[英]Python testing with parameterization from function return

我一直在尝试使用pytest解决 python 测试,但未能找到有效的示例配置 - 尽管有些配置很接近。 这是我的案例研究:

@pytest.fixture
def vil_check():
   code
   return [(v1,v2,v3), (...), (...)]

@pytest.mark.parameterize("v1,v2,v3", vil_check):
def test_one(v1,v2,v3):
      assert v1 < 2
      assert v2 > 5
      ....

我正在尝试遵循此示例:

@pytest.mark.parametrize("test_input,expected", [("3+5", 8), ("2+4", 6), ("6*9", 42)])
def test_eval(test_input, expected):
    assert eval(test_input) == expected

但是使用fixture来提供列表: [("3+5", 8), ("2+4", 6), ("6*9", 42)]

但是,此配置不起作用:

@pytest.mark.parametrize("v1, v2, v3", vil_check)
def test_max(v1, v2, v3):
   assert abs(v1) <= 5

错误是 pytest 没有看到 vil_check 返回可迭代。 似乎有一种方法可以使用pytest_generate_tests来完成此任务,但我对如何编写它持空白。

根据 OP 的评论,因为vil_check不需要是夹具,所以您可以执行以下操作 - fixture decorator from and在下面it in

def vil_check():
   # code
   yield from [(v1,v2,v3), (...), (...)]

@pytest.mark.parametrize("v1,v2,v3", vil_check()):
def test_one(v1,v2,v3):
      assert v1 < 2
      assert v2 > 5
      # code

几点:

  • 你拼错了parametrized ,如果你设置了--strict-markers这可能会给你错误。
  • 装饰器不应该有:
  • 为了性能,我在vil_check中使用了yield from而不是return 如果列表很大,这将是有效的

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM