Pytest基于Pytest命令行参数运行“setup”方法

2024-10-02 22:25:15 发布

您现在位置:Python中文网/ 问答频道 /正文

我的问题是,在运行pytest时,如何执行基于pytest参数的setup方法?基本上,我希望在运行任何测试之前先运行这个“设置方法”

为了简单起见,假设我有一个文件“text\u something.py”

import somemodule

def test_some(usefakemodule):
   ...

“somemodule”是否安装在环境中。如果它已经安装,那么它将工作没有问题。如果没有,我需要通过运行一个基本上执行sys.path.append(XXX)的方法来添加假模块的路径

简而言之,如果我想使用假模块dir,我想运行'pytest-v--usefakemodule',或者只运行'pytest-v'来使用本地安装的库(假设它安装在那里)

我尝试在conftest.py中添加一个fixture(scope=session),但在执行“test\u something.py”之前,它似乎没有先运行/执行fixture,然后执行“test\u something.py”,这将不会声明名为“somemodule”的模块

我可以在conftest中运行常规方法,但我不知道它如何依赖于pytest命令行参数“usefakemodule”


Tags: 模块文件方法textpytestimport参数
2条回答

我不知道是否/如何让pytest接受额外的参数,但这里有一些实现这一点的其他想法:

  1. 只要尝试导入真正的模块,并在获得ImportError时更新加载路径:
try:
  import somemodule
except ImportError:
  sys.path.append(XXX)
  import somemodule
  1. 或者,使用环境变量并与USE_FAKE_MODULE=true pytest -v一起运行:
import os
if os.environ.get('USE_FAKE_MODULE'):
  sys.path.append(XXX)

在conftest.py中,使用pytest\u addoptionpytest\u cmdline\u main组合使用, 有关详细信息,请参阅文档

import pytest


def pytest_addoption(parser):
    parser.addoption(
        " usefakemodule", action="store_true", default=False, help="Use fake module "
    )

def pytest_cmdline_main(config):
    usefakemodule = config.getoption(" usefakemodule")
    print(usefakemodule)
    if usefakemodule:
        print("OK fake module ")
    else:
        print("no fakes")

相关问题 更多 >