大部分公司测试体系的痛点
- 研发提测质量低?
- 提测流程周期长。
- 回归测试耗时耗力。
- Bug 发现晚,修复流程长。
Applied Software Measurement, Capers Jones(卡珀斯·琼斯), 1996
马丁福勒
金字塔模型
UI 组件的分层测试
google android 测试体系
反模式
反模式-沙漏模型
反模式-倒三角模型
用户端自动化测试分层测试阶段
- 功能测试:
- 研发单元测试:JUnit、Pytest、Robolectric 不依赖真机或者模拟器
- SDK 测试:Instrumentation 依赖真机或者模拟器
- 集成测试:Espresso 单应用快速集成测试
- 验收测试:
- Appium、ATX/AirTest、Calabash、UiAutomation 跨应用测试
- Selenium、Cypress、Playwright
- 非功能测试
- 健壮性测试:Monkey Maxim AppCrawler
- 兼容性测试:多设备分布式测试
- 专项测试:性能测试、弱网测试、耗电量测试、卡顿测试、内存泄漏测试、安全测试
Selenium
- 跨语言:Java、Python、Node.js 等
- 跨平台:Windows、Mac
- 底层多引擎可切换
- 生态丰富,社区强大
Cypress
- Cypress enables you to write all types of tests:
- End-to-end tests
- Component tests
- Integration tests
- Unit tests
PlayWright
Playwright enables reliable end-to-end testing for modern web apps.
Appium
- 跨语言:Java、Python、nodejs 等
- 跨平台:Android、iOS、Windows、Mac
- 底层多引擎可切换
- 生态丰富,社区强大
用户端自动化测试痛点
- 投入成本高:自动化测试门槛高,招聘成本大,学习困难大
- 可用性不足:复用率不高、稳定性不足、执行慢
自动化测试经典问题挑战
假如一个 Web 或者 App 应用,在使用期间,可能会随时弹框提醒用户升级、填写反馈、展示广告,你的自动化测试用例应该如何设计?
自动化测试困难的本质问题
- 投入成本问题
- 建立正确认知,提供良好的自动化测试培训与工具体系
- 建立正确的标准与规范,否则开头错则步步错
- 可用性不足问题
- 自动化测试框架不等于自动化框架+测试框架
- 直接使用 selenium、appium 一定会导致可用性不足
自动化测试问题解决方案
技术体系 |
作用 |
自动遍历测试 |
无代码维护成本,无用例维护成本,可以发现通用问题 |
测试框架定制 |
稳定性提升、异常处理、数据驱动 |
功能自动化测试 |
明确业务流程的自动化测试,业务模型封装 |
测试框架封装
- 异常处理,弹框、延迟、步骤重试(非测试用例重试)
- 多框架支持,业务与实现框架分析,可以支持多种实现框架,Appium、Selenium
- 引入模型驱动模式(MBT、PO),不要直接使用 Selenium Appium 框架编写用例
- 统一 log,截图、录屏、行为日志
智能遍历测试
- 通过智能探索业务路径尝试发现问题
- 可以弥补现有自动化手段的不足
- 已经成为测试过程中的关键一环
智能遍历工具
- 百度 SmartMonkey
- 腾讯 NewMonkey
- 头条 fastbot
- 支付宝 Macaca 的 NoSmoke
- Android Monkey、Android App Crawler
- 霍格沃兹测试开发学社 AppCrawler
- OWASP-ZAP Web 漏洞自动探测
AppCrawler 使用案例
自动遍历的价值
- 用例维护成本低 code-less。
- 具备新功能探索能力,可以对未提测产品进行测试实现左移。
- 具备回归能力,可以实现较高的界面与控件覆盖。
- 应用场景多,回归测试、健壮性测试、兼容测试、自动化专项测试。
腾讯手 Q 的稳定性测试实验室
字节跳动-自动化测试体系案例
Fastbot 已广泛应用于字节客户端类产品的稳定性测试与兼容性测试。每日启动任务数超过 1 万次,每月平均发现 5 万个以上的崩溃。借助 Fastbot 的能力,我们在发版前就可以修复大部分的 crash,确保线上用户的使用体验。同时,Fastbot 在整个 DevOps 流程扮演重要的基础服务角色
字节跳动
UI 自动化执行效率提升
- 并行并发:利用多进程、多线程
- 分布式:分布式执行机制、Jenkins、Docker、K8S
STF 平台
分布式测试技术架构
后端链路调用架构图
淘宝
使用 Mock 技术解耦与提高测试覆盖
Mock 示例 自由构造数据
接口测试框架
- Python:Requests
- Java:RestAssured
- 简约的接口测试 DSL
- 支持结构化解析 XML JSON 等
接口自动化测试用例自动生成
- 静态生成:
- 基于文档 Swagger YAPI
- 基于代码分析语法树
- 动态生成、录制、生成、回放:
- 基于 Proxy 生成用例
- 基于插桩框架生成用例 JVM-SandBox ByteBuddy
测试用例自动生成技术例子 Swagger
JVM-Sandbox-Repeater 录制回放工具
接口重构与 diff 测试
Twitter diffy diff 测试算法
流量回放
GoRplay 技术架构
压测工具
- JMeter 全能型压测工具
- LoadRunner 全能型压测工具
- Gatling 性能强悍的压测工具,性能是 JMter 的 N 倍
- Locust 基于 python 的压测工具
- nGrinder 分布式
- ab http 协议压测
LR 与 JMeter 趋势比较
性能监控价值
- 性能监控是什么
- 对应用的多样化性能指标进行持续性收集、存储、分析和可视化。
- 性能监控价值
- 提升性能分析能力
- 可以快速发现性能瓶颈
- 辅助针对性的解决问题
- 提高实时反馈与响应能力
性能监控指标分析
- 压测工具 TPS Latency
- 系统指标 CPU MEM IO NETWORK
- 应用指标 Nginx JVM MySQL Redis Kafka
- 内核指标 native funtion C/C++
Prometheus
Prometheus is an open-source systems monitoring and alerting toolkit
From metrics to insight
Power your metrics and alerting with the leading
open-source monitoring solution.
Prometheus 是一个开源系统监控和警报工具包
从指标到洞察力使用领先的开源监控解决方案为您的指标和警报提供支持
Grafana 数据可视化平台
Grafana allows you to query, visualize, alert on and understand your metrics no matter where they are stored. Create, explore, and share beautiful dashboards with your team and foster a data driven culture.
Grafana 允许您查询、可视化、提醒和了解您的指标,无论它们存储在哪里。与您的团队创建、探索和共享漂亮的仪表板,并培养数据驱动的文化。
SkyWalking
分布式系统的应用程序性能监视工具,专为微服务、云原生架构和基于容器(Docker、K8s、Mesos)架构而设计。提供分布式追踪、服务网格遥测分析、度量聚合和可视化一体化解决方案。
SkyWalking Trace
SkyWalking 数据库性能分析
用户端性能监控技术
SkyWalking 前端性能监控
SkyWalking 性能剖析 Profiling
性能监控介绍总结
- 性能监控已经在行业里得到了大规模的应用,成为很多公司做性能分析的重要手段。
掌握性能监控平台的构建能力可以帮助公司及时的发现性能问题、提高响应能力,提升公司整体产品体验。
- 掌握性能监控平台的构建和使用也是性能测试工作者的核心能力
大纲
- 测试用例:版本化管理、测试数据组合、测试流程
- 测试框架:TDD(测试驱动开发)、DDT(数据驱动测试)、ATDD(验收测试驱动开发/关键字驱动开发)、BDD(行为驱动开发)
- 测试平台:自研平台、Jenkins 平台
测试框架分类
- TDD:使用 TDD 框架结合领域 DSL 描述测试,Requests、RestAssured、Selenium、Appium
- DDT:数据驱动测试,代表作 HttpRunner
- ATDD:验收测试驱动开发,代表作 RobotFramework
- BDD:行为驱动开发,代表作 Cucumber RobotFramework
测试平台
- 市场需求:测试平台的开发目前是测试行业中的一个热门的技术
- 公司需求:
- 能为团队带来市场价值,比如 wetest
- 高效的平台做调度中心
- 例子:
- DevOps 平台
- 精准化测试平台
- 质量监控平台等等
测试右移主要实践
- 应用监控
- 综合监控 质量监控 Continuous Quality Monitoring
- A/B 测试
- 金丝雀部署 Canary releases
- TIP 线上测试
- 故障注入 混沌工程 Chaos testing
什么是精准测试
百度百科:精准测试是一套计算机测试辅助分析系统。精准测试的核心组件包含的软件测试示波器、用例和代码的双向追溯、智能回归测试用例选取、覆盖率分析、缺陷定位、测试用例聚类分析、测试用例自动生成系统,这些功能完整的构成了精准测试技术体系。
阿里:通过建立测试用例与业务方法的关联关系,在代码发生变化时,精准的推荐出需要运行的用例,进行测试执行与结果反馈。通过精准的圈定测试范围,可以带来效率和速度的双重收益。
Thoughtworks:利用技术手段对测试过程产生的数据进行采集存储,计算,汇总,可视化最终帮助团队提升软件测试的效率、并对项目整体质量进行改进和优化的这一系列操作。
网易:精准测试是一套计算机测试辅助分析系统。使用用例和代码两个关键因子,进行质量综合考量和分析的创新测试理论方法体系,核心组件包含软件测试示波器、用例和代码的双向追溯、智能回归测试用例选取、覆盖率分析、缺陷定位、测试用例聚类分析、测试用例自动生成系统,这些功能完整的构成了精准测试技术体系。
阿里云效精准测试实施案例
阿里
阿里
Thoughtworks
精准测试的应用价值
基于测试用例与代码的关联数据分析,实现测试覆盖改进的方法
- 根据代码变更定位测试用例范围
- 根据代码覆盖精准改进测试用例
- 测试用例漏测精准定位
- 基于大数据反推有效测试用例
行业经典案例
- 百度利用覆盖率增量从回归数据中提取有效覆盖
- 精准定位用例数据与覆盖率关系
- 代码行为流建模
- 星云测试
- 有赞集成测试覆盖率统计实践
- 蚂蚁金服的代码实时染色
- 有赞精准测试实践
- 网易精准测试
- 阿里云效
- …
关键技术点
- 静态分析
- 语法树分析 javaparser antlr
- 代码变更 git diff
- 字节码分析 ASM
- 动态分析
- 覆盖率 JaCoCo
- 插桩 JVM-SANDBOX ByteBuddy
- 流程追踪 debug trace hook
- 测试用例
测试开发技术体系
- 用户端测试
- Web/App 测试
- Web/App 自动化测试
- 用户端专项测试
- 用户端安全测试
- 服务端测试
- 接口协议与 Mock
- 接口自动化测试
- 服务端性能测试
- 服务端安全测试
- 持续交付
- 容器技术 Docker
- 自动化系统 Jenkins
- 持续集成
- 持续交付
- 测试开发
- 持续部署 DevOps
- 测试框架 测试平台
- 测试左移 精准测试
- 测试右移 质量监控
测试能力架构图