如何在 pytest 的同一脚本中使用相同的夹具 运行 两个不同的测试函数

How to use the same fixture to run two different test functions in same script in pytest

@pytest.mark.parametrize 允许在测试函数或 class.

中定义多组参数和固定装置

这似乎意味着 pytest.mark.parametrize 可以使用多组 fixture 将测试标记为 运行?我可以找到很多参数化参数的例子,但我无法弄清楚如何使用 pytest.mark.parametrize .

等相同的夹具来参数化不同的测试函数

注意我正在尝试做这样的事情:

import pytest
from Test_cases import math_func
from Test_cases import sample

@pytest.mark.parametrize("num1, num2, result",[(2, 3, 5),(2.2, 3.3, 5.5),])

def test_add(num1, num2, result):
    assert math_func.add(num1, num2) == result

@pytest.mark.parametrize("str1, str2, result",[('hello', ' world', 'hello world'),])

def test_string_add(str1, str2, result):
    assert sample.string_add(str1, str2) == result

但是如何使用相同的标记夹具组合两个不同的函数,如 add 和 string_add。我不想多次使用 mark fixture(因为我有很多测试函数要执行)或者 pytest 中是否还有其他替代方法。

首先检查您是否真的想合并这些测试。至少对于那个简单的例子,它没有多大意义。测试中有一点重复是可以的,这里的可读性更重要。

也就是说,如果您仍然想这样做,您可以将要测试的函数添加为额外参数:

@pytest.mark.parametrize("fct, arg1, arg2, result",
                         [(math_func.add, 2, 3, 5),
                          (math_func.add, 2.2, 3.3, 5.5),
                          (sample.string_add, 'hello', ' world', 'hello world')])
def test_functions(fct, arg1, arg2, result):
    assert fct(arg1, arg2) == result