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

Python Selenium实现TestNG式多浏览器参数化测试方案咨询

Python Selenium实现多浏览器参数化执行(对标TestNG逻辑)

需求:在Python Selenium环境下,实现类似TestNG的多浏览器参数化执行——单次运行中自动在Chrome、Edge、Firefox等不同浏览器上执行测试用例。以下先附上TestNG的原实现作为参考,再给出Python侧的可行方案。


一、TestNG原实现参考

1. TestNG测试套件配置文件

<!DOCTYPE suite SYSTEM "http://testng.org/testng-1.0.dtd">
<suite name="Test Suite">
 <test name = "chrome">
      <parameter name = "browserType" value="chrome" />
      <classes>
         <class name = "runners.RunnerTest"/>
      </classes>    
    </test>
 <test name = "edge">
      <parameter name = "browserType" value="edge" />
      <classes>
         <class name = "runners.RunnerTest"/>
      </classes>    
    </test>
<test name = "firefox">
      <parameter name = "browserType" value="firefox" />
      <classes>
         <class name = "runners.RunnerTest"/>
      </classes>    
    </test>
</suite>

2. RunnerTest类代码

public class RunnerTest extends AbstractTestNGCucumberTests  {
        public final static ThreadLocal<String> BROWSER = new ThreadLocal<>();
        @Parameters("browserType")
        @BeforeClass
        public void beforeClass(@Optional String browser) {
            ConfigLoader.initializePropertyfile();
            RunnerTest.BROWSER.set(browser);
        }
}

二、Python Selenium的实现方案

Python生态中常用pytest作为测试框架,结合pytest-xdist实现并行多浏览器测试,以下是两种最实用的方案:

方案1:pytest参数化+并行执行(推荐)

利用pytest的参数化特性,配合pytest-xdist实现多浏览器并行测试,无需额外编写复杂的执行脚本。

步骤1:安装依赖

pip install pytest pytest-xdist selenium webdriver-manager

步骤2:编写夹具(conftest.py)

创建conftest.py文件,定义浏览器驱动的参数化夹具:

import pytest
from selenium import webdriver
from selenium.webdriver.chrome.service import Service as ChromeService
from selenium.webdriver.edge.service import Service as EdgeService
from selenium.webdriver.firefox.service import Service as FirefoxService
from webdriver_manager.chrome import ChromeDriverManager
from webdriver_manager.firefox import GeckoDriverManager
from webdriver_manager.microsoft import EdgeChromiumDriverManager

@pytest.fixture(params=["chrome", "edge", "firefox"], scope="function")
def driver(request):
    # 根据参数选择对应浏览器驱动
    browser = request.param
    if browser == "chrome":
        driver = webdriver.Chrome(service=ChromeService(ChromeDriverManager().install()))
    elif browser == "edge":
        driver = webdriver.Edge(service=EdgeService(EdgeChromiumDriverManager().install()))
    elif browser == "firefox":
        driver = webdriver.Firefox(service=FirefoxService(GeckoDriverManager().install()))
    else:
        raise ValueError(f"不支持的浏览器类型: {browser}")
    
    driver.maximize_window()
    yield driver
    # 测试结束后关闭浏览器
    driver.quit()

步骤3:编写测试用例

创建测试文件test_example.py:

def test_page_title(driver):
    driver.get("https://www.example.com")
    # 验证页面标题
    assert driver.title == "Example Domain", "页面标题不符合预期"

步骤4:运行测试

执行以下命令,-n auto会自动根据CPU核心数并行执行多浏览器测试:

pytest -n auto

方案2:配置文件+自定义执行脚本

如果需要更灵活的执行逻辑(比如指定部分浏览器、添加前置操作),可以用配置文件定义浏览器列表,再编写Python脚本循环执行测试。

步骤1:创建配置文件(browser_suite.yaml)

browsers:
  - chrome
  - edge
  - firefox

步骤2:编写执行脚本

创建run_tests.py:

import yaml
from selenium import webdriver
from webdriver_manager.chrome import ChromeDriverManager
from webdriver_manager.firefox import GeckoDriverManager
from webdriver_manager.microsoft import EdgeChromiumDriverManager

def execute_test(browser):
    """执行单浏览器测试"""
    try:
        # 初始化驱动
        if browser == "chrome":
            driver = webdriver.Chrome(ChromeDriverManager().install())
        elif browser == "edge":
            driver = webdriver.Edge(EdgeChromiumDriverManager().install())
        elif browser == "firefox":
            driver = webdriver.Firefox(GeckoDriverManager().install())
        else:
            print(f"⚠️ 不支持的浏览器类型: {browser}")
            return
        
        driver.maximize_window()
        driver.get("https://www.example.com")
        assert driver.title == "Example Domain"
        print(f"✅ {browser} 测试通过")
    except Exception as e:
        print(f"❌ {browser} 测试失败: {str(e)}")
    finally:
        if 'driver' in locals():
            driver.quit()

if __name__ == "__main__":
    # 读取配置文件中的浏览器列表
    with open("browser_suite.yaml", "r", encoding="utf-8") as f:
        config = yaml.safe_load(f)
    
    # 逐个执行浏览器测试
    for browser in config["browsers"]:
        execute_test(browser)

步骤3:运行脚本

python run_tests.py

内容的提问来源于stack exchange,提问作者Automation Engr

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.07.18 05:35:06