测试开发体系介绍

极客时间训练营 & 霍格沃兹测试开发学社

目录

  • 互联网测试技术体系
  • 分层测试策略
  • 自动化测试策略
  • 持续交付与 DevOps 体系
  • 测试左移体系
  • 测试右移体系
  • 精准测试体系
  • 测试开发工程师进阶路线

互联网测试技术体系

经典技术架构

经典业务架构

物联网技术架构

钉钉技术架构

Mall 开源项目技术架构

技术架构的质量保证

  • 用户体验层
  • 业务逻辑层
  • 技术架构层
  • 模块与单元层

阿里云效测试能力与架构

腾讯 WeTest 测试能力全景图

测试技术体系

  • 用户端测试
    • Web/App 测试
    • Web/App 自动化测试
    • 用户端专项测试
    • 用户端安全测试
  • 服务端测试
    • 接口协议与 Mock
    • 接口自动化测试
    • 服务端性能测试
    • 服务端安全测试
  • 持续交付
    • 容器技术 Docker
    • 自动化系统 Jenkins
    • 持续集成
    • 持续交付
  • 测试开发
    • 持续部署 DevOps
    • 测试框架 测试平台
    • 测试左移 精准测试
    • 测试右移 质量监控

分层测试策略

测试金字塔

自动化测试策略

用户端自动化测试分层测试阶段

  • 功能测试:
    • 研发单元测试:JUnit、Robolectric 不依赖真机或者模拟器
    • SDK 测试:Instrumentation 依赖真机或者模拟器
    • 集成测试:Espresso 单应用快速集成测试
    • 验收测试:Appium、ATX/AirTest、Calabash 跨应用测试
  • 非功能测试
    • 健壮性测试:Monkey Maxim AppCrawler
    • 兼容性测试:多设备分布式测试
    • 专项测试:性能测试、弱网测试、耗电量测试、卡顿测试、内存泄漏测试、安全测试

Selenium

  • 跨语言:Java、Python、Node.js 等
  • 跨平台:Windows、Mac
  • 底层多引擎可切换
  • 生态丰富,社区强大

Appium

  • 跨语言:Java、Python、nodejs 等
  • 跨平台:Android、iOS、Windows、Mac
  • 底层多引擎可切换
  • 生态丰富,社区强大

自动化测试的挑战

  • 能力挑战:对工程师的经验与技术能力要求高,会自动化测试的人多,但是做好的人少
  • 成本挑战:复用率不高、稳定性不足、执行慢

经典问题挑战:

假如一个 Web 或者 App 应用,在使用期间,可能会随时弹框提醒用户升级、填写反馈、展示广告,你的自动化测试用例应该如何设计?

UI 自动化测试改进策略

  • 测试策略:分层测试,功能自动化测试、智能遍历测试、人工测试
  • 测试框架:框架封装、异常处理
  • 业务模型:Page Object 模式、DDT、BDD、ATDD

测试框架封装

  • 统一 log,截图、录屏、行为日志
  • 异常处理,弹框、延迟、步骤重试(非测试用例重试)
  • 多框架支持,业务与实现框架分析,可以支持多种实现框架,Appium、ATX
  • 引入 Page Object 模式,不要直接使用 Selenium Appium 框架编写用例

UI 自动化加速策略

  • 并行并发:利用多进程、多线程
  • 分布式:分布式执行机制

STF 平台

分布式测试技术架构

智能遍历测试

  • 通过智能探索业务路径尝试发现问题
  • 可以弥补现有自动化手段的不足
  • 已经成为测试过程中的关键一环

智能遍历工具

  • 百度 SmartMonkey
  • 腾讯 NewMonkey
  • 头条 fastbot
  • 支付宝 Macaca 的 NoSmoke
  • Android Monkey、Android App Crawle
  • OWASP-ZAP Web 漏洞自动探测
  • 霍格沃兹测试开发学社 AppCrawler

自动遍历的价值

  • 用例维护成本低 code-less。
  • 具备新功能探索能力,可以对未提测产品进行测试实现左移。
  • 具备回归能力,可以实现较高的界面与控件覆盖。
  • 应用场景多,回归测试、健壮性测试、兼容测试、自动化专项测试。

自动化测试体系案例

Fastbot 已广泛应用于字节客户端类产品的稳定性测试与兼容性测试。每日启动任务数超过 1 万次,每月平均发现 5 万个以上的崩溃。借助 Fastbot 的能力,我们在发版前就可以修复大部分的 crash,确保线上用户的使用体验。同时,Fastbot 在整个 DevOps 流程扮演重要的基础服务角色

字节跳动

腾讯手 Q

服务端自动化测试

后端链路调用架构图

淘宝

使用 Mock 技术解耦与提高测试覆盖

Mock 示例

  • 自由构造数据

接口测试框架

  • Python:Requests
  • Java:RestAssured
  • 简约的接口测试 DSL
  • 支持结构化解析 XML JSON 等

接口自动化测试用例自动生成

  • 静态生成:
    • 基于文档 Swagger YAPI
    • 基于代码分析语法树
  • 动态生成、录制、生成、回放:
    • 基于 Proxy 生成用例
    • 基于插桩框架生成用例 JVM-SandBox ByteBuddy

测试用例自动生成技术例子 Swagger

JVM-Sandbox 录制回放工具

接口重构与 diff 测试

Twitter diffy diff 测试算法

GoRplay 技术架构

测试框架设计

测试框架的核心

  • 领域建模
  • 自动化
  • 结果分析

测试框架分类

  • TDD:使用TDD框架结合领域DSL描述测试,Requests、RestAssured、Selenium、Appium
  • DDT:数据驱动测试,代表作 HttpRunner
  • ATDD:验收测试驱动开发,代表作 RobotFramework
  • BDD:行为驱动开发,代表作 Cucumber RobotFramework

持续交付

传统开发流程

持续集成

持续集成是一种 DevOps 软件开发实践。采用持续集成时,开发人员会定期将代码变更合并到一个中央存储库中,之后系统会自动运行构建和测试操作。持续集成通常是指软件发布流程的构建或集成阶段,需要用到自动化组件(例如 CI 或构建服务)和文化组件(例如学习频繁地集成)。持续集成的主要目标是更快发现并解决缺陷,提高软件质量,并减少验证和发布新软件更新所需的时间。 @亚马逊

持续交付介绍

持续交付是一种软件开发实践,通过持续交付,系统可以自动为将代码更改发布到生产环境做好准备。​ 现代应用程序开发的支柱,持续交付通过在构建阶段后将所有代码变更部署到测试环境和/或生产环境中,实现对持续集成的扩展。在正确实施时,开发人员将始终拥有已通过标准化测试流程的部署就绪构建构件 ​。 采用持续交付时,开发人员可以自动执行单元测试以外的测试,这样他们就可以在部署到客户环境前跨多个维度对应用程序更新进行验证。这些测试可能包括 UI 测试、负载测试、集成测试、API 可靠性测试等。这有助于开发人员更全面地验证更新并抢先发现其中的问题。 @亚马逊

持续集成 持续交付 持续部署

DevOps 体系

  • 持续集成
  • 持续交付
  • 微服务
  • 基础设施即代码
  • 监控和日志记录
  • 沟通与合作

Atlassian

DevOps 相关技能示例

DevOps 中的左移与右移

测试左移体系

为什么要做测试左移

Applied Software Measurement, Capers Jones, 1996

微软的左移实践

微软

测试左移主要实践

  • 需求分析与评审
  • 代码评审
  • 代码审计、代码静态分析
  • 自动化测试左移
  • 单元测试
  • 覆盖率统计
  • 应用监控
  • 测试用例生成

SonarQube 技术架构图

SonarQube 项目分析案例

典型 bug 案例

测试右移体系

测试右移主要实践

  • 应用监控
  • 综合监控 质量监控 Continuous Quality Monitoring
  • A/B 测试
  • 金丝雀部署 Canary releases
  • TIP 线上测试
  • 故障注入 混沌工程 Chaos testing

精准测试体系

什么是精准测试

百度百科:精准测试是一套计算机测试辅助分析系统。精准测试的核心组件包含的软件测试示波器、用例和代码的双向追溯、智能回归测试用例选取、覆盖率分析、缺陷定位、测试用例聚类分析、测试用例自动生成系统,这些功能完整的构成了精准测试技术体系。

阿里:通过建立测试用例与业务方法的关联关系,在代码发生变化时,精准的推荐出需要运行的用例,进行测试执行与结果反馈。通过精准的圈定测试范围,可以带来效率和速度的双重收益。

Thoughtworks:利用技术手段对测试过程产生的数据进行采集存储,计算,汇总,可视化最终帮助团队提升软件测试的效率、并对项目整体质量进行改进和优化的这一系列操作。

网易:精准测试是一套计算机测试辅助分析系统。使用用例和代码两个关键因子,进行质量综合考量和分析的创新测试理论方法体系,核心组件包含软件测试示波器、用例和代码的双向追溯、智能回归测试用例选取、覆盖率分析、缺陷定位、测试用例聚类分析、测试用例自动生成系统,这些功能完整的构成了精准测试技术体系。

阿里云效精准测试实施案例

阿里

阿里

精准测试案例

Thoughtworks

精准测试的应用价值

基于测试用例与代码的关联数据分析,实现测试覆盖改进的方法

  • 根据代码变更定位测试用例范围
  • 根据代码覆盖精准改进测试用例
  • 测试用例漏测精准定位
  • 基于大数据反推有效测试用例

行业经典案例

  • 百度利用覆盖率增量从回归数据中提取有效覆盖
  • 精准定位用例数据与覆盖率关系
  • 代码行为流建模
  • 星云测试
  • 有赞集成测试覆盖率统计实践
  • 蚂蚁金服的代码实时染色
  • 有赞精准测试实践
  • 网易精准测试
  • 阿里云效

精准测试实现技术

关键技术点

  • 静态分析
    • 语法树分析 javaparser antlr
    • 代码变更 git diff
    • 字节码分析 ASM
  • 动态分析
    • 覆盖率 JaCoCo
    • 插桩 JVM-SANDBOX ByteBuddy
    • 流程追踪 debug trace hook
  • 测试用例
    • 手工用例
    • 自动化用例 JUnit pytest

测试开发工程师进阶路线

Q&A