如何在unittest框架中复用单个浏览器进程执行多个测试方法?
如何在unittest + Selenium中复用同一个浏览器进程
这是个很常见的问题——unittest的setUp()方法默认会在每个测试方法执行前都运行一次,所以你的两个测试方法会各自触发一次浏览器实例化,导致打开多个浏览器窗口。要实现多个测试方法复用同一个浏览器,咱们需要用类级别的初始化/清理方法来替代方法级别的setUp()和tearDown()。
解决方案:使用setUpClass()和tearDownClass()
unittest提供了setUpClass()和tearDownClass()方法,这两个方法只会在测试类的所有测试方法执行前/后各运行一次,正好满足咱们复用浏览器的需求。
修改后的代码示例:
import unittest from selenium import webdriver class Regression(unittest.TestCase): # 类级别的初始化方法,只执行一次 @classmethod def setUpClass(cls): cls.driver = webdriver.Chrome(executable_path=r'C:\chromedriver\chromedriver.exe') cls.driver.maximize_window() cls.driver.implicitly_wait(10) def test_open_google(self): self.driver.get("https://www.google.com/") # 可添加断言验证操作结果 self.assertEqual(self.driver.title, "Google") def test_open_github(self): self.driver.get("https://github.com/") self.assertEqual(self.driver.title, "GitHub: Let’s build from here · GitHub") # 类级别的清理方法,只执行一次 @classmethod def tearDownClass(cls): cls.driver.quit() if __name__ == '__main__': unittest.main()
关键细节说明
- 必须用
@classmethod装饰器标记这两个方法,因为它们是针对测试类而非单个测试实例的。 - 把
driver定义为类属性(cls.driver),这样所有测试方法都能通过self.driver访问到同一个实例。 - 清理时用
tearDownClass()里的driver.quit(),确保所有测试完成后只关闭一次浏览器。
注意事项
复用浏览器虽然节省资源,但要注意测试方法之间的状态污染:比如前一个测试方法打开了某个页面、留下了操作痕迹,后一个测试方法可能需要先回到初始状态(比如调用self.driver.get("about:blank")或者清除cookie),避免测试结果互相干扰。
内容的提问来源于stack exchange,提问作者Robert
相关产品推荐
相关产品推荐

