以下代码不收集任何测试用例(我希望找到4个)。为什么呢?
import pytest
import uuid
from selenium import webdriver
from selenium.common.exceptions import TimeoutException
class TestClass:
def __init__(self):
self.browser = webdriver.Remote(
desired_capabilities=webdriver.DesiredCapabilities.FIREFOX,
command_executor='http://my-selenium:4444/wd/hub'
)
@pytest.mark.parametrize('data', [1,2,3,4])
def test_buybuttons(self, data):
self.browser.get('http://example.com/' + data)
assert '<noindex>' not in self.browser.page_source
def __del__(self):
self.browser.quit()
如果我删除__init__
和__del__
方法,它将正确收集测试。但我如何设置和撕裂测试? :/
答案 0 :(得分:3)
pytest
不会使用__init__
方法收集测试类,更详细地解释为什么可以在此处找到:py.test skips test class if constructor is defined。
您应该使用fixtures来定义设置和拆卸操作,因为它们更强大,更灵活。
如果您现有的测试已经有设置/拆卸方法,并希望将它们转换为pytest,这是一种简单的方法:
class TestClass:
@pytest.yield_fixture(autouse=True)
def init_browser(self):
self.browser = webdriver.Remote(
desired_capabilities=webdriver.DesiredCapabilities.FIREFOX,
command_executor='http://my-selenium:4444/wd/hub'
)
yield # everything after 'yield' is executed on tear-down
self.browser.quit()
@pytest.mark.parametrize('data', [1,2,3,4])
def test_buybuttons(self, data):
self.browser.get('http://example.com/' + data)
assert '<noindex>' not in self.browser.page_source
可在此处找到更多详细信息:autouse fixtures and accessing other fixtures