我有以下内容作为conftest.py->
def pytest_addoption(parser):
parser.addoption("--browser")
parser.addoption("--osType", help="Type of operating system")
parser.addoption("--hostURL", action="store", help="prod, stage, or dev")
@pytest.fixture(scope="session")
def browser(request):
return request.config.getoption("--browser")
@pytest.fixture(scope="session")
def osType(request):
return request.config.getoption("--osType")
@pytest.fixture(autouse=True)
def hostURL(request):
return request.config.getoption("--hostURL")
我想使用--hostURL标志传递诸如prod,stage或dev之类的值。
这是我的test_TheMainTest.py的外观->
import unitest
import pytest
class CheckStatusCodeTest(unittest.TestCase, LoginPage, CustomSeleniumDriver):
def test_CheckStatusCodeOfPages(self, hostURL):
self.login(hostURL)
当我使用pytest -q -s --hostURL prod运行上述测试时,出现以下错误->
TypeError: test_CheckStatusCodeOfCRPages() missing 1 required positional argument: 'hostURL'
答案 0 :(得分:2)
引用docs:
注意
unittest.TestCase
方法不能直接接收夹具参数,因为它们的实现可能会影响运行常规unittest.TestCase
测试套件的能力。
但是,您仍然可以使用自动使用的夹具将常规的夹具值传递给unittest
风格的测试:
class CheckStatusCodeTest(unittest.TestCase):
@pytest.fixture(autouse=True)
def _pass_fixture_value(self, hostURL):
self._hostURL = hostURL
def test_CheckStatusCodeOfPages(self):
assert self._hostURL
您还可以查看this answer of mine解决同一问题的更多示例。
另一种可能性是实现自动修改测试类的自动使用夹具。如果您有许多应该具有相同设置的测试类,这将很有用:
@pytest.fixture(scope="class")
def set_fixture_value_to_class(request, hostURL):
request.cls._hostURL = hostURL
@pytest.mark.usefixtures('set_fixture_value_to_class')
class CheckStatusCodeTest(unittest.TestCase):
def test_CheckStatusCodeOfPages(self):
assert self._hostURL
@pytest.mark.usefixtures('set_fixture_value_to_class')
class AnotherTest(unittest.TestCase):
def test_spam(self):
assert self._hostURL
在这种情况下,无需将相同的灯具复制到每个测试类。只需标记所有相关的测试类别,您就可以开始学习了。