Pytest:使用 mark.paramatrize 与 fixture(params=[]) 参数化测试数据
Pytest: Paramatrizing test data with mark.paramatrize vs fixture(params=[])
我正在尝试自学 Pytest,并试图了解使用 @pytest.fixture(params=[]) 和 @pytest.mark.parametrization() 参数化测试数据之间的区别。我已经设置了下面的代码以查看两者的工作原理并且它们都 return 相同的结果。但是,我不确定是否存在其中一种方法优于另一种方法的用例。使用一个比另一个有好处吗?
import pytest
@pytest.fixture(params=["first parameter", "second parameter", "third parameter"])
def param_fixture(request):
return request.param
def parametrize_list():
return ["first parameter", "second parameter", "third parameter"]
def test_using_fixture_params(param_fixture):
"""Tests parametrization with fixture(params=[])"""
assert "parameter" in param_fixture
@pytest.mark.parametrize("param", parametrize_list())
def test_using_mark_parametrize(param):
"""Tests parametrization with mark.parametrize()"""
assert "parameter" in param
上面的代码有以下结果。
test_parametrization.py::test_using_fixture_params[first parameter] PASSED
test_parametrization.py::test_using_fixture_params[second parameter] PASSED
test_parametrization.py::test_using_fixture_params[third parameter] PASSED
test_parametrization.py::test_using_mark_parametrize[first parameter] PASSED
test_parametrization.py::test_using_mark_parametrize[second parameter] PASSED
test_parametrization.py::test_using_mark_parametrize[third parameter] PASSED
夹具通常用于将数据结构加载到测试中并传递给测试函数。 @pytest.mark.parametrize 是使用不同输入(如上所示)测试大量迭代的首选方法。
开始时这是一个方便的资源:https://realpython.com/pytest-python-testing/
from data_module import Data
class TestData:
"""
Load and Test data
"""
@pytest.fixture(autouse=True)
def data(test):
return Data()
def test_fixture(data):
result = do_test(data)
assert result
@pytest.mark.parametrize('options', ['option1', 'option2', 'option3'])
def test_with_parameterisation(data, options)
result_with_paramaterisation(data, options)
assert result_with_paramaterisation
``
我正在尝试自学 Pytest,并试图了解使用 @pytest.fixture(params=[]) 和 @pytest.mark.parametrization() 参数化测试数据之间的区别。我已经设置了下面的代码以查看两者的工作原理并且它们都 return 相同的结果。但是,我不确定是否存在其中一种方法优于另一种方法的用例。使用一个比另一个有好处吗?
import pytest
@pytest.fixture(params=["first parameter", "second parameter", "third parameter"])
def param_fixture(request):
return request.param
def parametrize_list():
return ["first parameter", "second parameter", "third parameter"]
def test_using_fixture_params(param_fixture):
"""Tests parametrization with fixture(params=[])"""
assert "parameter" in param_fixture
@pytest.mark.parametrize("param", parametrize_list())
def test_using_mark_parametrize(param):
"""Tests parametrization with mark.parametrize()"""
assert "parameter" in param
上面的代码有以下结果。
test_parametrization.py::test_using_fixture_params[first parameter] PASSED
test_parametrization.py::test_using_fixture_params[second parameter] PASSED
test_parametrization.py::test_using_fixture_params[third parameter] PASSED
test_parametrization.py::test_using_mark_parametrize[first parameter] PASSED
test_parametrization.py::test_using_mark_parametrize[second parameter] PASSED
test_parametrization.py::test_using_mark_parametrize[third parameter] PASSED
夹具通常用于将数据结构加载到测试中并传递给测试函数。 @pytest.mark.parametrize 是使用不同输入(如上所示)测试大量迭代的首选方法。
开始时这是一个方便的资源:https://realpython.com/pytest-python-testing/
from data_module import Data
class TestData:
"""
Load and Test data
"""
@pytest.fixture(autouse=True)
def data(test):
return Data()
def test_fixture(data):
result = do_test(data)
assert result
@pytest.mark.parametrize('options', ['option1', 'option2', 'option3'])
def test_with_parameterisation(data, options)
result_with_paramaterisation(data, options)
assert result_with_paramaterisation
``