如何通过subprocess运行多TestCase测试套件,避免重复输入Browser?
解决方案:批量执行测试用例时统一指定浏览器
针对每个测试用例需要手动输入浏览器导致无法顺畅执行测试套件的问题,提供三种实用解决方案:
方案1:通过命令行参数传递浏览器选择
让测试用例从命令行参数读取浏览器类型,测试套件统一传递该参数,避免重复输入。
修改测试用例(以MyTC.py为例)
import unittest import sys from selenium import webdriver from selenium.webdriver.firefox.service import FirefoxService from webdriver_manager.firefox import GeckoDriverManager import time vr_TC_01_WebPage = "你的测试页面URL" class TC_01_Check_Get_OPOS_Version(unittest.TestCase): @classmethod def setUpClass(cls): # 从命令行获取浏览器,默认用Chrome cls.vr_Selected_Browser = sys.argv[1] if len(sys.argv) > 1 else "Chrome" # 初始化浏览器驱动 if cls.vr_Selected_Browser == "Chrome": cls.Driver = webdriver.Chrome() elif cls.vr_Selected_Browser == "Firefox": cls.Driver = webdriver.Firefox(service=FirefoxService(executable_path=GeckoDriverManager().install())) # 打开测试页面 cls.Driver.get(vr_TC_01_WebPage) time.sleep(3) cls.Driver.maximize_window() def test_1(self): # 你的测试逻辑代码 pass @classmethod def tearDownClass(cls): time.sleep(10) cls.Driver.quit() if __name__ == "__main__": # 移除unittest默认处理的额外参数,避免冲突 sys.argv = sys.argv[:1] + sys.argv[2:] unittest.main()
修改测试套件(MyTestSuite.py)
import subprocess # 统一指定要使用的浏览器 target_browser = "Chrome" # 逐个调用测试用例并传递浏览器参数 subprocess.run(["python", "MyTC1.py", target_browser], shell=False) subprocess.run(["python", "MyTC2.py", target_browser], shell=False) subprocess.run(["python", "MyTC3.py", target_browser], shell=False) subprocess.run(["python", "MyTC4.py", target_browser], shell=False)
方案2:使用配置文件统一管理浏览器选择
创建配置文件存储浏览器选择,所有测试用例读取该配置,无需修改命令行。
创建配置文件(config.ini)
[Browser] selected = Chrome
修改测试用例(以MyTC.py为例)
import unittest import configparser from selenium import webdriver from selenium.webdriver.firefox.service import FirefoxService from webdriver_manager.firefox import GeckoDriverManager import time vr_TC_01_WebPage = "你的测试页面URL" class TC_01_Check_Get_OPOS_Version(unittest.TestCase): @classmethod def setUpClass(cls): # 读取配置文件中的浏览器选择 config = configparser.ConfigParser() config.read("config.ini") cls.vr_Selected_Browser = config.get("Browser", "selected") # 初始化浏览器驱动 if cls.vr_Selected_Browser == "Chrome": cls.Driver = webdriver.Chrome() elif cls.vr_Selected_Browser == "Firefox": cls.Driver = webdriver.Firefox(service=FirefoxService(executable_path=GeckoDriverManager().install())) # 打开测试页面 cls.Driver.get(vr_TC_01_WebPage) time.sleep(3) cls.Driver.maximize_window() def test_1(self): # 你的测试逻辑代码 pass @classmethod def tearDownClass(cls): time.sleep(10) cls.Driver.quit()
测试套件无需修改
原MyTestSuite.py代码可直接运行,所有测试用例会自动读取config.ini中的浏览器配置。
方案3:合并测试用例为统一套件(推荐)
使用unittest的TestLoader加载所有测试用例,全局初始化一次浏览器,既避免重复输入,又提升执行效率。
修改测试用例(以MyTC1.py为例)
移除原有的setUpClass和tearDownClass,改用全局驱动:
import unittest import time vr_TC_01_WebPage = "你的测试页面URL" class TC_01_Check_Get_OPOS_Version(unittest.TestCase): def setUp(self): # 使用全局驱动 self.Driver = Driver self.Driver.get(vr_TC_01_WebPage) time.sleep(3) def test_1(self): # 你的测试逻辑代码 pass
新的测试套件(MyTestSuite.py)
import unittest import sys from selenium import webdriver from selenium.webdriver.firefox.service import FirefoxService from webdriver_manager.firefox import GeckoDriverManager import time # 导入所有测试用例类 from MyTC1 import TC_01_Check_Get_OPOS_Version from MyTC2 import TC_02_XXX from MyTC3 import TC_03_XXX from MyTC4 import TC_04_XXX # 全局浏览器驱动对象 Driver = None # 从命令行获取浏览器,默认Chrome vr_Selected_Browser = sys.argv[1] if len(sys.argv) > 1 else "Chrome" def setUpModule(): """全局初始化:启动一次浏览器""" global Driver if vr_Selected_Browser == "Chrome": Driver = webdriver.Chrome() elif vr_Selected_Browser == "Firefox": Driver = webdriver.Firefox(service=FirefoxService(executable_path=GeckoDriverManager().install())) Driver.maximize_window() def tearDownModule(): """全局清理:关闭浏览器""" global Driver time.sleep(10) Driver.quit() if __name__ == "__main__": # 构建测试套件 test_suite = unittest.TestSuite() test_suite.addTest(unittest.makeSuite(TC_01_Check_Get_OPOS_Version)) test_suite.addTest(unittest.makeSuite(TC_02_XXX)) test_suite.addTest(unittest.makeSuite(TC_03_XXX)) test_suite.addTest(unittest.makeSuite(TC_04_XXX)) # 运行测试 runner = unittest.TextTestRunner(verbosity=2) runner.run(test_suite)
运行时只需执行python MyTestSuite.py Chrome(或Firefox),整个套件仅启动一次浏览器,所有用例共用该驱动。
内容的提问来源于stack exchange,提问作者Sumi
相关产品推荐
相关产品推荐

