测试代码是否从 py.test 会话中执行

新手上路,请多包涵

如果我的代码在 py.test 下运行,我想连接到不同的数据库。是否有可以调用的函数或我可以测试的环境变量会告诉我是否在 py.test 会话下运行?处理这个问题的最佳方法是什么?

原文由 Laizer 发布,翻译遵循 CC BY-SA 4.0 许可协议

阅读 432
2 个回答

RTFM 提供了一个解决方案,虽然不是在一个明显的地方。该手册在代码中也有错误,已在下面更正。

检测是否从 pytest 运行中运行

如果从测试中调用,让应用程序代码表现不同通常不是一个好主意。但是,如果您绝对必须查明您的应用程序代码是否正在通过测试运行,您可以这样做:

 # content of conftest.py
def pytest_configure(config):
    import sys
    sys._called_from_test = True

def pytest_unconfigure(config):
    import sys  # This was missing from the manual
    del sys._called_from_test

然后检查 sys._called_from_test 标志:

 if hasattr(sys, '_called_from_test'):
    # called from within a test run
else:
    # called "normally"

相应地在您的应用程序中。使用您自己的应用程序模块而不是 sys 来处理标志也是一个好主意。

原文由 Laizer 发布,翻译遵循 CC BY-SA 4.0 许可协议

我想到了一个更简单的解决方案:

 import sys

if "pytest" in sys.modules:
    ...

Pytest runner 将始终加载 pytest 模块,使其在 sys.modules 中可用。

当然,此解决方案仅在您尝试测试的代码不使用 pytest 本身时才有效。

原文由 ramnes 发布,翻译遵循 CC BY-SA 3.0 许可协议

撰写回答
你尚未登录,登录后可以
  • 和开发者交流问题的细节
  • 关注并接收问题和回答的更新提醒
  • 参与内容的编辑和改进,让解决方法与时俱进
推荐问题