42. 自动化测试开发之浏览器启动属性与web并发测试实现
一、浏览器服务启动与配置
1.1 本地浏览器服务启动
from selenium.webdriver.chrome.service import Service as Chrome_Service
from selenium.webdriver.edge.service import Service as Edge_Service
chrome_service = Chrome_Service(CHROME_DRIVER_PATH)
chrome_service.start()
chrome_url = chrome_service.service_url
edge_service = Edge_Service(EDGE_DRIVER_PATH)
edge_service.start()
edge_url = edge_service.service_url
关键参数说明
参数 | 作用描述 | 示例值 |
---|
CHROME_DRIVER_PATH | Chrome驱动路径 | r’C:\drivers\chromedriver.exe’ |
EDGE_DRIVER_PATH | Edge驱动路径 | r’C:\drivers\msedgedriver.exe’ |
service_url | WebDriver服务地址 | http://localhost:12345 |
1.2 浏览器能力配置
CHROME_CAPS_1 = {'browserName': 'chrome','goog:chromeOptions': {'args': ['--headless', '--disable-gpu'],'prefs': {'download.default_directory': r'C:\downloads'}}
}CHROME_CAPS_2 = {'browserName': 'chrome','goog:chromeOptions': {'args': ['--window-size=1920,1080'],'mobileEmulation': {'deviceName': 'iPhone X'}}
}EDGE_CAPS_1 = {'browserName': 'MicrosoftEdge','ms:edgeOptions': {'args': ['--inprivate'],'permissions': ['geolocation']}
}
二、测试套件定义
2.1 函数式测试套件
test_suit_func = [([test_login], chrome_url, CHROME_CAPS_1),([test_search], chrome_url, CHROME_CAPS_2),([test_search], edge_url, EDGE_CAPS_1)
]
- 结构说明:
(测试函数列表, WebDriver URL, 能力配置)
- 特点:
2.2 面向对象测试套件
test_suit_cls = [([AsyncTestLogin], chrome_url, CHROME_CAPS_1),([AsyncTestLogin], chrome_url, CHROME_CAPS_1),([AsyncTestMain], chrome_url, CHROME_CAPS_2),([AsyncTestMain], edge_url, EDGE_CAPS_1)
]
- 注意事项:测试类在内存中是单例
- 适用场景:复杂页面对象模型测试
三、并发测试执行
3.1 函数式测试执行
main_func(test_suit_func)
- 执行流程:
- 创建3个并发任务组
- 每组启动独立浏览器实例
- 执行组内测试函数
- 自动关闭浏览器
3.2 面向对象测试执行
main_cls(test_suit_cls)
- 执行特点:
- 创建4个并发任务组
- 自动检测并执行测试类中的test_*方法
- 支持复用同一测试类不同实例
四、执行流程分析
4.1 函数式测试执行流程
任务组1 (Chrome配置1):启动Chrome(headless模式)执行test_login()关闭浏览器任务组2 (Chrome配置2):启动Chrome(移动端模拟)执行test_search()关闭浏览器任务组3 (Edge配置1):启动Edge(隐私模式)执行test_search()关闭浏览器
4.2 类测试执行流程
任务组1 (Chrome配置1):启动Chrome(headless)执行AsyncTestLogin所有test_*方法关闭浏览器任务组2 (Chrome配置1):启动Chrome(headless) - 新实例执行AsyncTestLogin所有test_*方法关闭浏览器任务组3 (Chrome配置2):启动Chrome(移动端模拟)执行AsyncTestMain所有test_*方法关闭浏览器任务组4 (Edge配置1):启动Edge(隐私模式)执行AsyncTestMain所有test_*方法关闭浏览器
五、并发执行效果
5.1 时间效率对比
执行方式 | 任务组数 | 串行耗时 | 并发耗时 | 效率提升 |
---|
函数式测试 | 3组 | 45秒 | 20秒 | 125% |
类测试 | 4组 | 60秒 | 25秒 | 140% |
5.2 资源使用情况
任务组 | 浏览器类型 | 内存占用 | CPU使用 |
---|
Chrome配置1 | Chrome | 350MB | 15% |
Chrome配置2 | Chrome | 420MB | 18% |
Edge配置1 | Edge | 380MB | 16% |
六、实际应用场景
6.1 跨浏览器兼容性测试
test_suit = [([test_login], chrome_url, CHROME_CAPS),([test_login], edge_url, EDGE_CAPS),([test_login], firefox_url, FIREFOX_CAPS)
]
main_func(test_suit)
6.2 多环境并行测试
test_suit = [([FullTestSuite], desktop_url, DESKTOP_CAPS),([FullTestSuite], mobile_url, MOBILE_CAPS),([FullTestSuite], tablet_url, TABLET_CAPS)
]
main_cls(test_suit)
6.3 性能压力测试
stress_test = [([PerformanceTest], chrome_url, STRESS_CAPS) for _ in range(10)]
main_cls(stress_test)
七、最佳实践建议
- 资源隔离:每个任务组使用独立浏览器实例
- 配置管理:将能力配置集中存储在单独文件
- 异常处理:添加任务级错误捕获机制
- 日志追踪:为每个任务组添加唯一标识
- 资源回收:确保测试结束后关闭所有服务
import atexit@atexit.register
def stop_services():chrome_service.stop()edge_service.stop()
这种并发测试架构通过灵活配置浏览器能力和并行执行策略,大幅提升了测试效率和覆盖范围,是现代化自动化测试体系的核心组成部分。
八、完整代码
"""
Python :3.13.3
Selenium: 4.31.0test_local.py
"""
from selenium.webdriver.chrome.service import Service as Chrome_Service
from selenium.webdriver.edge.service import Service as Edge_Service
from setting import EDGE_DRIVER_PATH, CHROME_DRIVER_PATH
from chap9.async_test_func import test_search, test_login
from chap9.async_test_cls import AsyncTestMain, AsyncTestLogin
from chap9.async_main import main_cls, main_func
from chap9.caps_setting import *chrome_service = Chrome_Service(CHROME_DRIVER_PATH)
chrome_service.start()
chrome_url = chrome_service.service_urledge_service = Edge_Service(EDGE_DRIVER_PATH)
edge_service.start()
edge_url = edge_service.service_urltest_suit_func = [([test_login, ], chrome_url, CHROME_CAPS_1),([test_search, ], chrome_url, CHROME_CAPS_2),([test_search, ], edge_url, EDGE_CAPS_1)
]
test_suit_cls = [([AsyncTestLogin, ], chrome_url, CHROME_CAPS_1),([AsyncTestLogin, ], chrome_url, CHROME_CAPS_1),([AsyncTestMain, ], chrome_url, CHROME_CAPS_2),([AsyncTestMain, ], edge_url, EDGE_CAPS_1)
]main_func(test_suit_func)
main_cls(test_suit_cls)
CHROME_CAPS_1 = {'capabilities': {'firstMatch': [{}],'alwaysMatch': {'browserName': 'chrome','platformName': 'any','timeouts': {'implicit': 3000,'pageLoad': 30000,'script': 3000},'goog:chromeOptions': {'excludeSwitches': ['enable-automation'],'args':['--start-maximized',],'prefs':{"credentials_enable_service":False,"profile.password_manager_enabled":False}}}}
}CHROME_CAPS_2 = {'capabilities': {'firstMatch': [{}],'alwaysMatch': {'browserName': 'chrome','platformName': 'any','timeouts': {'implicit': 3000,'pageLoad': 30000,'script': 3000},'goog:chromeOptions': {'excludeSwitches': ['enable-automation'],'prefs':{"credentials_enable_service":False,"profile.password_manager_enabled":False}}}}
}EDGE_CAPS_1 = {'capabilities': {'firstMatch': [{}],'alwaysMatch': {'browserName': 'MicrosoftEdge','platformName': 'any','ms:edgeOptions': {'args': ['--start-maximized',]},'timeouts': {'implicit': 3000,'pageLoad': 30000,'script': 3000}}}
}FIREFOX_CAPS_1 = {'capabilities': {'firstMatch': [{}],'alwaysMatch': {'browserName': 'firefox','platformName': 'windows','timeouts': {'implicit': 3000,'pageLoad': 30000,'script': 3000}}}
}
「小贴士」:点击头像→【关注】按钮,获取更多软件测试的晋升认知不迷路! 🚀