需要在不同的浏览器中连续运行测试(例如,首先在firefox中,然后在chrome中进行相同的测试..)。解决这个问题的最佳方法是什么?
我试图把循环放在setUpClass中,但它确实没有帮助:
class UITest(LiveServerTestCase):
fixtures = ['initial_test_data.json']
@classmethod
def setUpClass(self):
for browser in [webdriver.Firefox(), webdriver.PhantomJS(), webdriver.Chrome()]:
self.selenium = browser
super(UITest, self).setUpClass()
答案 0 :(得分:3)
为此,我使用简单的装饰器,它通过指定的Web驱动程序运行测试:
import functools
def run_through_drivers(driver_pool='drivers'):
def wrapped(test_func):
@functools.wraps(test_func)
def decorated(test_case, *args, **kwargs):
test_class = test_case.__class__
web_driver_pool = getattr(test_class, driver_pool)
for web_driver in web_driver_pool:
setattr(test_case, 'selenium', web_driver)
test_func(test_case, *args, **kwargs)
return decorated
return wrapped
使用方法:
class UITest(LiveServerTestCase):
fixtures = ['initial_test_data.json']
selenium = None
@classmethod
def setUpClass(self):
cls.drivers = WebDriverList(
webdriver.Chrome(),
webdriver.Firefox(),
webdriver.PhantomJS
)
super(UITest, cls).setUpClass()
@classmethod
def tearDownClass(cls):
for driver in cls.drivers:
driver.quit()
super(UITest, cls).tearDownClass()
@run_through_drivers()
def test_example(self):
...
答案 1 :(得分:1)
来自@Alex Lisovoy的上述解决方案似乎取自Evan Lewis解决方案,我发现该解决方案无效。
我能够使用nose_parameterized
模块一次测试两个浏览器。请参阅我的回答/示例this other SO question。