将字符串传递给pytest,传递给unittest类

时间:2017-01-17 06:55:40

标签: python unit-testing pytest

我正在调用python中的测试文件,其中包含以下内容:

py.test mytest.py

我检查了文档,并按照示例将读取传递的参数的夹具添加到conftest文件中:

import pytest

def pytest_addoption(parser):
    parser.addoption("--myoption", action="store", default="",
        help="Specify the option string")

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

在我的单元测试类中,我确实添加了装饰器来调用fixture:

import pytest

@pytest.mark.usefixtures("myoption")
class VariousTests(unittest.TestCase):

    def test_runsomething(self):
        print(myoption)

虽然我无法以任何方式获得我选择的价值;我在这做错了什么?我想要的只是将一个字符串传递给pytest,因此它可以在我的单元测试类中填充一个类变量。

1 个答案:

答案 0 :(得分:0)

如果使用pytest.mark.usefixtures标记,则无法访问夹具对象,但只有夹具功能的副作用。

如果要在测试方法中使用fixture对象访问,请使用显式指定fixture作为参数:

import pytest

def test_runsomething(myoption):   # <--- myoption specified as parameter
    print(myoption)
➜  t cat t.py
import pytest

def test_runsomething(myoption):
    print(myoption)
➜  t py.test -s --myoption myoption-value t.py
==========================================
platform darwin -- Python 2.7.13, pytest-3.0.5, py-1.4.31, pluggy-0.4.0
rootdir: /private/tmp/t, inifile:
collected 1 items

t.py myoption-value
.

============ 1 passed in 0.00 seconds ============

如果你想使用基于unittest.TestCase的测试,你需要修改conftest.py,以便将fixture注入到类中:

conftest.py

import pytest

def pytest_addoption(parser):
    parser.addoption("--myoption", action="store", default="",
        help="Specify the option string")

@pytest.fixture
def myoption(request):
    request.cls.myoption = request.config.getoption("--myoption")
    # ^-- set `myoption` attribute

并在测试方法中将其作为self.myoptionVariousTests.myoption

进行访问
import unittest
import pytest

@pytest.mark.usefixtures("myoption")
class VariousTests(unittest.TestCase):
    def test_runsomething(self):
        print(self.myoption)  # <----