首页 文章

pytest有多个命令行选项

提问于
浏览
0

我对pytest的一个命令行参数没有任何问题 .

当我运行程序时:
python -m pytest -q -v --confcutdir=/usr/local/penguin/home/px09/p001 --cmdopt=type1 test-suite.py

我得到了预期的回应:

================================================ FAILURES ================================================
______________________________________________ test_answer _______________________________________________

cmdopt = 'type1'

    def test_answer(cmdopt):
        if cmdopt == "type1":
            print ("first")
        elif cmdopt == "type2":
            print ("second")
>       assert 0 # to see what was printed
E       assert 0

test-suite.py:7: AssertionError
------------------------------------------ Captured stdout call ------------------------------------------
first
======================================== 1 failed in 0.01 seconds ==============

当我尝试多个参数时,我会遇到问题

_s1 test_sample.py的内容

def test_answer(cmdopt):
    if cmdopt == "type1":
        print ("first")
    elif cmdopt == "type2":
        print ("second")
    assert 0 # to see what was printed

def test_answer2(cmdopt2):
    if cmdopt2 == "type1":
        print ("first")
    elif cmdopt2 == "type2":
        print ("second")
    assert 0 # to see what was printed

conftest.py的内容

import pytest

def pytest_addoption(parser):
    parser.addoption("--cmdopt", action="store", default="type1",
        help="my option: type1 or type2")
    parser.addoption("--cmdopt2", action="store", default="type3",
                     help="my option: type3 or type4")

@pytest.fixture
def cmdopt(request):
    return request.config.getoption("--cmdopt")

def cmdopt2(request):
    return request.config.getoption("--cmdopt2")

_____________________________________设置test_answer2时的错误_____________________________________文件/usr/local/penguin/home/px09/p001/test-suite.py,line 9 def test_answer2(cmdopt2):未找到E fixture'cmdopt2'>可用灯具:cache,capfd ,capsys,cmdopt,doctest_namespace,monkeypatch,pytestconfig,record_xml_property,recwarn,tmpdir,tmpdir_factory>使用'pytest --fixtures [testpath]'获取有关它们的帮助 . /usr/local/penguin/home/px09/p001/test-suite.py:9

================================================ FAILURES ================================================
______________________________________________ test_answer _______________________________________________

cmdopt = 'type1'

    def test_answer(cmdopt):
        if cmdopt == "type1":
            print ("first")
        elif cmdopt == "type2":
            print ("second")
>       assert 0 # to see what was printed
E       assert 0

test-suite.py:7: AssertionError
-

1 回答

  • 2

    我认为这个问题很简单 . 只需在 cmdopt2 函数之前添加 @pytest.fixture 装饰器即可

    @pytest.fixture
    def cmdopt(request):
    return request.config.getoption("--cmdopt")
    
    @pytest.fixture
    def cmdopt2(request):
        return request.config.getoption("--cmdopt2")
    

相关问题