簡體   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