Selenium 从 nose 切换到 pytest

Selenium swtiching from nose to pytest

我正在考虑从我们当前的测试框架 nose w/ nose-testconfig 切换到 py.test。关于如何使用 pytest fixtures

具体 setup/teardown 覆盖以下代码的任何建议
class BaseTestCase(unittest.TestCase, Navigation):
@classmethod
def setUpClass(cls):
    browser = Browser.getDriver((config['browser']).lower())

    cls.driver = EventFiringWebDriver(browser, MyListener())
    cls.driver.implicitly_wait(10)
    cls.driver.maximize_window()

    try:
        cls.driver.get(config['url'])
    except KeyError:
        cls.driver.get(DEV_ENV_URL)

def run(self, result=None):
    super(BaseTestCase, self).run(MyTestResult(result, self))


@classmethod
def tearDownClass(cls):
    cls.driver.quit()

我希望能够传递命令行参数,即 url、浏览器、调试等。

首先,查看 py.test 文档。

其次,假设您想要使用固定装置而不是 setUp/tearDown,您需要做的事情很少: 在测试用例所在的位置创建一个新文件 conftest.py。如果你把它放在别的地方 py.test 将找不到它。

def pytest_addoption(parser):
    parser.addoption("--browser", action="store", default="chrome", help="Type in browser type")
    parser.addoption("--url", action="store", default=DEV_ENV_URL, help="url")

@pytest.fixture(scope='class', autouse=True)
def driver(request):
    browser_name = request.config.getoption("--browser")
    url = request.config.getoption("--url")    
    driver = Browser(browser_name).getDriver() #
    driver.get(url) 
    yield driver  # Write your setUp before 'yield'
    driver.quit() # Write tearDown after 'yield'

这将使您的所有测试都使用此夹具。但是还有另一个问题,我可以看到您的测试继承自此 BaseTestCase,因此如果您不遵循 py.test 支持的命名约定,它将找不到您的测试(请阅读相关文档)。

虽然 pytest 还有很多。正如我在文档中所说的一切。