【问题标题】:Pytest run a 'setup' method based on pytest command line argumentPytest 基于 pytest 命令行参数运行“设置”方法
【发布时间】:2020-11-27 22:18:47
【问题描述】:

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

为简单起见,假设我有一个文件 'text_something.py'

import somemodule

def test_some(usefakemodule):
   ...

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

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

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

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

【问题讨论】:

    标签: python pytest


    【解决方案1】:

    在您的 conftest.py 中,您使用 pytest_addoption 结合 pytest_cmdline_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")
    

    【讨论】:

    • 这正是我想要的。谢谢
    【解决方案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)
    

    【讨论】:

    • 是的,我想第一个例子可以工作,但如果我必须基于多个参数,就会变得混乱。对于第二个示例,如果我运行我得到 USE_FAKE_MODULE 不被识别为命令,怎么会这样。我在windows中运行,这只适用于linux环境吗?我知道你只是在设置一个环境变量
    • 是的,设置 env var 的语法在 windows 上会有所不同(尽管我认为 python 代码应该是相同的)。你可以看到superuser.com/questions/223104/…stackoverflow.com/questions/1420719/…
    猜你喜欢
    • 2021-08-14
    • 2012-10-27
    • 2017-05-25
    • 2018-03-22
    • 2022-10-21
    • 1970-01-01
    • 1970-01-01
    • 2018-04-06
    • 1970-01-01
    相关资源
    最近更新 更多