首页 > 解决方案 > 我可以拦截 pytest 的命令行参数吗?

问题描述

我非常喜欢pytest,尤其是它能够很好地运行单元测试的能力。但是,我有一些关于 unittest 的技巧,我不知道如何用 pytest 重现,所以我还不能编写完整的 pytest-only 测试。

最好显示,而不是解释。

import unittest

import sys

def active():
    print("active")

def f_default():
    print("inactive")


class Test(unittest.TestCase):

    def test_it(self):
        print("passed")


if __name__ == '__main__':

    flag = "--systrace"

    if flag in sys.argv:
        f_default = active
        sys.argv.remove(flag)

    f_default()
    unittest.main()

基本上,如果在--systrace命令行中传入,我会拦截它,在测试脚本中翻转一些状态,不一定给单元测试,然后将其从sys.argv. unittest 并不明智。

用开关:

python test_unittest_commandline.py --systrace
active
passed
.
----------------------------------------------------------------------
Ran 1 test in 0.000s

OK

没有开关:

$ python test_unittest_commandline.py
inactive
passed
.
----------------------------------------------------------------------
Ran 1 test in 0.000s

pytest 没有留下深刻印象

这是意料之中的,因为我不在场,__main__所以我从不排除出乎意料的论点。是否有一个 pytest 钩子可以用来清除 sys.argv 并记下参数的值?同样,我不在乎参数化测试或 pytest 本身。作为测试运行者,我从来没有运气好过鼻子,但鼻子也没有为单元测试带来自己的增强。

pytest test_unittest_commandline.py --systrace
ERROR: usage: pytest [options] [file_or_dir] [file_or_dir] [...]
pytest: error: unrecognized arguments: --systrace
  inifile: None
  rootdir: /explore

标签: pythoncommand-linepytest

解决方案


推荐阅读