Python+Pytest-BDD UIAPI自动化测试项目架构设计与落地实践
文章目录前言一、项目介绍二、核心技术栈说明1、核心主体框架pytest-BDD2、编程语言与底层驱动Python生态3、UI自动化驱动桌面端专属适配4、辅助能力全覆盖三、项目目录架构设计逻辑第一层 .agents AI智能辅助能力层第二层projects 核心业务自动化层1、features目录纯业务BDD用例层非技术可读2、pages目录PO页面对象层元素与操作封装3. step_defs目录BDD步骤实现层4. utilities目录项目业务专属工具类第三层utils 全局公共基础工具层底座能力支撑第四层全局运行配置层项目根目录核心配置四、这套PythonBDD架构的核心企业级优势五、总结前言为什么企业自动化必须用 PythonBDD 架构在桌面端客户端PC桌面应用规模化自动化测试场景中传统单纯基于脚本录制、线性编码的自动化方案普遍存在用例可读性差、业务与代码耦合严重、维护成本极高、测试人员与开发/产品协作低效等核心痛点。尤其是多页面、多地区差异化配置、多灰度版本、兼顾UI前端交互与后端API接口联动的商业化客户端产品测试迭代节奏快、功能分支多、回归频次高对自动化框架提出了极高要求。而Pythonpytest-BDD组合是目前企业级桌面端、Web端、接口自动化公认的最优解之一。核心核心优势就是业务语言写用例Python代码做底层执行测试全流程行为驱动、分层解耦、人人看得懂、迭代好维护。本文基于我司真实落地自动化项目架构详细拆解整套Pythonpytest-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运行规则、依赖包管理、全局夹具初始化、标签配置、缓存管理保障整个自动化项目统一运行规范。四、这套PythonBDD架构的核心企业级优势业务与技术彻底解耦自然语言写用例Python写执行跨团队协作无障碍高可维护性迭代成本极低PO分层工具通用封装页面改、接口改不用大面积改脚本UIAPI双场景一体化兼容同一套框架同时支持界面自动化与接口自动化适配混合测试场景工程化标准化支持CI/CD持续集成日志、截图、报告、埋点全覆盖可直接接入流水线自动回归AI赋能自动化提效新增AI辅助用例生成、脚本评审能力区别于传统老旧自动化框架适配多版本、多地区、多灰度差异化测试配置中心化管理快速切换测试环境与产品版本。五、总结对于桌面客户端、企业级商业化软件这类迭代快、模块多、适配场景复杂、需要跨团队协作沟通的自动化测试项目简单简陋的自动化架构完全无法长期支撑。而本次LenovoNow落地的Pythonpytest-BDD分层架构兼顾了可读性、可维护性、可扩展性、工程化、AI提效五大核心诉求是企业级自动化测试项目的最优落地方案。如果你正在搭建同类桌面端自动化测试框架直接复用这套目录分层思想和BDD设计逻辑即可快速搭建一套专业、稳定、长期可维护的企业级自动化测试体系。