多端场景的质量保障体系

如果无法正常显示,请先停止浏览器的去广告插件。
分享至:
1. 多端场景的质量保障体系 岑俊伟 京东 · 凹凸实验室 高级前端工程师
2.
3. 个人介绍 岑俊伟 京东 · 凹凸实验室 · 高级前端工程师 • 曾负责京喜小程序首⻚技术架构、工程化及性能优化相关工作,负责 Taro 最佳实践的落地和推广。 • Tiga 自动化解决方案作者,在小程序质量保障方面有较深入研究。
4. 1 多端应用的自动化困境 2 跨端自动化解决方案 Tiga 3 质量保障体系化 4 总结与展望
5. 1 多端应用的自动化困境 2 跨端自动化解决方案 Tiga 3 质量保障体系化 4 总结与展望
6. 需求 | 电商应用对 UI 界面稳定性的要求高 商品露出失败 2. 价格丢失 商品推荐不准确 广告收益受损 3. 商品空窗 1. 楼层缺失 大促场景界面不稳定 4. 广告位曝光上报丢失 5. 千人千面策略异常 ……
7. 理论 | 自动化测试金字塔与反模式 用户视⻆ 人工测试 成本高,效率低 UI 测试 服务/接口测试 开发视⻆ 单元测试 自动化金字塔 成本低,效率高
8. 理论 | 自动化测试金字塔与反模式 人工测试 人工测试 功能测试团队 UI 测试 UI 测试 QA 团队 集成测试 集成测试 单元 测试 单元测试 蛋筒冰淇淋模式 纸杯蛋糕模式 开发团队
9. 目标 | 京喜应用期望的 UI 自动化测试 • 基于 Taro 的同构方案 跨平台 • H5 • 微信小程序 全自动 低成本、易扩展 • 测试上云 • CI / CD 集成 • 100+ 工程师团队 • 事业群核心项目
10. 现状 | 常⻅的前端 UI 自动化测试框架 框架 Selenium Puppeteer Appium 界面录制 底层原理 跨平台 用例开发语言 问题 支持 WebDriver 协议 PC、Android、iOS 浏览器 Python、Java、Ruby、 JS…… 上手难度高 不支持小程序 不支持 Chrome DevTool Protocol Chrome JS 不支持小程序 支持 WebDriver 协议 Android、iOS 不支持浏览器 Python、Java、Ruby、 无法控制小程序逻辑层 JS…… 获取的元素无法区分 AirTest 支持 图像识别 浏览器、Android、iOS Python 识别准确率有限 无法控制小程序逻辑层 Miniprogram Automator 不支持 小程序基础库 微信小程序 JS 不支持浏览器 Minium 不支持 小程序基础库 微信小程序 Python 不支持浏览器
11. 困境一 | 缺乏成熟的 H5 和小程序跨平台方案 解决原生 App 场景 Minium Miniprogram Automator
12. 困境二 | UI 自动化测试在实际业务中的落地成本高昂 用例开发&维护工作繁杂 回归测试成本高 业务逻辑变更频率高 测试脚本不规范 UI 布局经常变化 用例维护的⻆色不明确 难以做到测试无感
13. 困境三 | UI 自动化测试只能满足一部分的质量保障需求 单元测试 应用健康测评 持续集成 …… 静态扫描
14. 1 多端应用的自动化困境 2 跨端自动化解决方案 Tiga 3 质量保障体系化 4 总结与展望
15. 02 跨端自动化解决方案 Tiga 整体思路 模板化的用例开发模式 自动化断言
16. 02 跨端自动化解决方案 Tiga 整体思路 模板化的用例开发模式 自动化断言
17. 系统架构 HttpMockTemplate 模板层 接口层 HttpMockPlugin App ScreenshotTemplate … Page Element Request Response … WebSocket NodeJS Server 代理层 驱动层 HTTP HTTPS Puppeteer Chrome/Chromium 应用层 H5 应用 WebSocket Miniprogram Automator 微信开发者工具 小程序应用 Matcher
18. 1) 兼容多端 | 跨端之间的概念差异 一个浏览器容器可以同时存在多个标 一个小程序容器只能存在一个逻辑层, 签⻚,也就是可以存在多个逻辑层 运行在 JSCore 中
19. 1) 兼容多端 | 跨端之间的概念差异 WebView 渲染线程 互斥 逻辑线程 一个 H5 应用只有一个渲染线程,因此 一个小程序应用可以拥有多个渲染层, 只能通过一个 Page 实例来操控视图 即可以通过多个 Page 实例操控视图
20. 1) 兼容多端 | 对⻬调用主体和执行主体 一个 H5 应用默认为单标签⻚模式,应用在部分场景下的调用主体上 升到 App 实例,但实际执行主体为 Page 实例
21. 1) 兼容多端 | 对⻬调用主体和执行主体 小程序应用在部分场景下的调用主体下放(代理)到 Page 实例,但 实际执行主体都是在同一个逻辑层
22. 1) 兼容多端 | 通过中介者来维护调用/执行主体间的映射关系 app.setStorage() page.setStorage()
23. 1) 兼容多端 | 封装统一的高阶 API
24. 1) 兼容多端 | 编写兼容多端的测试用例 跨端测试用例 H5 环境初始化 小程序环境初始化
25. 2) 请求模拟 | 小程序自动化 SDK 的请求模拟问题 `mockWxMethod` 存在调用延时 很多场景下这种接口覆盖方式不能即使生效,譬如应 用在首屏接口上 `mockWxMethod` 的传入参数会被序列化 这意味着每次临时修改接口模拟参数都需要先调用 正常的小程序接口请求 `restoreWxMethod` 消除 mock 影响,再重新覆盖, 十分繁琐 Miniprogram Automator 通过 `mockWxMethod` API 来覆盖 wx 接口的调用结果
26. 2) 请求模拟 | 小程序自动化 SDK 的请求模拟问题 `mockWxMethod` 难以模拟 WS 请求 正常的小程序 WebSocket 请求 通过 `mockWxMethod` API 的方式很难实现 对 WebSocket 请求的模拟
27. 2) 请求模拟 | 自建本地代理服务
28. 2) 请求模拟 | 代理服务启动流程
29. 2) 请求模拟 | 提供多种方式拦截请求 02 通过事件的方式拦截 WebSocket 请求 01 通过事件的方式拦截 HTTP 请求 03 通过规则表的方式拦截请求
30. 3) 指令同步化 | NodeJS 显式异步带来的可能性麻烦 用例开发者需要关心大量异步调用 对于 UI 自动化测试这种需要高频通信和 I/O 操作 的场景来说,async/await 关键字会大量出现 异步向上传染 async/await 显式异步 如果在 NodeJS 脚本中某个表达式是异步调用的 话,那么异步声明很有可能需要逐层向上传染 “ • async/await 的设计是有意义的,它使并发编程变得简单; • 但在自动化测试的场景中,我们或许可以更加简便; 同步写法 ”
31. 3) 指令同步化 | Fiber 解决异步调用复杂度问题 Fiber 是什么? node-fibers 是基于 v8 实现的协程工具,可以使在异步环境 中通过同步的编程方式编写和运行代码 Fiber 的缺陷? 性能据说是 callback 方式 不兼容 Node.js v16.0.0 以 的 70% 左右 及更高的版本 “ 异步转同步的思路 ”
32. 3) 指令同步化 | Promise 异步指令链 异步指令链的优势 async/await 异步写法 指令链化 自动等待异步指令 指令异常自动重试 waiting… waiting… 链上自动有序处理异步逻辑 内置非空判断提高脚本容错性
33. 3) 指令同步化 | Promise 异步指令链的缺陷 同/异步调用混合时注意执行顺序 由于所有异步指令都会在链上有序异步 地执行,所以同步表达式需要安插在 Promise 链中才能获取到准确的返回值 “ 同步转异步的思路 ”
34. 4) 链式调用 | 自定义指令域 Global App Page 支持自定义指令 Elm
35. 02 跨端自动化解决方案 Tiga 整体思路 模板化的用例开发模式 自动化断言
36. 1) 用例模板化 | 针对测试流程的抽象尝试 开始 开始 开始 跳转⻚面 跳转⻚面 跳转⻚面 模拟请求数据 模拟请求数据 模拟请求数据 刷新⻚面 模 板 刷新⻚面 点击元素 Action 点击元素 截图自动校对 截图自动校对 截图自动校对 …… 结束 结束 结束 测试用例 A 流程 测试用例 B 流程 “ 封装 ” “ 抽象 ” 插 件
37. 1) 用例模板化 | 减少测试用例开发的重复性工作 配置化的注入方式 用例模板与场景绑定,支持测试用例复用
38. 2) 插件化架构 | 建设模板共建渠道 01 编写插件 02 注入插件 插件生命周期
39. 3) 模板化实践 beforeGo • • beforeAllSpecs • • • beforeAllSpecs afterEachSpec 京喜商详 变量初始化 设置模拟器型号 设置 userAgent 设置 cookie 支持 JSONP 格式 • 扩展 beforeScreenshot 接口 优化图片校对参数 • 销毁变量 • Events 消费 Rules 消费 Proxy Server Rules 消费 on('request', fn) “ addHttpRules 灵活可扩展 ”
40. 02 跨端自动化解决方案 Tiga 整体思路 模板化的用例开发模式 自动化断言
41. 1) 截图断言 | 弱校验与强校验 弱校验 校验元素是否存在 expect($('.elm')).not.toBeNull() 校验元素值是否正确 expect($(‘.elm’).value()).toEqual(‘百亿补贴’) 调用逻辑简单 无法确保元素渲染正常 大量的元素校验成本高
42. 1) 截图断言 | 弱校验与强校验 强校验 * 基于 pixelmatch 的图片像素检测能力 测试结果无偏差 需要数据层控制变量 需要准备基准值 正确的渲染表现 基准值 校验结果 测试中的渲染表现 测试值
43. 1) 截图断言 | 自动化流程
44. 1) 截图断言 | 自动化流程 截图断言接口调用案例 异常结果提示
45. 1) 截图断言 | 精准比对 01 只对目标元素进行截图校对 02 只对目标区域进行截图校对
46. 1 多端应用的自动化困境 2 跨端自动化解决方案 Tiga 3 质量保障体系化 4 总结与展望
47. 03 质量保障体系化 单元测试集成 应用健康度评测 测试上云和 CI 集成
48. 03 质量保障体系化 单元测试集成 应用健康度评测 测试上云和 CI 集成
49. 单元测试集成 mocha + chai JS 函数单元测试案例 jsdom miniprogram simulate 双线程 单线程 • 加载和渲染自定义组件 • 组件数据初始化、获取和更新 不需要启动开发者工具 • 增删改查组件元素节点 • 触发组件事件 • 触发组件生命周期 模拟运行环境能力有限 • 获取和调用组件实例的属性与方法
50. 03 质量保障体系化 单元测试集成 应用健康度评测 测试上云和 CI 集成
51. 1) H5 健康度检测 | lighthouse lighthouse 使用方式 • 在 Chrome DevTools 中使用 • 使用 Chrome 扩展程序 • 使用 Node CLI 启动 • 通过 Node 模块编程式调用 支持插件化扩展 lighthouse 检测结果
52. 1) H5 健康度检测 | lighthouse 插件 03 审计项获取中间产物 作为入参,计算得分 04 审计输出的 LHR 数 据进行分类组装后输出 DOM.getDocument 获取节点数、节点层级 Runtime.evaluate setState 调用次数 Profiler.takePreciseCoverage JS 代码覆盖率 02 采集器收集 ⻚面信息 01 Chrome DevTools Protocol 基于跨端的属性 lighthouse 架构图 为小程序端提供参考价值
53. 2) 小程序健康度检测 | 开发者工具 audits JSON 数据封装 个性化检测报告 小程序开发者工具 Audits 结果 关键指标的 details 有限
54. 03 质量保障体系化 单元测试集成 应用健康度评测 测试上云和 CI 集成
55. 1) 测试上云 H5 应用发布预发环境 服务器安装 Chrome Tiga 云测后台配置测试用例 关联执行路径 服务器安装 Tiga 中心化环境 服务器安装开发者工具 关联端口 服务器拉取&构建小程序代码 远程登录开发者工具 Tiga 云测后台配置测试用例 云端执行自动化测试 输出测试报告
56. 2) CI 集成 UI 自动化测试 npm install 单元测试 静态扫描 云测试 CI 上传代码 触发 CI 流程 Finish git clone npm run build CI 预览代码
57. 1 多端应用的自动化困境 2 跨端自动化解决方案 Tiga 3 质量保障体系化 4 总结与展望
58. 04 总结与展望 | 基于 Tiga 实现高效容灾演习 有缓存下接口异常 无缓存下接口异常 无缓存无 CDN 下接口异常 接口异常刷新机制 楼层数据异常容错机制 广告数据上报监测 ……
59. 04 总结与展望 | Tiga 业务成效 80% 38% 10+ 单次容灾演练 效率提升 模板用例复用占比 赋能团队数 商城首⻚ 商品详情 容灾演习 个人中心 活动⻚ …… 自动化测试 Tiga 提效成果
60. 04 总结与展望 质量保障智能化 质量保障体系化 质量保障工具化 • 多端 UI 自动化测试 • 模板化开发模式 • 自动化断言 • 能力集成 • 云测试平台 • 完全自动化 • 精准回归测试(代码扫描) • 智能测试路径(AI 组件识别) • 小程序用户行为回溯 • 测试录屏
61.

trang chủ - Wiki
Copyright © 2011-2024 iteam. Current version is 2.132.1. UTC+08:00, 2024-09-23 19:28
浙ICP备14020137号-1 $bản đồ khách truy cập$