当前位置: 首页 > article >正文

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设计逻辑即可快速搭建一套专业、稳定、长期可维护的企业级自动化测试体系。

相关文章:

Python+Pytest-BDD UIAPI自动化测试项目架构设计与落地实践

文章目录前言一、项目介绍二、核心技术栈说明1、核心主体框架:pytest-BDD2、编程语言与底层驱动:Python生态3、UI自动化驱动:桌面端专属适配4、辅助能力全覆盖三、项目目录架构设计逻辑第一层: .agents AI智能辅助能力层第二层&am…...

5分钟终极指南:用XUnity.AutoTranslator免费实现Unity游戏实时翻译

5分钟终极指南:用XUnity.AutoTranslator免费实现Unity游戏实时翻译 【免费下载链接】XUnity.AutoTranslator 项目地址: https://gitcode.com/gh_mirrors/xu/XUnity.AutoTranslator 还在为看不懂外语游戏而烦恼吗?XUnity.AutoTranslator让你轻松打…...

大学计算机专业学C语言好吗 2027就业前景如何

对于计算机专业的学生,C语言不是一个“可选项”,而是一个“必选项”和“优选项”。它的价值远超语言本身:理解计算机的“底层逻辑”:C语言直接操作内存、指针、地址,这迫使你去理解数据在内存中如何存储、函数调用时栈…...

保姆级教程:用K210和STM32搞串口通信,从接线到代码避坑全流程

从零搭建K210与STM32串口通信系统:硬件连接、代码实现与调试全指南 在嵌入式开发中,串口通信是最基础也最常用的外设交互方式之一。无论是传感器数据采集、设备控制指令传输,还是简单的调试信息输出,UART协议都扮演着重要角色。本…...

如何在Android TV上实现遥控器精准控制:MATVT虚拟鼠标深度解析

如何在Android TV上实现遥控器精准控制:MATVT虚拟鼠标深度解析 【免费下载链接】matvt Virtual Mouse for Android TV that can be controlled via remote itself. 项目地址: https://gitcode.com/gh_mirrors/ma/matvt 传统Android TV遥控器的方向键导航在操…...

RK3568驱动天显微8寸MIPI屏(JD9365A+GT911)踩坑实录:从时序到触摸的完整配置

RK3568驱动天显微8寸MIPI屏实战:从时序配置到触摸中断的深度排障指南 当一块800x1280分辨率的MIPI屏幕遇上Rockchip RK3568处理器,看似标准的驱动适配过程却暗藏玄机。作为嵌入式工程师,我们往往需要面对厂商提供的零散资料、模糊的时序参数以…...

从Enigma到国密SM4:图解分组密码的‘混淆’与‘扩散’到底是怎么一回事

从Enigma到国密SM4:图解分组密码的‘混淆’与‘扩散’到底是怎么一回事 当你在网上购物输入信用卡信息时,当企业传输机密商业合同时,当政府机构交换敏感数据时——所有这些场景背后,都有一群看不见的"密码工匠"在默默守…...

性能提升52%!实测蜂鸟E203 NICE协处理器如何加速你的算法

蜂鸟E203 NICE协处理器实战:如何通过硬件加速实现算法性能飞跃 在嵌入式开发领域,性能优化永远是一个绕不开的话题。当我们面对实时性要求严苛的应用场景时,传统的软件优化手段往往捉襟见肘。这时,硬件加速方案就成为了突破性能瓶…...

古建筑效果图被退回后,我改了这一步

客户第二天早上把方案过了,反而让整个小组愣了十秒。前一晚十点,设计师老周手里只有一组现场照片、几张测绘线稿和一版被退回的古建筑修缮效果图,甲方的原话很直接:屋面太新,木构太假,院子像民宿样板间&…...

NCMDump:解锁网易云音乐加密格式的3种高效方案

NCMDump:解锁网易云音乐加密格式的3种高效方案 【免费下载链接】ncmdump 项目地址: https://gitcode.com/gh_mirrors/ncmd/ncmdump 你是否曾经下载了网易云音乐的歌单,却发现文件是.ncm格式,无法在其他播放器上播放?数据显…...

福布斯《2026 年 AI:自动化与未来职场十大预测》核心内容总结

2026 年生成式 AI 智能自动化从 “尝鲜” 进入企业规模化落地,不再只是工具,而是重塑岗位、工作方式、企业组织形态的核心变量;AI 不会完全取代人类,而是重构工作、人机分工重新洗牌。 十大核心预测浓缩总结 AI 智能体&#xf…...

5分钟掌握RePKG:轻松提取Wallpaper Engine壁纸资源的开源神器

5分钟掌握RePKG:轻松提取Wallpaper Engine壁纸资源的开源神器 【免费下载链接】repkg Wallpaper engine PKG extractor/TEX to image converter 项目地址: https://gitcode.com/gh_mirrors/re/repkg 你是否曾经为无法提取Wallpaper Engine壁纸包中的精美图片…...

DeerFlow:字节跳动开源的 Super Agent 框架,从入门到上手完全指南

官网 https://deerflow.tech/ 架构演示 目录 引言 一、DeerFlow 到底是什么? 二、为什么 DeerFlow 值得关注? 2.1 字节跳动的工程底蕴 2.2 真正隔离执行——Docker 沙箱是安全护城河 2.3 V2 彻底重写:团队追求"做对"而非&quo…...

Hermes Agent 框架对接 Taotoken 自定义提供商的具体配置指南

🚀 告别海外账号与网络限制!稳定直连全球优质大模型,限时半价接入中。 👉 点击领取海量免费额度 Hermes Agent 框架对接 Taotoken 自定义提供商的具体配置指南 Hermes Agent 是一个流行的 AI 代理框架,它允许开发者通…...

MATLAB Boxplot颜色自定义全攻略:从改边框到隐藏中值线,一篇搞定所有细节

MATLAB Boxplot颜色自定义全攻略:从改边框到隐藏中值线,一篇搞定所有细节 在数据可视化领域,箱线图(Boxplot)因其能直观展示数据分布特征而广受欢迎。然而MATLAB默认生成的箱线图样式往往过于朴素,难以满足…...

关于栈和堆:函数调用过程中的内存管理详解

在学习内存管理时,栈和堆是两个非常重要的概念。为了更好地理解它们,我们先来看一个简单的程序示例。假设我们定义了三个函数:a、b 和 c。其中,函数 a 内部依次调用了函数 b 和函数 c。在 main 函数中,我们调用了函数 …...

避开这些坑:GPT-4 API多轮对话与流式输出实战中的5个常见问题

GPT-4 API高阶实战:多轮对话与流式输出的5个关键优化点 当开发者从基础API调用进阶到构建复杂对话系统时,往往会遇到一系列意料之外的挑战。这些挑战不仅影响用户体验,还可能直接导致项目延期或预算超支。本文将深入剖析五个关键优化点&#…...

用Python+ddddocr+Selenium搞定极验滑块验证码(附完整代码和避坑点)

PythonddddocrSelenium实战:极验滑块验证码自动化解决方案 当你在电商平台抢购限量商品时,或者在社交平台批量注册账号时,滑块验证码往往是第一个需要跨越的技术障碍。作为目前最主流的验证方式之一,极验滑块验证码通过动态加载、…...

新手首次在Taotoken平台获取API Key并完成模型调用的全指南

🚀 告别海外账号与网络限制!稳定直连全球优质大模型,限时半价接入中。 👉 点击领取海量免费额度 新手首次在Taotoken平台获取API Key并完成模型调用的全指南 对于初次接触大模型API的开发者来说,从注册平台到成功发出…...

购买ssl 证书注意事项

购买ssl证书前需要搞清楚几个问题,才能选择合适的证书。 一、证书类型选择 SSL证书按验证强度分为DV、OV、EV三种,信任程度和价格也依次递增 证书类型核心特点与信任等级审核与签发适用场景价格参考(年/单域名)DV (域名验证型)基础加密,信…...

告别手动配置!用CMake的CMAKE_TOOLCHAIN_FILE一键搞定嵌入式ARM交叉编译

嵌入式开发者的CMake救星:用CMAKE_TOOLCHAIN_FILE实现ARM交叉编译自动化 从x86平台转向嵌入式开发时,最令人头疼的莫过于交叉编译环境的搭建。每次新建项目都要重复配置arm-none-eabi-gcc路径、设置-mcpucortex-m4编译参数、调整链接脚本——这些机械性工…...

Mac上IDEA里Maven deploy总报401?别急,先检查这两个配置文件是否‘对暗号’

Mac上IDEA里Maven deploy报401?可能是配置文件没"对暗号" 作为Java开发者,在Mac上使用IntelliJ IDEA进行Maven部署时遇到401错误,就像拿着正确的钥匙却打不开门一样令人沮丧。这个错误通常意味着认证失败,但问题往往不在…...

3大终极自动化功能:让你的《崩坏:星穹铁道》体验轻松翻倍

3大终极自动化功能:让你的《崩坏:星穹铁道》体验轻松翻倍 【免费下载链接】StarRailAssistant 崩坏:星穹铁道自动化 | 崩坏:星穹铁道自动锄大地 | 崩坏:星穹铁道锄大地 | 自动锄大地 | 基于模拟按键 项目地址: https…...

手机号码定位系统:基于ASP.NET的开源解决方案深度解析

手机号码定位系统:基于ASP.NET的开源解决方案深度解析 【免费下载链接】location-to-phone-number This a project to search a location of a specified phone number, and locate the map to the phone number location. 项目地址: https://gitcode.com/gh_mirr…...

娱乐圈天降紫微星平地起高楼,海棠山铁哥白手搭建影视新高度

海棠山铁哥,以一介素人之身,重写内娱影视规则。“真正的紫微星,从不走别人铺好的路。”一、旧世界:资本筑高墙,素人只可仰望规则结果资本奠基高楼只许巨头盖资源铺路赛道被人脉垄断老牌 IP 坐享红利新人只能蹭情怀喝汤…...

娱乐圈天降紫微星逆势而生,海棠山铁哥在无人看好中登巅峰

逆势而生 紫微星传奇“天降紫微星,从来不是被捧出来的,而是闯出来的。”紫微星的降临,从不是顺境中的锦上添花,而是逆境中的破局而生。 它无关资本堆砌的光环,无关流量炒作的热度,无关圈层人脉的加持&…...

从用量看板观察不同模型调用成本与token消耗规律

从用量看板观察不同模型调用成本与token消耗规律 1. 用量看板的核心功能定位 Taotoken用量看板为团队管理者与开发者提供了多维度的API调用数据可视化能力。该功能通过聚合各API Key下的请求日志,实时统计不同模型的调用次数、输入输出token总量及对应费用消耗。所…...

StreamFX架构深度解析:现代OBS插件框架设计与技术实现

StreamFX架构深度解析:现代OBS插件框架设计与技术实现 【免费下载链接】obs-StreamFX StreamFX is a plugin for OBS Studio which adds many new effects, filters, sources, transitions and encoders! Be it 3D Transform, Blur, complex Masking, or even custo…...

如何高效使用开源ZXP安装器:一站式Adobe插件管理解决方案

如何高效使用开源ZXP安装器:一站式Adobe插件管理解决方案 【免费下载链接】ZXPInstaller Open Source ZXP Installer for Adobe Extensions 项目地址: https://gitcode.com/gh_mirrors/zx/ZXPInstaller 还在为Adobe插件安装的繁琐流程而烦恼吗?ZX…...

2026年Hermes Agent/OpenClaw怎么部署?阿里云快速上手及Coding Plan配置教程

2026年Hermes Agent/OpenClaw怎么部署?阿里云快速上手及Coding Plan配置教程。 OpenClaw作为阿里云生态下新一代的开源AI自动化代理平台,曾用名Moltbot/Clawdbot,凭借“自然语言交互自动化任务执行大模型智能决策”的核心能力,正在…...