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

【Appium 系列】第13节-混合测试执行器 — API + UI 的协同执行

对应代码配套代码/test/core/hybrid_test_executor.py说明本节讲解当一个测试用例需要同时使用接口测试和 UI 测试时如何协调执行。这节讲什么有些测试用例光靠接口测试或 UI 测试都不够。比如验证用户注册后能登录这个用例需要先通过接口创建用户数据准备再通过 UI 验证登录流程用户体验如果只用接口测试验证不了 UI 层面的问题比如按钮没响应、页面跳转错误 如果只用 UI 测试数据准备太慢需要通过 UI 手动填写注册表单混合测试就是为了解决这个问题接口负责数据准备UI 负责体验验证。两者协同各取所长。核心思路混合测试的执行流程测试用例 ↓ 步骤 1: 接口准备数据快速、稳定 ↓ 步骤 2: UI 验证功能覆盖用户体验 ↓ 汇总结果为什么需要混合测试场景纯接口测试纯 UI 测试混合测试数据准备快慢接口准备用户体验验证覆盖不了全覆盖UI 验证执行时间1-2 秒30-60 秒15-30 秒稳定性高低依赖设备中混合测试折中了时间和覆盖度用接口快速准备数据用 UI 验证核心体验。实战案例案例用户注册后登录name: 验证用户注册后能成功登录 test_type: hybrid # 明确指定混合测试 # 接口步骤准备测试数据 api_steps: - action: post path: /api/register json: username: testuser password: test123 expect_status: 201 # UI 步骤验证登录体验 steps: - action: click target: login_button - action: input target: username_field value: testuser - action: input target: password_field value: test123 - action: click target: submit_button - action: verify target: welcome_text expect: 欢迎testuser执行流程接口阶段调用/api/register创建用户1 秒UI 阶段打开登录页面输入账号密码点击登录验证欢迎文本15 秒汇总两个阶段都通过才算通过代码实现核心代码在core/hybrid_test_executor.pyclass HybridTestExecutor: def execute(self, test_case, driverNone, api_clientNone): test_type TestRouter.determine_test_type(test_case) if test_type TestType.HYBRID: return self._execute_hybrid_test(test_case, driver, api_client) def _execute_hybrid_test(self, test_case, driver, api_client): result { test_case: test_case[name], test_type: hybrid, api_result: {}, ui_result: {} } # 步骤 1: 接口准备数据 api_steps test_case.get(api_steps, []) if api_steps and api_client: api_result self._execute_api_test( {name: 数据准备, steps: api_steps}, api_client ) result[api_result] api_result # 接口失败则直接返回 if api_result[status] failed: result[status] failed result[message] 接口数据准备失败 return result # 步骤 2: UI 验证 ui_steps test_case.get(steps, []) if ui_steps and driver: ui_result self._execute_ui_test( {name: test_case[name], steps: ui_steps}, driver ) result[ui_result] ui_result if ui_result[status] failed: result[status] failed result[message] UI 验证失败 return result # 都通过 result[status] passed result[message] 混合测试通过 return result注意事项1. 接口失败的处理如果接口数据准备失败不要继续执行 UI 步骤。因为 UI 验证依赖接口准备的数据数据没准备好UI 验证必然失败。建议接口失败时立即返回记录错误信息方便排查是接口问题还是环境问题。2. UI 失败的截图UI 验证失败时一定要截图。因为 UI 问题往往是视觉层面的比如元素没显示、布局错乱光看日志看不出问题。建议在_execute_ui_test的 except 块中调用driver.get_screenshot_as_file()保存失败时的页面状态。3. 数据清理混合测试完成后需要清理接口创建的数据。否则多次执行会积累大量测试数据影响后续测试。建议在测试用例的teardown阶段添加清理步骤或者使用唯一用户名如testuser_12345避免冲突。4. 执行顺序必须先接口后 UI不能反过来。因为 UI 验证依赖接口准备的数据。如果先执行 UI数据还没准备好验证必然失败。混合测试的适用场景混合测试不是万能药它适合特定的场景。以下是判断该不该用混合测试的参考标准适合用混合测试的场景注册→登录→下单数据准备用接口快核心流程用 UI 验证全后台配置→前端展示接口修改配置UI 验证展示效果批量数据准备→单点验证接口批量创建 100 条数据UI 验证分页/搜索/筛选跨系统协作接口调用外部系统触发事件UI 验证本系统响应不适合用混合测试的场景纯 UI 交互验证比如动画效果、手势操作、拖拽排序——这些跟接口无关纯 UI 测试就行纯接口压力测试比如并发 1000 请求——不需要 UI接口测试更合适用例数量少的项目混合测试增加了用例设计的复杂度小项目用不上判断标准如果一个测试场景满足数据准备耗时 UI 验证耗时或者数据准备步骤 3 步就值得考虑混合测试。否则选纯 API 或纯 UI 更简单。

相关文章:

【Appium 系列】第13节-混合测试执行器 — API + UI 的协同执行

对应代码:配套代码/test/core/hybrid_test_executor.py说明:本节讲解当一个测试用例需要同时使用接口测试和 UI 测试时,如何协调执行。这节讲什么有些测试用例,光靠接口测试或 UI 测试都不够。比如"验证用户注册后能登录&quo…...

别再只会点灯了!用ESP8266+Blinker做个远程浇花器,附完整代码和手机App配置

从远程点灯到智能浇花:用ESP8266Blinker打造阳台植物管家 清晨的阳光透过窗帘洒进来,你躺在床上用手机轻轻一点,阳台上的花草便开始了自动灌溉——这不是科幻电影的场景,而是每个物联网爱好者都能实现的智能生活小确幸。对于已经…...

3步掌握:如何用 iztro 实现紫微斗数自动化排盘

3步掌握:如何用 iztro 实现紫微斗数自动化排盘 【免费下载链接】iztro ⭐This is a lightweight kit for generating astrolabes for Zi Wei Dou Shu (The Purple Star Astrology), an ancient Chinese astrology. It allows you to obtain your horoscope and pers…...

智赋能源 安筑未来|济南昊安光电亮相 2026 第六届中国贵州国际能源产业博览交易会

2026 年 5 月 18 日 —5月 20日,2026 第六届中国贵州国际能源产业博览交易会(简称 “贵州能源博览会”)在贵阳国际会议展览中心盛大启幕。本届展会聚焦能源产业数字化转型、绿色低碳发展与安全高效生产,汇聚能源领域全产业链优质企…...

AnimateDiff:3分钟让静态图像动起来的AI动画生成神器

AnimateDiff:3分钟让静态图像动起来的AI动画生成神器 【免费下载链接】animatediff 项目地址: https://ai.gitcode.com/hf_mirrors/ai-gitcode/animatediff 你是否想过,只需几句话就能让静态图片活起来?是否在寻找将创意想法快速转化…...

EdiZon终极指南:Nintendo Switch存档编辑与内存修改完全教程

EdiZon终极指南:Nintendo Switch存档编辑与内存修改完全教程 【免费下载链接】EdiZon 💡 A homebrew save management, editing tool and memory trainer for Horizon (Nintendo Switch) 项目地址: https://gitcode.com/gh_mirrors/ed/EdiZon 想要…...

从一次失败的App上线,看我们如何用PDCA循环在3个月内实现用户留存翻倍

从一次失败的App上线,看我们如何用PDCA循环在3个月内实现用户留存翻倍 去年夏天,我们的团队经历了一次刻骨铭心的产品滑铁卢——一款投入半年研发的社交类App在上线首周就遭遇了用户留存率暴跌至8%的危机。这个数字远低于行业平均25%的水平线&#xff0c…...

StarUML Java插件终极指南:高效实现UML与Java代码双向转换

StarUML Java插件终极指南:高效实现UML与Java代码双向转换 【免费下载链接】staruml-java Java extension for StarUML 项目地址: https://gitcode.com/gh_mirrors/st/staruml-java StarUML Java插件为Java开发者提供了强大的UML建模与代码生成能力&#xff…...

终极指南:如何用3行命令实现美国签证预约自动化抢号

终极指南:如何用3行命令实现美国签证预约自动化抢号 【免费下载链接】us-visa-bot US Visa Bot 项目地址: https://gitcode.com/gh_mirrors/us/us-visa-bot 还在为美国签证面试预约的漫长等待而焦虑吗?手动刷新页面、熬夜守候已成为过去式。今天&…...

告别盲测!用Arduino UNO和VL6180X做个桌面防撞小助手(OLED实时显示距离)

用Arduino UNO和VL6180X打造智能桌面防撞系统 每次在办公桌上不小心碰倒水杯或手机从桌边滑落时,那种手忙脚乱的场景想必大家都不陌生。今天我们就来解决这个日常小烦恼——利用Arduino UNO开发板和VL6180X传感器,配合OLED显示屏,制作一个能实…...

10分钟搭建企业级网络流量监控系统:ElastiFlow实战指南

10分钟搭建企业级网络流量监控系统:ElastiFlow实战指南 【免费下载链接】elastiflow Network flow analytics (Netflow, sFlow and IPFIX) with the Elastic Stack 项目地址: https://gitcode.com/gh_mirrors/el/elastiflow 在当今复杂的网络环境中&#xff…...

DeepSeek-Coder-V2:如何用开源代码智能模型解决企业级开发痛点?

DeepSeek-Coder-V2:如何用开源代码智能模型解决企业级开发痛点? 【免费下载链接】DeepSeek-Coder-V2 DeepSeek-Coder-V2: Breaking the Barrier of Closed-Source Models in Code Intelligence 项目地址: https://gitcode.com/GitHub_Trending/de/Deep…...

LLaMA论文里没细说的三个‘炼丹’细节:RMSNorm、SwiGLU和RoPE到底怎么用?

LLaMA论文里没细说的三个‘炼丹’细节:RMSNorm、SwiGLU和RoPE到底怎么用? 在构建现代大型语言模型时,论文往往聚焦于宏观架构和性能对比,而将关键实现细节留给读者自行揣摩。LLaMA论文中提到的RMSNorm、SwiGLU和RoPE三项改进&…...

从URP到Built-in:手把手教你迁移Unity第三人称模板并成功换人(解决Shader报错)

从URP到Built-in:Unity第三人称模板迁移全流程实战指南 当你在Unity中打开官方提供的Third Person模板,准备将其应用到自己的项目时,可能会遇到一个棘手的问题——这个模板是基于URP(Universal Render Pipeline)设计的…...

「阅读」APP书源配置与管理完整指南:从新手到高级用户的实用教程

「阅读」APP书源配置与管理完整指南:从新手到高级用户的实用教程 【免费下载链接】Yuedu 📚「阅读」自用书源分享 项目地址: https://gitcode.com/gh_mirrors/yu/Yuedu 「阅读」APP作为一款开源的小说阅读工具,其核心功能依赖于书源的…...

如何高效使用RBTray:Windows窗口管理终极解决方案

如何高效使用RBTray:Windows窗口管理终极解决方案 【免费下载链接】rbtray A fork of RBTray from http://sourceforge.net/p/rbtray/code/. 项目地址: https://gitcode.com/gh_mirrors/rb/rbtray 你是否经常被桌面上堆积如山的窗口搞得心烦意乱?…...

剪映专业版教程:制作冒泡排序算法原理演示视频

前言 今天教大家用剪映制作冒泡排序算法的原理演示视频。冒泡排序的原理是:从左到右,依次比较相邻两个元素,如果左边的元素大于右边的元素,就交换位置。这样,一轮比较下来,最大的元素会被“冒泡”到最右边…...

QGIS连接天地图最新指南:搞定Token和Header,解决加载失败问题

QGIS连接天地图最新指南:搞定Token和Header,解决加载失败问题 天地图作为国内权威的地理信息服务,在QGIS中的集成使用一直是GIS从业者的高频需求。但最近不少用户反馈,按照网上流传的旧教程配置后,天地图服务在QGIS中…...

为内部ai工具配置taotoken实现安全可控的api调用代理

🚀 告别海外账号与网络限制!稳定直连全球优质大模型,限时半价接入中。 👉 点击领取海量免费额度 为内部AI工具配置Taotoken实现安全可控的API调用代理 在企业内部开发AI工具或智能体(Agent)时,…...

剪映专业版教程:制作直接选择排序算法原理演示视频

前言 今天教大家用剪映制作直接选择排序算法的原理演示视频。直接选择排序的原理是:在同一个数组中,先挑一个最小的,跟第一位交换;待排序下标往后移到第二位,从这里开始往后找一个最小的,跟第二位交换&…...

Python 3.x 下修复MD5编码报错:手把手教你搞定BUUCTF那道‘丢失的MD5’题

Python 3.x下MD5编码报错全解析:从CTF实战到通用解决方案 当你在BUUCTF中遇到那道关于"丢失的MD5"的题目时,是否也曾被那个看似简单的编码错误困扰?这不仅仅是一道CTF题目的解法,更是Python 3.x版本中字符串处理机制变…...

戴尔G15笔记本散热优化:开源温度控制中心TCC-G15完全指南

戴尔G15笔记本散热优化:开源温度控制中心TCC-G15完全指南 【免费下载链接】tcc-g15 Thermal Control Center for Dell G15 - open source alternative to AWCC 项目地址: https://gitcode.com/gh_mirrors/tc/tcc-g15 对于戴尔G15系列笔记本用户而言&#xff…...

郑州市科技局:科技成果汇编(第01册)2026

这份文档是郑州市科学技术局 2026 年发布的第 1 期科技成果汇编,共收录112 项优质科技成果,覆盖装备制造、环境治理、新材料、电子信息、新能源与节能、生物医药、粮油食品、其他八大核心领域,由郑州大学、华北水利水电大学、河南工业大学等高…...

渝中区宜居、 韧性、智慧城市建设“十五五”规划(征求意见稿) 2026

这份《渝中区宜居、韧性、智慧城市建设 “十五五” 规划(征求意见稿)》,立足渝中区 “重庆母城、都市极核、品质半岛、首善之区” 定位,总结 “十四五” 成效、分析机遇挑战,明确 2026—2030 年总体目标、核心任务与保…...

内网终端安全管控:筑牢企业内部网络入侵防火墙

内网终端安全管控的核心目标内网终端安全管控旨在通过技术和管理手段,防止未经授权的访问、数据泄露及恶意攻击,确保企业内部网络资源的机密性、完整性和可用性。终端设备准入控制部署网络准入控制(NAC)系统,强制终端设…...

业务接口安全加固:杜绝恶意刷量与非法调用风险

业务接口安全加固方法输入验证与过滤 对所有传入参数进行严格校验,包括数据类型、长度、格式(如正则匹配)。对特殊字符进行转义或过滤,防止SQL注入、XSS等攻击。使用白名单机制限制可接受的输入范围。访问频率限制 基于IP、用户ID…...

MulimgViewer:高效多图像浏览与对比工具

MulimgViewer:高效多图像浏览与对比工具 【免费下载链接】MulimgViewer MulimgViewer is a multi-image viewer that can open multiple images in one interface, which is convenient for image comparison and image stitching. 项目地址: https://gitcode.com…...

保姆级教程:用ENVI+SNAP搞定哨兵1号雷达数据预处理(附水稻监测实战)

从零掌握哨兵1号雷达数据处理:ENVI与SNAP双软件协同实战指南 当第一次接触哨兵1号雷达数据时,许多研究者都会被其独特的成像机制和处理流程所困扰。与光学遥感不同,雷达数据需要经过一系列专业预处理才能用于分析。本文将带你系统掌握ENVI和…...

Vivado 2022.2的.xsa文件,真能通吃Petalinux 2019.2到2022.2吗?我的混搭实测记录

Vivado与Petalinux版本混搭实战:打破常规的.xsa文件兼容性探索 在FPGA开发领域,Xilinx工具链的版本匹配一直被视为金科玉律。但当我们手头只有高版本Vivado,却需要兼容旧版Petalinux环境时,是否真的必须严格遵循官方版本对应表&a…...

告别低速串口:用STM32的FSMC总线驱动FPGA,实现高速数据交换的完整流程(基于STM32F407)

STM32与FPGA的高速数据通道:基于FSMC总线的实战设计指南 在嵌入式系统开发中,数据吞吐量常常成为制约系统性能的关键瓶颈。当STM32微控制器需要与FPGA进行大数据量交互时——无论是实时图像处理、高速数据采集还是复杂算法加速——传统的串行通信接口如…...