Python:打开多个浏览器窗口的单元测试

2024-09-25 00:25:28 发布

您现在位置:Python中文网/ 问答频道 /正文

我正在解决使用Selenium和Python3.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)

当我删除创建测试套件的部分并使用unittest.main()在if语句中,它只需一个浏览器窗口就可以正常运行。但是,我知道随着我的测试用例变得越来越复杂,我将开始使用测试套件。有没有人知道,在进入测试用例之前,有什么能让安装程序自己运行4次?在

以下是我的设置和拆卸部分:

^{pr2}$

我取出正在工作的代码,并将其修改回包含def primary()和测试_跑步者。跑步(主要)代码。我从setUp部分删除了init()调用,这样安装程序中除了加载浏览器之外没有其他内容。当我在整个脚本中放置断点时,我看到的行为是:

  1. 启动时立即调用def setUp(self)
  2. def设置(self)再次调用
  3. 如果名称='main'和def primary()被调用
  4. 驱动程序=网络驱动程序Firefox被称为
  5. 第一个浏览器打开
  6. 驱动程序=网络驱动程序Firefox被称为第二次。两个测试用例和tearDown没有被触及。在
  7. 第二个浏览器打开
  8. 撕裂(自我)被称为。在
  9. 第二个浏览器关闭
  10. 驱动程序=网络驱动程序Firefox被称为第三次。在
  11. 第三个浏览器打开
  12. 撕裂(自我)被称为
  13. 第三个浏览器关闭
  14. 驱动程序=网络驱动程序Firefox被称为第四次。在
  15. 第一个测试用例终于开始了

Tags: 代码网络套件maindefsetup驱动程序浏览器
1条回答
网友
1楼 · 发布于 2024-09-25 00:25:28

我想我已经找到了解决办法。我删除了def primary()中的行,其中setUp和tearDown被添加到测试套件中,现在它在不重复打开浏览器的情况下运行。我猜它是在尝试运行setUp和tearDown作为它们自己的测试用例,但是仍然在testsuite中调用setUp和tearDown。在

我还修改了测试套件创建代码,以更好地适应Python文档的建议。根据我看到的文档,在跨测试用例类收集测试用例时应该使用Makesuite。显然,它仍然会运行而不会出现任何错误。在

所有这些都留给我的是:

def primary():
    primary = unittest.TestSuite()
    primary.addTest(PrimaryMethods('test_ModuleLoop_header'))
    primary.addTest(PrimaryMethods ('test_ModuleLoop_nonheader'))
    return primary

相关问题 更多 >