如何用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自动安装对应驱动:
- 安装依赖:
pip install webdriver-manager - 修改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插件实现测试并行执行,大幅缩短总测试时间:
- 安装插件:
pip install pytest-xdist - 运行测试时添加并行参数:
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
相关产品推荐
相关产品推荐

