Python 使用py.test以编程方式收集或创建测试
我正在编写一个pytest插件,以便在运行测试之前对其进行排序。我想要一个更好的方法来为我的插件编写测试 我正在使用pytest的Python 使用py.test以编程方式收集或创建测试,python,unit-testing,pytest,Python,Unit Testing,Pytest,我正在编写一个pytest插件,以便在运行测试之前对其进行排序。我想要一个更好的方法来为我的插件编写测试 我正在使用pytest的pytest\u collection\u modifyitems,然后根据某些标记将项修改到位。测试这一点的最简单方法是拥有pytest测试的输入列表,将它们传递给我的函数,并断言输出的顺序正确 我在收集或创建输入测试列表时遇到问题。输入测试的格式应与pytest将作为项传递到pytest\u集合\u modifyitems钩子的格式相同,即它们应该是定义了适当标记
pytest\u collection\u modifyitems
,然后根据某些标记将项修改到位。测试这一点的最简单方法是拥有pytest测试的输入列表,将它们传递给我的函数,并断言输出的顺序正确
我在收集或创建输入测试列表时遇到问题。输入测试的格式应与pytest将作为项
传递到pytest\u集合\u modifyitems
钩子的格式相同,即它们应该是定义了适当标记的\u pytest.python.Function
的实例
我将接受以下回答:1)收集给定现有Python模块的测试,或2)以编程方式创建\u pytest.Python.Function
实例,这些实例看起来像传递给pytest\u collection\u modifyitems
钩子的实例。任何使生成测试数据变得容易的方法。我建议您使用testdir
fixture使用更高级别的测试方法,这是pytest插件的常见方法,可通过pytester
插件获得:
pytest_plugins = "pytester"
def test_something(testdir):
"""Test some thing."""
testdir.makepyfile("""
import pytest
@pytest.mark.some
def test_some():
assert True
@pytest.mark.some_thing_else
def test_some_thing_else():
assert True
""")
result = testdir.runpytest('-vv')
assert result.stdout.lines[-4:-2] == [
u'test_something.py::test_some PASSED',
u'test_something.py::test_some_thing_else PASSED'
]
这样,您可以很容易地在源代码中有多个排列的测试及其标记,并通过断言输出的行来确定实际的排序。
从PyTestV6.2开始,您可能需要考虑<代码> PyTytUs//Cult>夹具>代码> TestDIR < /C>。