You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

如何在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

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.05.26 10:50:03