pytest可以在测试类中运行测试吗?

时间:2018-10-24 11:35:54

标签: python pytest

我决定在一个类中进行一堆测试,示例代码如下:

class IntegrationTests:

    @pytest.mark.integrationtest
    @pytest.mark.asyncio
    async def test_job(self):
        assert await do_stuff()

但是,当我尝试运行测试时: pipenv run pytest -v -m integrationtest,根本没有检测到它们,在将它们移到班级之前,我得到了以下信息:

5 passed, 4 deselected in 0.78 seconds

我现在得到这个:

2 passed, 4 deselected in 0.51 seconds

为什么pytest无法检测到这些测试?不支持测试类吗?

3 个答案:

答案 0 :(得分:3)

该类的名称必须以Test开头,以便pytest发现才能找到它。

class TestIntegration:

    @pytest.mark.integrationtest
    @pytest.mark.asyncio
    async def test_job(self):
        assert await do_stuff()

请参见Conventions for Python test discovery

答案 1 :(得分:1)

创建pytest.ini

来自the docs

  

如果需要更改测试文件,类和测试的命名约定,则可以创建文件pytest.ini,并设置选项python_filespython_classes和{{ 1}}:

示例:

python_functions

对于您来说,如果您不想更改类# content of pytest.ini # Example 1: have pytest look for "check" instead of "test" # can also be defined in tox.ini or setup.cfg file, although the section # name in setup.cfg files should be "tool:pytest" [pytest] python_files = check_*.py python_classes = *Tests python_functions = *_check 的名称,请将IntegrationTests设置为python_classes

在类中运行测试

*Tests

在类中运行测试

pytest /path/to/test_file_name.py::ClassName

答案 2 :(得分:0)

要在“ TestIntegration”类下运行所有​​测试,可以使用:

pytest -k TestIntegration