繁体   English   中英

嵌套参数化测试 (pytest)

[英]Nested parametrized tests (pytest)

我正在尝试嵌套参数化测试。 下面的代码做到了,但我只想在param1更改时执行代码(“print param1”很耗时)

@pytest.mark.parametrize("param3", ["p31", "p32"])
@pytest.mark.parametrize("param2", ["p21", "p22"])
@pytest.mark.parametrize("param1", ["p11", "p12"])
def test_one(param1, param2, param3):
    print param1  # goal is to run this only when param1 changes
    print param2, param3

我试过这个,但它似乎不起作用:

@pytest.mark.parametrize("param1", ["p11", "p12"])
def test_one(param1, param2, param3):
   print param1  # goal is to run this only when param1 changes
   @pytest.mark.parametrize("param3", ["p31", "p32"])
   @pytest.mark.parametrize("param2", ["p21", "p22"])
   def test_two(param2, param3):
      print param2, param3

有人有想法吗?

一个同事给了我一个解决方案:

@pytest.fixture(scope="class", params=["B1","B2"])
def two(request):
   print "\n SETUP", request.param
   yield request.param
   #print "\n UNDO", request.param

@pytest.fixture(scope="class", params=["A1", "A2"])
def one(request):
   print "\n SETUP", request.param
   yield request.param
   #print "\n UNDO", request.param

class Test_myclass():
   @pytest.mark.parametrize("param4", ["D1", "D2"])
   @pytest.mark.parametrize("param3", ["C1", "C2"])
   def test_three(self, one, two, param3, param4):
      print "\n ({0} {1}) RUN ".format(one, two), param3, param4,

为了补充egabro 的答案,您可以使用"module" (或"session" )范围来达到相同的目标,而不必将测试嵌套在类中:

import pytest

@pytest.fixture(scope="module", params=["B1","B2"])
def two(request):
   print("\n SETUP", request.param)
   return request.param
   #print "\n UNDO", request.param

@pytest.fixture(scope="module", params=["A1", "A2"])
def one(request):
   print("\n SETUP", request.param)
   return request.param
   #print "\n UNDO", request.param

@pytest.mark.parametrize("param4", ["D1", "D2"])
@pytest.mark.parametrize("param3", ["C1", "C2"])
def test_three(one, two, param3, param4):
  print("\n ({0} {1}) RUN ".format(one, two))

请参阅有关fixtures 的 pytest 文档

暂无
暂无

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

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