python - 如何在使用 pytest 和命令行选项时跳过 unittest 案例中的设置和拆卸?

标签 python pytest python-unittest

当前设置

使用

  • pytest 3.4.1
  • python 3.5 及以上

这是我在tests/test_8_2_openpyxl.py下的测试用例

class TestSomething(unittest.TestCase):

    def setUp(self):
        # do setup stuff here

    def tearDown(self):
        # do teardown stuff here

    def test_case_1(self):
        # test case here...

我使用unittest 风格来编写我的测试用例。我使用 pytest 来运行测试。

我还按照 unittest 约定设置和拆卸函数

我运行测试的命令行变成了

pytest -s -v tests/test_8_2_openpyxl.py

它按预期工作

我想要什么

当我有时调试时,我希望能够使用某种命令行选项轻松地关闭设置或拆卸或同时关闭这两者

pytest -s -v tests/test_8_2_openpyxl.py --skip-updown

为了跳过拆解和设置

pytest -s -v tests/test_8_2_openpyxl.py --skip-setup

为了跳过设置

pytest -s -v tests/test_8_2_openpyxl.py --skip-teardown

为了跳过拆解

我尝试过但没有奏效的方法

已尝试 sys.argv

我试过使用sys.argv

class TestSomething(unittest.TestCase):

    def setUp(self):
        if '--skip-updown' in sys.argv:
            return
        # do setup stuff here

然后

`pytest -s -v tests/test_8_2_openpyxl.py --skip-updown

这没有用,我的错误信息是

usage: pytest [options] [file_or_dir] [file_or_dir] [...]
pytest: error: argument --skip-updown: expected one argument

尝试过 sys.argv

我试过使用sys.argv

class TestSomething(unittest.TestCase):

    def setUp(self):
        if '--skip-updown' in sys.argv:
            return
        # do setup stuff here

然后

pytest -s -v tests/test_8_2_openpyxl.py --skip-updown

这没有用,我的错误信息是

usage: pytest [options] [file_or_dir] [file_or_dir] [...]
pytest: error: argument --skip-updown: expected one argument

尝试了 conftest.py 和 config.getoption

我在项目根目录下设置了一个conftest.py

def pytest_addoption(parser):
    parser.addoption("--skip-updown", default=False)


@pytest.fixture
def skip_updown(request):
    return request.config.getoption("--skip-updown")

然后

class TestSomething(unittest.TestCase):

    def setUp(self):
        if pytest.config.getoption("--skip-updown"):
            return
        # do setup stuff here and then

pytest -s -v tests/test_8_2_openpyxl.py --skip-updown

然后我得到

usage: pytest [options] [file_or_dir] [file_or_dir] [...]
pytest: error: argument --skip-updown: expected one argument

我尝试和工作但不理想的东西

尝试了 conftest 和 config.getoption 但这次声明 --skip-updown=True

除了这次在我的命令行中我声明了 --skip-updown=True

pytest -s -v tests/test_8_2_openpyxl.py --skip-updown=True

我的问题

这非常接近我想要的,但我希望不必声明值 --skip-updown=True

或者也许我一开始就做错了,使用 sys.argv 有更简单的方法。

最佳答案

修复添加选项:

def pytest_addoption(parser):
    parser.addoption("--skip-updown", action='store_true')

请参阅 https://docs.python.org/3/library/argparse.html 上的文档

Or maybe I am doing it all wrong in the first place and there's an easier way using sys.argv.

不,您正在做的是正确且唯一的方法。

关于python - 如何在使用 pytest 和命令行选项时跳过 unittest 案例中的设置和拆卸?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/49568798/

相关文章:

python - 如何在Python中对2个 float 组进行制表而不进行四舍五入

python - PyUnit - 如何对某个输入进入无限循环的方法进行单元测试?

python - 在 Python3 中导入错误运行单元测试

python - "WindowsError: Access is denied"调用 Process.terminate

python - 将标题添加到 Django EmailMultiAlternatives

python-3.x - 如何为python模块为 'tox'运行 'py.test'命令?

Python Mocking - 如何修补函数内的变量

python - 如何对在 __init__ 方法之外初始化的实例变量进行单元测试

python - 将产品条形码添加到 Odoo excel 报告时出错

python - Pytest - 从另一个装置调用一个装置