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

如何用Selenium同时测试多浏览器并精简Django测试代码?

多浏览器并行测试Django后台并精简代码方案

1. 用Pytest Fixture封装浏览器逻辑(消除重复代码)

创建conftest.py文件(Pytest会自动加载该文件中的Fixture),将浏览器初始化/销毁逻辑统一封装,通过参数化实现多浏览器支持:

import pytest
from selenium import webdriver
from selenium.webdriver.chrome.options import Options as ChromeOptions
from selenium.webdriver.edge.options import Options as EdgeOptions
from selenium.webdriver.firefox.options import Options as FirefoxOptions

# 参数化指定要测试的浏览器
@pytest.fixture(params=["chrome", "edge", "firefox"])
def browser(request):
    browser_name = request.param
    driver = None
    # 无头模式(可选,关闭可视化界面提升测试速度)
    common_options = ["--headless", "--disable-gpu"]

    if browser_name == "chrome":
        options = ChromeOptions()
        for opt in common_options:
            options.add_argument(opt)
        driver = webdriver.Chrome(options=options)
    elif browser_name == "edge":
        options = EdgeOptions()
        for opt in common_options:
            options.add_argument(opt)
        driver = webdriver.Edge(options=options)
    elif browser_name == "firefox":
        options = FirefoxOptions()
        for opt in common_options:
            options.add_argument(opt)
        driver = webdriver.Firefox(options=options)

    yield driver
    # 测试结束后自动关闭浏览器
    driver.quit()

如果不想手动管理浏览器驱动,可使用webdriver-manager自动安装对应驱动:

  1. 安装依赖:pip install webdriver-manager
  2. 修改Fixture中的驱动初始化代码,以Chrome为例:
from webdriver_manager.chrome import ChromeDriverManager
from selenium.webdriver.chrome.service import Service as ChromeService

# 替换原来的driver初始化行
driver = webdriver.Chrome(service=ChromeService(ChromeDriverManager().install()), options=options)

2. 复用测试用例逻辑

在test_1.py中直接调用封装好的browser Fixture,无需重复编写浏览器初始化代码:

from django.urls import reverse

def test_admin_login(browser, live_server):
    # 访问Django后台登录页
    browser.get(f"{live_server.url}{reverse('admin:index')}")
    
    # 验证登录页标题
    assert "Log in | Django site admin" in browser.title
    
    # 执行登录操作(替换为你的管理员账号)
    username_input = browser.find_element("id", "id_username")
    password_input = browser.find_element("id", "id_password")
    submit_btn = browser.find_element("css selector", "input[type='submit']")
    
    username_input.send_keys("admin")
    password_input.send_keys("your_admin_password")
    submit_btn.click()
    
    # 验证登录成功
    assert "Site administration | Django site admin" in browser.title

3. 实现多浏览器并行测试

通过pytest-xdist插件实现测试并行执行,大幅缩短总测试时间:

  1. 安装插件:pip install pytest-xdist
  2. 运行测试时添加并行参数:
pytest -n auto

-n auto会自动根据CPU核心数分配进程,同时运行不同浏览器的测试用例。

也可以将常用参数写入pytest.ini,避免每次手动输入:

[pytest]
DJANGO_SETTINGS_MODULE = your_project.settings
addopts = --reuse-db -n auto

内容的提问来源于stack exchange,提问作者Super Kai - Kazuya Ito

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.07.11 09:42:32