python-3.x 在pytest中使用自己的装饰器

zqdjd7g9  于 2023-02-01  发布在  Python
关注(0)|答案(1)|浏览(155)

我想在多个pytest测试文件中使用一个“helper”装饰器:

min311 = pytest.mark.skipif(sys.version_info < (3,11), reason="You need at least Python v3.11 to run this test")

...
@min311
def test_...

min311的最佳位置是哪个?它不是从conftest.py自动导入的。

vdzxcuhz

vdzxcuhz1#

给定此布局:

.
├── src
│   ├── conftest.py
│   └── mycode
│       ├── __init__.py
│       └── main.py
└── tests
    ├── conftest.py
    ├── __init__.py
    └── test_mycode.py

4 directories, 6 files

如果我在tests/conftest.py中定义min311,那么在test_mycode.py中我可以写:

from tests.conftest import min311

@min311
def test_something():
  ...

这里假设我们从顶层目录运行pytest
这也适用于较简单的布局:

.
├── conftest.py
├── mycode
│   ├── __init__.py
│   └── main.py
└── tests
    ├── conftest.py
    ├── __init__.py
    └── test_mycode.py

如果你不想直接从conftest导入,只需把装饰器定义移到更合适的地方。我见过很多项目在代码中包含类似test_helpers模块的东西:

.
├── conftest.py
├── mycode
│   ├── __init__.py
│   ├── main.py
│   └── test_helpers.py
└── tests
    ├── conftest.py
    └── test_mycode.py

然后您可以:

from mycode.test_helpers import min311

相关问题