前言

为什么企业自动化必须用 Python+BDD 架构?

在桌面端客户端(PC桌面应用)规模化自动化测试场景中,传统单纯基于脚本录制、线性编码的自动化方案,普遍存在用例可读性差、业务与代码耦合严重、维护成本极高、测试人员与开发/产品协作低效等核心痛点。尤其是多页面、多地区差异化配置、多灰度版本、兼顾UI前端交互与后端API接口联动的商业化客户端产品,测试迭代节奏快、功能分支多、回归频次高,对自动化框架提出了极高要求。

Python+pytest-BDD组合,是目前企业级桌面端、Web端、接口自动化公认的最优解之一。核心核心优势就是:业务语言写用例,Python代码做底层执行,测试全流程行为驱动、分层解耦、人人看得懂、迭代好维护
本文基于我司真实落地自动化项目架构,详细拆解整套Python+pytest-BDD企业级自动化架构设计思路、目录分层逻辑、核心设计思想、适配场景及落地价值,为同类桌面客户端自动化项目架构搭建提供完整参考范本。

一、项目介绍

在这里插入图片描述

这套架构,核心做到了BDD自动化最关键的5大核心分层隔离原则

  1. 业务用例与代码实现彻底隔离:非技术人员看懂用例,技术人员只管写底层执行代码;
  2. 页面元素与业务步骤彻底隔离:严格遵循PO页面对象设计模式,页面改了只改page层,不动测试用例和步骤;
  3. 通用工具与业务脚本彻底隔离:底层能力统一封装,业务脚本只调用不重复造轮子;
  4. UI自动化与API自动化目录隔离:双场景兼容,互不干扰,适配混合测试场景;
  5. 配置、日志、截图、报告、指标统计统一中心化管理:工程化标准,适配持续集成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.pypytest.inirequirements.txt等核心配置文件,负责全局pytest运行规则、依赖包管理、全局夹具初始化、标签配置、缓存管理,保障整个自动化项目统一运行规范。

四、这套Python+BDD架构的核心企业级优势

  1. 业务与技术彻底解耦:自然语言写用例,Python写执行,跨团队协作无障碍;
  2. 高可维护性,迭代成本极低:PO分层+工具通用封装,页面改、接口改,不用大面积改脚本;
  3. UI+API双场景一体化兼容:同一套框架同时支持界面自动化与接口自动化,适配混合测试场景;
  4. 工程化标准化,支持CI/CD持续集成:日志、截图、报告、埋点全覆盖,可直接接入流水线自动回归;
  5. AI赋能自动化提效:新增AI辅助用例生成、脚本评审能力,区别于传统老旧自动化框架;
  6. 适配多版本、多地区、多灰度差异化测试:配置中心化管理,快速切换测试环境与产品版本。

五、总结

对于桌面客户端、企业级商业化软件这类迭代快、模块多、适配场景复杂、需要跨团队协作沟通的自动化测试项目,简单简陋的自动化架构完全无法长期支撑。而本次LenovoNow落地的Python+pytest-BDD分层架构,兼顾了可读性、可维护性、可扩展性、工程化、AI提效五大核心诉求,是企业级自动化测试项目的最优落地方案。
如果你正在搭建同类桌面端自动化测试框架,直接复用这套目录分层思想和BDD设计逻辑,即可快速搭建一套专业、稳定、长期可维护的企业级自动化测试体系。

更多推荐