Python+Pytest-BDD UI&API自动化测试项目架构设计与落地实践
前言
为什么企业自动化必须用 Python+BDD 架构?
在桌面端客户端(PC桌面应用)规模化自动化测试场景中,传统单纯基于脚本录制、线性编码的自动化方案,普遍存在用例可读性差、业务与代码耦合严重、维护成本极高、测试人员与开发/产品协作低效等核心痛点。尤其是多页面、多地区差异化配置、多灰度版本、兼顾UI前端交互与后端API接口联动的商业化客户端产品,测试迭代节奏快、功能分支多、回归频次高,对自动化框架提出了极高要求。
而Python+pytest-BDD组合,是目前企业级桌面端、Web端、接口自动化公认的最优解之一。核心核心优势就是:业务语言写用例,Python代码做底层执行,测试全流程行为驱动、分层解耦、人人看得懂、迭代好维护。
本文基于我司真实落地自动化项目架构,详细拆解整套Python+pytest-BDD企业级自动化架构设计思路、目录分层逻辑、核心设计思想、适配场景及落地价值,为同类桌面客户端自动化项目架构搭建提供完整参考范本。
一、项目介绍

这套架构,核心做到了BDD自动化最关键的5大核心分层隔离原则:
- 业务用例与代码实现彻底隔离:非技术人员看懂用例,技术人员只管写底层执行代码;
- 页面元素与业务步骤彻底隔离:严格遵循PO页面对象设计模式,页面改了只改page层,不动测试用例和步骤;
- 通用工具与业务脚本彻底隔离:底层能力统一封装,业务脚本只调用不重复造轮子;
- UI自动化与API自动化目录隔离:双场景兼容,互不干扰,适配混合测试场景;
- 配置、日志、截图、报告、指标统计统一中心化管理:工程化标准,适配持续集成CI/CD流水线。
二、核心技术栈说明
1、核心主体框架:pytest-BDD
区别于开源老牌behave框架,项目选用pytest-BDD作为BDD行为驱动核心,也是企业项目首选方案。核心优势:完美兼容pytest生态、支持allure精美报告、支持参数化、标签分组、用例筛选、失败重跑、CI集成,同时保留BDD核心Given/When/Then自然语言用例写法。
2、编程语言与底层驱动:Python生态
基于Python作为核心编码语言,依托丰富第三方库,适配桌面端UI自动化、接口请求、系统注册表操作、进程管理、OCR文字识别、日志采集、指标埋点等全场景能力。
3、UI自动化驱动:桌面端专属适配
集成pywinauto、flaui等主流桌面UI自动化驱动,专门适配Windows桌面客户端APP的窗口识别、控件点击、弹窗操作、页面跳转等核心交互场景。
4、辅助能力全覆盖
内置日志管理、截图留存、报告生成、系统信息采集、注册表操作、进程管理、FTPS文件传输、HTTP接口请求、OCR图像识别、Metrics自动化指标统计全套配套工具,满足企业自动化全流程运维与统计需求。
三、项目目录架构设计逻辑
LenovoNow_Automation
├─ .agents
│ └─ skills
│ ├─ architecture-diagram
│ │ ├─ assets
│ │ │ └─ template.html
│ │ └─ SKILL.md
│ ├─ feature-file-generator
│ │ ├─ references
│ │ │ ├─ existing_steps.md
│ │ │ └─ naming_conventions.md
│ │ └─ SKILL.md
│ └─ skill-creator
│ ├─ agents
│ │ ├─ analyzer.md
│ │ ├─ comparator.md
│ │ └─ grader.md
│ ├─ assets
│ │ └─ eval_review.html
│ ├─ eval-viewer
│ │ ├─ generate_review.py
│ │ └─ viewer.html
│ ├─ LICENSE.txt
│ ├─ references
│ │ └─ schemas.md
│ ├─ scripts
│ │ ├─ aggregate_benchmark.py
│ │ ├─ generate_report.py
│ │ ├─ improve_description.py
│ │ ├─ package_skill.py
│ │ ├─ quick_validate.py
│ │ ├─ run_eval.py
│ │ ├─ run_loop.py
│ │ ├─ utils.py
│ │ └─ __init__.py
│ └─ SKILL.md
├─ .clinerules
│ └─ rules.md
├─ .env
├─ .feature_tags_cache.json
├─ conftest.py
├─ logs
├─ main.py
├─ projects
│ └─ APP
│ ├─ configs
│ │ ├─ temp
│ │ └─ Test.json
│ ├─ conftest.py
│ ├─ features
│ │ ├─ API
│ │ │ ├─ Discovery
│ │ │ │ └─ XX.feature
│ │ │ └─ Service
│ │ │ └─XX.feature
│ │ └─ UI
│ │ ├─ XX_Page
│ │ │ └─ XX.feature
│ ├─ pages
│ │ ├─ XX_page.py
│ │ └─ __init__.py
│ ├─ step_defs
│ │ ├─ conftest.py
│ │ ├─ test_fre_common_steps.py
│ │ ├─ test_ocr_common_steps.py
│ │ ├─ test_os_common_steps.py
│ │ ├─ UI
│ │ │ ├─ xx_Page
│ │ │ │ └─ test_xx_page_steps.py
│ │ └─ __init__.py
│ ├─ utilities
│ │ ├─ common_helper.py
│ │ ├─ vantage_helper.py
│ │ └─ __init__.py
│ └─ __init__.py
├─ project_structure.txt
├─ pytest.ini
├─ requirements.txt
├─ resources
│ ├─ APP
│ │ └─ temp
│ └─ README.md
├─ screenshots
└─ utils
├─ commander
│ ├─ commander_helper.py
│ ├─ README.md
│ └─ __init__.py
├─ config
│ ├─ config_helper.py
│ ├─ scenario_store_helper.py
│ └─ __init__.py
├─ ftps
│ ├─ ftps_helper.py
│ ├─ lenovonow_ftps_helper.py
│ └─ __init__.py
├─ https
│ ├─ http_config
│ │ ├─ domains.json
│ │ ├─ http_config_loader.py
│ │ └─ requests.json
│ ├─ http_helper.py
│ └─ __init__.py
├─ logging_bdd
│ ├─ default.ini
│ ├─ logger_helper.py
│ ├─ README.md
│ └─ __init__.py
├─ metrics
│ ├─ capture_addon.py
│ ├─ environment.py
│ ├─ README.md
│ ├─ test_addon.py
│ └─ __init__.py
├─ ocr
│ ├─ paddle_ocr_helper.py
│ └─ __init__.py
├─ os
│ ├─ application
│ │ ├─ application_info.py
│ │ └─ __init__.py
│ ├─ certification
│ │ ├─ certification_manager.py
│ │ └─ __init__.py
│ ├─ clipboard_helper.py
│ ├─ file_system
│ │ ├─ file_crud.py
│ │ └─ __init__.py
│ ├─ keyboard_mouse_helper.py
│ ├─ language_helper.py
│ ├─ process
│ │ ├─ process_helper.py
│ │ └─ __init__.py
│ ├─ registry
│ │ ├─ regisry_helper.py
│ │ └─ __init__.py
│ ├─ system_info
│ │ ├─ app_info.py
│ │ ├─ battery_info.py
│ │ ├─ bios_info.py
│ │ ├─ bluetooth_info.py
│ │ ├─ camera_info.py
│ │ ├─ computer_system.py
│ │ ├─ control_info.py
│ │ ├─ cpu_info.py
│ │ ├─ desktop_info.py
│ │ ├─ device_info.py
│ │ ├─ disk_info.py
│ │ ├─ edge_info.py
│ │ ├─ firewall_info.py
│ │ ├─ machine_info.py
│ │ ├─ memory_info.py
│ │ ├─ network_info.py
│ │ ├─ oobe_time_info.py
│ │ ├─ README.md
│ │ ├─ system_info_instance.py
│ │ ├─ taskscheduler_info.py
│ │ ├─ wifi_info.py
│ │ ├─ xml_info.py
│ │ └─ __init__.py
│ └─ __init__.py
├─ pytest_bdd
│ ├─ pytest_bdd-7.2.4-py3-none-any.whl
│ ├─ pytest_bdd-7.2.4.tar.gz
│ └─ README.md
├─ report
│ ├─ allure_helper.py
│ ├─ allure_tag_passrate.py
│ ├─ report_helper.py
│ ├─ sinon-9.2.4.js
│ └─ __init__.py
├─ screenshot
│ ├─ README.md
│ ├─ screenshot_helper.py
│ └─ __init__.py
├─ sift
│ ├─ matches.py
│ └─ __init__.py
├─ ui_automation
│ ├─ drivers
│ │ ├─ flaui_helper.py
│ │ ├─ pywinauto_helper.py
│ │ ├─ strategies.py
│ │ └─ __init__.py
│ ├─ README.md
│ ├─ ui_helper.py
│ └─ __init__.py
├─ xtest
│ ├─ xtest_helper.py
│ └─ __init__.py
└─ __init__.py
第一层: .agents AI智能辅助能力层
属于自动化+AI提质增效进阶设计。不再是单纯手动写用例、写代码,而是通过AI技能辅助实现:feature文件自动生成、脚本质量评审、架构规范校验、报告自动生成与评估。
核心价值:
- 统一自动化脚本命名规范与编写标准;
- 自动生成标准化BDD测试用例feature文件;
- 自动化评估自动化脚本质量、覆盖率、稳定性;
- 一键聚合测试报告、迭代优化自动化脚本。
第二层:projects 核心业务自动化层
1、features目录:纯业务BDD用例层(非技术可读)
按API接口测试、UI界面测试两大维度拆分,UI内部再按功能模块细分:欢迎页面、关于页面、Adobe应用页面、麦咖啡权益页面、服务页面、通用功能、埋点指标统计等。
所有以.feature结尾的文件,全部采用Gherkin自然语言编写,遵循Given-When-Then标准BDD语法。
核心设计目的:产品、测试、开发不用看代码,只看feature文件就能看懂测试业务场景、测试步骤、预期结果,实现跨团队协作无壁垒。
2、pages目录:PO页面对象层(元素与操作封装)
严格遵循Page Object设计模式,每个业务页面对应一个独立Python文件,统一继承base_page基础页面类。所有页面控件元素定位、页面基础操作全部封装在此。
核心价值:解耦维护,产品页面UI改版、控件ID变更时,只需要修改pages层代码,不需要改动测试用例和步骤脚本,大幅降低维护成本。
3. step_defs目录:BDD步骤实现层
对应feature文件中的每一句自然语言步骤,在此编写Python代码实现,按UI各业务模块拆分对应步骤脚本。作为业务用例与底层页面操作的中间桥梁,只做步骤调用,不写复杂底层逻辑。
4. utilities目录:项目业务专属工具类
存放APP项目专属的业务辅助方法、业务数据处理、产品专属配置读取等工具,与全局通用工具做隔离,避免业务代码与全局工具混杂。
第三层:utils 全局公共基础工具层(底座能力支撑)
整个自动化框架的技术底座,所有通用、复用、和业务无关的底层能力全部统一封装在此,全项目所有业务脚本统一调用,杜绝代码重复编写。
核心包含几大核心能力模块:
- config配置中心:环境配置、接口域名、参数统一加载管理;
- https接口请求:HTTP/POST接口统一请求封装,适配API自动化测试;
- ui_automation桌面UI驱动:统一封装桌面应用控件查找、点击、弹窗操作;
- os系统底层操作:注册表、进程、文件系统、系统信息、剪贴板、键鼠操作等;
- logging日志、screenshot截图、report报告:自动化运维与结果可视化全套能力;
- ocr图像识别、metrics指标埋点:特殊场景适配与自动化数据统计。
设计核心思想:业务只调用能力,不关心底层怎么实现,底层工具统一维护、统一升级、全局复用。
第四层:全局运行配置层(项目根目录核心配置)
根目录下的conftest.py、pytest.ini、requirements.txt等核心配置文件,负责全局pytest运行规则、依赖包管理、全局夹具初始化、标签配置、缓存管理,保障整个自动化项目统一运行规范。
四、这套Python+BDD架构的核心企业级优势
- 业务与技术彻底解耦:自然语言写用例,Python写执行,跨团队协作无障碍;
- 高可维护性,迭代成本极低:PO分层+工具通用封装,页面改、接口改,不用大面积改脚本;
- UI+API双场景一体化兼容:同一套框架同时支持界面自动化与接口自动化,适配混合测试场景;
- 工程化标准化,支持CI/CD持续集成:日志、截图、报告、埋点全覆盖,可直接接入流水线自动回归;
- AI赋能自动化提效:新增AI辅助用例生成、脚本评审能力,区别于传统老旧自动化框架;
- 适配多版本、多地区、多灰度差异化测试:配置中心化管理,快速切换测试环境与产品版本。
五、总结
对于桌面客户端、企业级商业化软件这类迭代快、模块多、适配场景复杂、需要跨团队协作沟通的自动化测试项目,简单简陋的自动化架构完全无法长期支撑。而本次LenovoNow落地的Python+pytest-BDD分层架构,兼顾了可读性、可维护性、可扩展性、工程化、AI提效五大核心诉求,是企业级自动化测试项目的最优落地方案。
如果你正在搭建同类桌面端自动化测试框架,直接复用这套目录分层思想和BDD设计逻辑,即可快速搭建一套专业、稳定、长期可维护的企业级自动化测试体系。
更多推荐


所有评论(0)