我正在解决我使用Selenium和Python 3.5的问题。我正在尝试将unittest框架实现到我的自动化中,但每当我创建测试套件时,测试会在实际执行测试用例之前打开多个浏览器窗口。
通过淘汰过程,我将其归结为这部分代码:
def primary():
primary = unittest.TestSuite()
primary.addTest(unittest.makeSuite(PrimaryMethods, 'setUp'))
primary.addTest(unittest.makeSuite(PrimaryMethods, 'test_ModuleLoop_header'))
primary.addTest(unittest.makeSuite(PrimaryMethods, 'test_ModuleLoop_nonheader'))
primary.addTest(unittest.makeSuite(PrimaryMethods, 'tearDown'))
return primary
if __name__ == '__main__':
TEST_RUNNER = unittest.TextTestRunner()
TEST_SUITE = primary()
TEST_RUNNER.run(primary)
当我删除创建测试套件的部分并在if语句中使用unittest.main()时,只需一个浏览器窗口即可正常运行。但是,我知道随着我的测试用例变得越来越复杂,我想开始使用测试套件。有没有人知道在进入测试用例之前,setUp会自动运行4次?
这是我的setUp和tearDown部分:
def setUp(self):
driver = webdriver.Firefox
init () #for colorama
def tearDown(self):
driver = webdriver.Firefox
driver.close()
driver.quit()
我拿出了正在运行的代码并将其修改回包含def primary()和TEST_RUNNER.run(主要)代码。我从setUp部分删除了init()调用,这样除了加载浏览器之外,setUp中没有任何内容。当我在整个脚本中放置断点时,这就是我看到的行为:
答案 0 :(得分:0)
我想我找到了解决方案。我删除了def primary()中的行,其中setUp和tearDown被添加到测试套件中,现在无需重复打开浏览器即可运行。我猜它试图将setUp和tearDown作为自己的测试用例运行,但仍然在testuite中调用setUp和tearDown。
我还修改了测试套件创建代码,以更好地适应Python文档的建议。根据我看到的文档,在跨测试用例类收集测试用例时,应该使用Makesuite。显然它仍会运行而不会出现任何错误。
所有这些让我想到了这个:
def primary():
primary = unittest.TestSuite()
primary.addTest(PrimaryMethods('test_ModuleLoop_header'))
primary.addTest(PrimaryMethods ('test_ModuleLoop_nonheader'))
return primary