【问题标题】:Is there a way to parameterize a pytest with multiple data types in a same test?有没有办法在同一个测试中参数化具有多种数据类型的 pytest?
【发布时间】:2021-12-06 06:14:20
【问题描述】:

目前我有这个实现,我以这种方式运行参数化 pytest:

@pytest.mark.parametrize('int_val', [1, 0])
   def test_int_val(self, int_val: int):
   # performs all the steps

并以这种方式使用布尔值运行相同的测试:

@pytest.mark.parametrize('bool_val', [True, False])
    def test_bool_val(self, bool_val: int):
    # performs all the steps

有没有办法将两个测试结合到一个测试中?

【问题讨论】:

  • 如果您使用相同的代码,您可以将两者结合起来 - 测试是否相同?对于类型检查器,它可能是val: Union[int, bool]...
  • 你没有提到你对这些值做了什么,但 Python 将 10 视为 TrueFalse (除了0 之外的任何数字都将被考虑True)。您需要提供有关您正在尝试做的事情的更多信息。
  • @MrBeanBremen 这些测试将是相同的。我正在尝试使用这 4 个值运行自定义命令并检查输出。所以需要用 int 值检查 - 1, 0 然后 bool 值 true, false
  • 那么,在这种情况下,为什么不把它们放在一起,例如@pytest.mark.parametrize('val', [True, False, 1, 0])?
  • ^^ 只是将所有值视为输入并在测试函数中相应地处理它们?

标签: python python-3.x pytest fixtures


【解决方案1】:

执行以下操作:

@pytest.mark.parametrize('bool_val', [True, False, 1, 0])
def test_bool(bool_val):
    print(f"VAL: {bool_val}")
    # your code

打印这个:

tests/tests_temp.py::test_bool[True] VAL: True
PASSED
tests/tests_temp.py::test_bool[False] VAL: False
PASSED
tests/tests_temp.py::test_bool[1] VAL: 1
PASSED
tests/tests_temp.py::test_bool[0] VAL: 0
PASSED

编辑:根据 OP 的评论

【讨论】:

  • 但我希望测试首先使用 True 运行它,检查结果,然后检查结果为 false 并检查结果,然后使用 1 检查结果,然后使用 0 并检查结果
  • @conscious_breather 已编辑
  • 稍后在测试中,我正在检查 bool_val 是否为布尔值,然后执行这些步骤,如果是 int 则执行这些步骤,在这种情况下,0 和 1 会被视为 int 还是 bool?
  • 它将被视为与传递的相同类型。此外,任何真值都可以通过bool(val) 评估为真/假。您可以使用isinstance 检查值传递的类型。
猜你喜欢
  • 1970-01-01
  • 2012-01-20
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2021-04-27
  • 1970-01-01
  • 1970-01-01
  • 2016-08-10
相关资源
最近更新 更多