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

如何通过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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.07.04 01:25:07