使用 pytest-xdist 进行高效并行自动化测试
pytest-xdist 是 pytest 的一个扩展插件主要用于实现测试用例的并行执行和分布式测试。通过利用多进程或者多机分布式的方式pytest-xdist 能够显著缩短测试执行时间提升持续集成CI流程的效率。在自动化测试中当测试用例数量庞大时单进程顺序执行的速度往往难以满足需求。pytest-xdist是基于 pytest 的一个插件在单台机器上利用多进程并行运行测试充分利用多核 CPU 的优势实现分布式测试在多台机器上同时执行测试结合负载均衡策略按用例、文件或模块分配任务提高并行执行的效率支持自动失败重试、覆盖率统计等功能利用多进程并行或分布式执行测试用例这不仅能显著缩短测试运行时间还能提升 CI/CD 流程的效率。安装与基本使用安装通过 pip 安装 pytest-xdist 非常简单pip install pytest-xdist安装后可以通过pytest -h查看新增的命令行选项。基本命令最简单的并行运行命令是使用-n选项pytest -n 4这里4表示使用 4 个进程并行运行测试如果希望自动检测系统的 CPU 核心数并充分利用所有资源可以使用pytest -n auto简单示例下面是一个简单的示例如何结合 pytest-xdist 进行并行测试示例文件test_sample.pyimport timedef test_one():time.sleep(1)assert Truedef test_two():time.sleep(1)assert Truedef test_three():time.sleep(1)assert Truedef test_four():time.sleep(1)assert True运行以下命令来并行执行上述 4 个测试用例pytest -n 4 test_sample.py此命令会将 4 个测试用例分配到 4 个进程中同时运行从而显著减少总体执行时间。负载均衡策略pytest-xdist 支持多种负载均衡策略通过--dist参数进行配置策略说明--distload按测试用例均衡分配默认策略。--distloadscope按测试模块分配确保同一模块内的用例在同一进程执行减少数据共享冲突。--distloadfile按文件级别分配测试适用于每个文件测试之间相互独立的场景。例如按模块进行负载均衡pytest -n 4 --distloadscope负载均衡策略可以根据项目的实际情况和测试用例的特点灵活选择load策略适合大多数测试用例都较为独立且执行时间均衡的情况通过精细地按用例分配能最大化利用多核 CPU 的优势。loadscope策略在模块内测试共享资源或有较重初始化开销时更有优势能够减少重复工作并控制状态影响范围loadfile策略则适用于需要文件级别隔离的情况保证每个测试文件内部的状态一致性同时避免重复加载资源。Selenium 并行 UI 自动化测试案例在自动化测试中Selenium 常用于 Web UI 测试而 pytest-xdist 则能通过多进程并行运行测试用例大幅缩短整体执行时间。将二者结合使用时需要注意以下几点独立 WebDriver 实例由于测试在不同进程中并行执行每个进程都必须创建自己的 WebDriver 实例不能共享同一个浏览器驱动。环境隔离确保各个进程中的测试环境如浏览器驱动、配置文件等互不干扰避免因资源竞争导致测试失败。示例文件test_multiple_search.pyimport pytestfrom selenium import webdriverfrom selenium.webdriver.common.by import Bydef create_driver():options webdriver.ChromeOptions()options.add_argument(--headless) # 使用无头模式options.add_argument(--disable-gpu)options.add_argument(--no-sandbox)options.add_argument(--window-size1920,1080)return webdriver.Chrome(optionsoptions)pytest.fixture(scopefunction)def driver():driver_instance create_driver()yield driver_instancedriver_instance.quit()def test_google_search(driver):# 测试 百度 搜索driver.get(https://www.baidu.com)search_box driver.find_element(By.ID, kw)search_box.send_keys(pytest-xdist)search_box.submit()driver.implicitly_wait(3)assert pytest-xdist in driver.page_sourcedef test_bing_search(driver):# 测试 Bing 搜索driver.get(https://www.bing.com)search_box driver.find_element(By.NAME, q)search_box.send_keys(pytest-xdist)search_box.submit()driver.implicitly_wait(3)assert pytest-xdist in driver.page_sourcedef test_duckduckgo_search(driver):# 测试 DuckDuckGo 搜索driver.get(https://www.duckduckgo.com)search_box driver.find_element(By.NAME, q)search_box.send_keys(pytest-xdist)search_box.submit()driver.implicitly_wait(3)assert pytest-xdist in driver.page_source使用 pytest-xdist 的-n参数启动并行执行例如pytest -n 3 test_multiple_search.py这将启动 3 个进程每个进程各自运行不同的测试用例从而加速整体测试执行。Appium 移动端测试案例在移动端自动化测试中Appium 是一个常用工具而 pytest-xdist 则可以将测试用例并行执行从而大幅缩短总的测试时间。下面以 Android 计算器应用为例展示如何利用 pytest-xdist 并行测试 App 的功能。示例文件test_calculator_app.py本示例中包含两个测试用例一个测试加法一个测试减法。每个测试用例通过 pytest fixture 独立创建一个 Appium WebDriver 实例确保并行运行时互不干扰。​​​​​​​import pytestfrom appium import webdriverfrom time import sleeppytest.fixture(scopefunction)def driver():# 配置 desired capabilities根据实际情况调整 deviceName、appPackage 和 appActivitydesired_caps {platformName: Android,deviceName: Android Emulator, # 或实际设备 IDappPackage: com.android.calculator2,appActivity: .Calculator,automationName: UiAutomator2}# 启动 Appium WebDriver 实例driver_instance webdriver.Remote(http://localhost:4723/wd/hub, desired_caps)yield driver_instancedriver_instance.quit()def test_addition(driver):测试计算器的加法功能计算 2 3 5注意元素 ID 依据具体设备和计算器应用版本可能有所不同请根据实际情况调整# 点击数字 2driver.find_element_by_id(com.android.calculator2:id/digit_2).click()# 点击加号driver.find_element_by_id(com.android.calculator2:id/op_add).click()# 点击数字 3driver.find_element_by_id(com.android.calculator2:id/digit_3).click()# 点击等号driver.find_element_by_id(com.android.calculator2:id/eq).click()# 等待页面更新结果sleep(2)# 获取结果文本此处 ID 根据具体 App 可能不同result driver.find_element_by_id(com.android.calculator2:id/formula).textassert result 5, f期望结果为 5但实际结果为 {result}def test_subtraction(driver):测试计算器的减法功能计算 7 - 2 5# 点击数字 7driver.find_element_by_id(com.android.calculator2:id/digit_7).click()# 点击减号driver.find_element_by_id(com.android.calculator2:id/op_sub).click()# 点击数字 2driver.find_element_by_id(com.android.calculator2:id/digit_2).click()# 点击等号driver.find_element_by_id(com.android.calculator2:id/eq).click()sleep(2)result driver.find_element_by_id(com.android.calculator2:id/formula).textassert result 5, f期望结果为 5但实际结果为 {result}使用 2 个进程并行执行测试pytest -n 2 test_calculator_app.py此命令会启动 2 个 worker 进程每个测试用例都在独立进程中运行确保每个进程都有独立的 Appium WebDriver 会话。使用时注意事项设备资源并行测试会同时占用多个设备或模拟器确保设备资源充足。如果使用同一设备可能会引起会话冲突建议配置多台设备或多个模拟器。desired capabilities如果需要同时在多台设备上执行测试请为每个设备配置不同的deviceName、udid并相应调整 Appium 服务端口。感谢每一个认真阅读我文章的人礼尚往来总是要有的虽然不是什么很值钱的东西如果你用得到的话可以直接拿走这些资料对于【软件测试】的朋友来说应该是最全面最完整的备战仓库这个仓库也陪伴上万个测试工程师们走过最艰难的路程希望也能帮助到你!有需要的小伙伴可以点击下方小卡片领取​​​​​​​

相关新闻

LED芯片AEC-Q102认证中的温度测试

LED芯片AEC-Q102认证中的温度测试

引言在汽车产业飞速发展的当下,汽车电子系统的重要性愈发凸显。LED芯片作为汽车照明、显示和传感器等核心系统的关键元器件,其可靠性与品质直接关系到车辆的行驶安全和整体性能表现。AEC - Q102认证是由汽车电子委员会(Automotive Electronic…

2026/7/9 13:32:56 阅读更多 →
公司抢着掏钱让考的 PMP,到底藏着多少门道?

公司抢着掏钱让考的 PMP,到底藏着多少门道?

最近发现个特别有意思的现象,身边不少公司都开始主动推员工考 PMP 了,不仅报销培训费、考试费,有的还直接组织集体学习、统一报名。很多同学只看到考下来能加薪、跳槽加分,却没琢磨明白:企业为啥愿意花时间、砸钱&…

2026/7/9 1:32:31 阅读更多 →
本地部署开源媒体中心软件 Kodi 并实现外部访问( Windows 版本)

本地部署开源媒体中心软件 Kodi 并实现外部访问( Windows 版本)

Kodi 是一款功能强大的开源媒体中心软件,它允许用户播放和管理来自本地存储或网络存储的视频、音乐、图片等多媒体文件,并支持大量的插件扩展其功能,可以在多种设备上运行,包括电脑、手机、平板以及电视盒子等。本文将详细介绍如何…

2026/7/9 4:23:09 阅读更多 →

最新新闻

大学四年不换机!5款学生游戏本推荐首选华硕天选7Pro与ROG,学习娱乐一步到位

大学四年不换机!5款学生游戏本推荐首选华硕天选7Pro与ROG,学习娱乐一步到位

一、选购背景与需求目标人群:即将入学的准大一新生,需一台能陪伴大学四年(学习、娱乐、携带、宿舍、假期回家)的笔记本电脑。核心需求:机身便携、重量轻、便于携带往返教室/宿舍/家。长续航,满足教室等无电…

2026/7/9 15:37:16 阅读更多 →
UE5网络开发:Server、Client、NetMulticast三种RPC核心区别与实战应用

UE5网络开发:Server、Client、NetMulticast三种RPC核心区别与实战应用

1. 项目概述:为什么你的RPC用起来总是不对劲?在UE5的网络游戏开发里,RPC(远程过程调用)是构建多人互动体验的基石。但很多开发者,尤其是刚接触网络同步的朋友,常常会陷入一个误区:看…

2026/7/9 15:35:16 阅读更多 →
Transformer vs 13种经典模型:7万条新闻文本多分类实战,MLP竟以95%准确率胜出

Transformer vs 13种经典模型:7万条新闻文本多分类实战,MLP竟以95%准确率胜出

Transformer与13种经典模型在新闻文本多分类任务中的全面对比:为何MLP能以95%准确率胜出? 在自然语言处理领域,文本分类一直是基础而重要的任务。随着深度学习技术的发展,从简单的MLP到复杂的Transformer,各类模型层出…

2026/7/9 15:35:16 阅读更多 →
数字PIR传感器与PIC32微控制器的智能人体检测方案

数字PIR传感器与PIC32微控制器的智能人体检测方案

1. 项目概述与核心器件选型 在智能安防和自动化控制领域,精确的存在感应和运动检测一直是关键技术需求。本项目采用TPIS1S1385红外热释电传感器与PIC32MX795F512L微控制器组合方案,实现了高灵敏度、低功耗的人体检测系统。 TPIS1S1385是一款数字输出型热…

2026/7/9 15:35:16 阅读更多 →
Apex英雄运行问题全面解决方案:从反作弊修复到性能优化

Apex英雄运行问题全面解决方案:从反作弊修复到性能优化

🚀 30款热门AI模型一站整合,DeepSeek/GLM/Qwen 随心用,限时 5 折。 👉 点击领海量免费额度 Apex英雄作为一款热门的战术竞技游戏,在7月更新后不少玩家遇到了进不去游戏、掉帧、启动错误、反作弊未运行等问题。这些问…

2026/7/9 15:31:14 阅读更多 →
L9958与TM4C1294KCPDT实现高精度电机驱动方案

L9958与TM4C1294KCPDT实现高精度电机驱动方案

1. 项目背景与核心组件解析在工业自动化、医疗设备和机器人控制等领域,高精度电机驱动一直是工程师面临的挑战。传统方案往往需要在控制精度、响应速度和系统复杂度之间做出妥协。而L9958电机驱动芯片与TM4C1294KCPDT微控制器的组合,为解决这一难题提供了…

2026/7/9 15:31:14 阅读更多 →

日新闻

3大音乐平台逐字歌词完整解决方案:ESLyric-LyricsSource完全指南

3大音乐平台逐字歌词完整解决方案:ESLyric-LyricsSource完全指南

3大音乐平台逐字歌词完整解决方案:ESLyric-LyricsSource完全指南 【免费下载链接】ESLyric-LyricsSource Advanced lyrics source for ESLyric in foobar2000 项目地址: https://gitcode.com/gh_mirrors/es/ESLyric-LyricsSource 还在为Foobar2000找不到高质…

2026/7/9 0:01:04 阅读更多 →
ElegantBook封面定制揭秘:3个步骤打造专业级学术书籍

ElegantBook封面定制揭秘:3个步骤打造专业级学术书籍

ElegantBook封面定制揭秘:3个步骤打造专业级学术书籍 【免费下载链接】ElegantBook Elegant LaTeX Template for Books 项目地址: https://gitcode.com/gh_mirrors/el/ElegantBook 你是否曾经为学术书籍的封面设计而烦恼?想要一个既专业又美观的封…

2026/7/9 0:03:06 阅读更多 →
如何高效使用pyodbc:企业级数据库连接终极指南

如何高效使用pyodbc:企业级数据库连接终极指南

如何高效使用pyodbc:企业级数据库连接终极指南 【免费下载链接】pyodbc Python ODBC bridge 项目地址: https://gitcode.com/gh_mirrors/py/pyodbc 在当今数据驱动的商业环境中,企业级数据库连接已成为现代应用开发的核心需求。pyodbc作为一款强大…

2026/7/9 0:07:11 阅读更多 →

周新闻

B站视频下载神器BiliTools:5分钟学会轻松保存任何B站内容

B站视频下载神器BiliTools:5分钟学会轻松保存任何B站内容

B站视频下载神器BiliTools:5分钟学会轻松保存任何B站内容 【免费下载链接】BiliTools A cross-platform bilibili toolbox. 跨平台哔哩哔哩工具箱,支持下载视频、番剧等等各类资源 项目地址: https://gitcode.com/GitHub_Trending/bilit/BiliTools …

2026/7/8 16:14:06 阅读更多 →
威胁模型全解析:从新手入门到实战应用,助你构建安全产品!

威胁模型全解析:从新手入门到实战应用,助你构建安全产品!

威胁模型的陌生现状在忙碌疲惫的一天里,参与了关于混合后量子密码学的讨论,应付端点攻击找茬的人,还参与留言板讨论后,发现“威胁模型”对多数人仍是陌生概念,且多被当作时髦用语。有趣的相关画作有一幅由 Embyr 创作的…

2026/7/9 13:46:46 阅读更多 →
渗透测试入门指南:从零基础到实战环境搭建

渗透测试入门指南:从零基础到实战环境搭建

1. 从“看热闹”到“入门”:我理解的渗透测试到底是什么?每次看到新闻里说某个大公司的数据被“黑”了,或者某个网站被攻击导致服务瘫痪,你是不是和我一样,心里会冒出两个念头:一是“这黑客真厉害”&#x…

2026/7/8 16:59:55 阅读更多 →

月新闻