测试体系介绍-L2

一、快速了解一家公司的架构

业务架构

  • 领域模型:角色、行为、数据;
  • 业务流程:角色之间的继承关系。

系统架构

  • 架构角色与技术栈:
    • 网关:apache/nginx/f5/
    • 应用开发:spring boot/spring cloud/
    • 通讯协议:dubbo/http/pb
    • 数据处理:hadoop/spark/flink
    • 数据存储:redis/mysql/oracle/redis/es
    • 文档存储:mongodb/hbase/neo4j
  • 部署架构:架构角色之间的集成关系。

二、统一建模语言

  • 用例图:商业模式、业务角色;
  • 时序图:业务流程、调用关系;
  • 部署图:系统架构与集成关系;
  • 活动图:业务逻辑分析。

2.1 推荐工具

  • plantuml
  • yed
  • draw.io
  • processon
  • visio

2.2 梳理业务流程

SoWkIImgAStDuIfEJin9LR0mC538ICrCpoZXoabDAr4eoLSe0l4KKZABKfDBClFpk1AJI_AB54ABKuiK4eiLIe4qLCWn9JSp3oIM269m5IGcPoUcfoeydThsT7AZGZMN0aXnSc9ngeBIq_w9JtSqGsIKa2MURUr_iRm3YyIBBMkVxDo0HUB9ZkvdyxR196gvuFQ-MBVeQUzKL7kVx-1

2.3 使用思维导图分析功能点

JP6xReGm44Nx-OgfKj14wOcrKjYA9Ii5RPJMm60i-IK_ik7lWu5TqNZkFNSqVfr2v3vgQGRD7K3FNPJMu2X5yeHl46LKXCsC8Jdok5g00ikNKN71AkeaDr1a89JjYDswP69QI84NQT8VDjB4rTRf41rqNPtna-nZYkTkOfUcEc_U9HM8jLRDmq-z8x9EBImIrzTsO_aQx8i7by-3T

2.4 使用时序图分析数据流

2.5 使用活动图分析测试用例

RP2nJiD044Jx-ufHQEmYicbjAOI22WcAy0F6cVXEiU-itOqCVy_9n0sY6ytExZpjKQqJkqsZqxuRYSUwhk4P1czk7JdXpCuSq7nG3PeccWznQBC5X0kAqsPXOJGiakBmLC8y8ugOoZK8FCovO10oDk-lxTty57RNLJEUmsLL-yFR5cYUHufXzoAI14imZp5VX_7BTksT3OiF6VrVZ

三、了解被测系统架构

  • 业务架构:业务模型分析
  • 技术架构:技术组件、通讯协议分析
  • 数据架构:数据模型、数据存储引擎分析

智能家居技术架构:

阿里云经典业务架构:

阿里云物联网平台技术架构:

企业服务钉钉技术架构:

企业服务飞书技术架构:

电子商城Mall开源项目技术架构:

经典技术架构

  • 网关产品 Nginx Apache Httpd
  • Web 应用开发 Vue.js React
  • 移动应用开发 Android iOS RN Flutter
  • 后端应用开发 Java(Spring Boot)
  • 底层引擎:C/C++ Go Rust
  • 消息管道 Kafka RabbitMQ
  • 缓存系统 Redis MemCached
  • 数据监控 Logstash ElasticSearch Kibana
  • 性能监控 Prometheus Grafana
  • 大数据处理 Hadoop Spark Flink
  • 人工智能深度学习 TensorFlow Pytorch

四、测试开发技术体系

  • 用户端测试

    • Web/App 测试
    • Web/App 自动化测试
    • 用户端专项测试
    • 用户端安全测试
  • 服务端测试

    • 接口协议与 Mock
    • 接口自动化测试
    • 服务端性能测试
    • 服务端安全测试
  • 持续交付

    • 容器技术 Docker
    • 自动化系统 Jenkins
    • 持续集成
    • 持续交付
  • 测试开发

    • 持续部署 DevOps
    • 测试框架 测试平台
    • 测试左移 精准测试
    • 测试右移 质量监控

测试能力架构图

腾讯与阿里的质量保证服务参考

阿里云效测试能力与架构:


腾讯 WeTest 测试能力全景图:

五、被测需求理解

5.1 需求文档

5.2 需求评审

5.3 需求分析

  1. 明确测试范围;
  2. 明确功能点;
  3. 明确业务流程;
  4. 明确输出结果;
  5. 分析异常流程;
  6. 预估测试需要的时间和资源。

六、常用测试策略与测试手段

6.1 测试策略

6.1.1 概念

  • 在特定环境约束之下,描述软件开发周期中关于测试原则、方法、方式的刚要,并阐述了它们之间如何配合,以高效地减少缺陷、提升质量。

6.1.2 关注重点

  1. 测试的目标是什么?
  2. 测试可能存在的风险是什么?
  3. 测试的对象和范围是什么?
  4. 如何安排各种测试活动?
  5. 如何评价测试的效果?

6.2 测试手段

  1. 黑盒测试
  2. 白盒测试
  3. 动态测试
  4. 静态测试
  5. 手工测试
  6. 自动化测试

七、Bug 定位方法

7.1 常见Bug分类

维度 介绍
功能 业务流程是否正确
性能 业务流程是否顺畅
安全 是否符合安全标准与规范
专项质量 用户体验UX兼容性、稳定性、可靠性

7.2 Bug 定位的意义

  1. 提交Bug时追加更多有用信息,方便研发更快的解决问题;
  2. 分析Bug形成原因,进行溯源并建立特征,进行批量追踪。

7.3 Bug展现层

  • 条件:测试数据
  • 过程:测试步骤
  • 结果:测试结果
    image

7.4 技术架构层次

  • 视图层View:
    • Web:UI、HTML、CSS
    • APP:activity view
  • 控制器层Controller:
    • Web:Chrome、devtool
    • APP:dalvik art object-runtime
  • 模型层Model:
    • 模型的传递方式:HTTP、TCP、RPC串口
    • 模型的形式:JSON、XML、Binary
    • 模型的定义:schema
      image

7.4.1 MVC 三层分析方法

  • View层:运行平台、应用调试机制、链路分析
  • Controller层:运行平台、应用调试机制、链路分析
  • Model层:运行平台、应用调试机制、链路分析

7.4.2 View 层常用分析方法

  • UI 人工测试、自动化测试
  • UE 人工测试、自动化测试
  • UI Diff 自动化分析

7.4.3 Controller 层常用分析方法

  • 运行平台日志:log
  • 应用调试日志:debug trace hook profile

7.4.4 Model 层常用分析方法

  • 运行平台log
  • APP调试机制
  • 链路分析:代理抓包、嗅探抓包

7.5 Web Bug 分析

7.5.1 Web UI View 层Bug分析方法

  1. 主要依赖于HTML、CSS、JS;
  2. 可以使用Chrome开发者工具elements与style。

7.5.2 Web Controller 层分析方法

  1. Console可 以了解JS的输出与报错信息;
  2. Source 模块可以对JS进行Debug。

7.5.3 Web Model 层分析方法-分析数据传递方式与结构

  • 运行平台Bug:
    • Chrome-network
  • 链路分析:

7.6 APP Bug 分析

7.6.1 APP View 层Bug分析

  1. UI界面交互
  2. UX/UE 用户体验
  3. UI Diff:uiautomator dump

    image

7.6.2 APP Controller 层Bug分析

7.6.3 APP Model 层Bug分析

  • 运行平台Log
  • 应用:应用日志
  • 链路分析:
    • 代理抓包:Charles、Fiddler、mitmproxy
    • 嗅探抓包:wireshark、tcpdump

7.6.4 Android Profile 网络分析

7.6.5 使用代理工具分析

7.6.6 网络协议层分析


7.7 性能Bug分析

7.7.1 H5性能分析

7.7.2 利用Chrome分析Web性能

7.7.3 分析性能瓶颈:使用Profile进行代码剖析

7.7.4 代码覆盖率分析方法


7.8 定位Bug步骤

  1. 明确Bug问题的现象与复现步骤;
  2. 分层分析关键过程的数据与问题特征;
  3. 积累Bug特征与问题根源特征,丰富测试经验,提高发现Bug的能力。

八、分层测试策略

8.1 分层测试策略的初衷

8.1.1 质量保证

  • 需求分析
  • 测试标准确立
  • 测试用例review
  • 界面覆盖率
  • 接口覆盖率
  • 代码覆盖率

8.1.2 效率提升

  • 人工测试:招人、加人、培训,无论横向扩容还是纵向扩容,成本都很大;
  • 自动化测试:自动化测试、自动遍历测试、录制回放测试;
  • 尽早测试尽快反馈:单元测试、集成测试;
  • 流水线:持续集成、持续交付DevOps。

8.2 测试金字塔(马丁福勒)

image

8.3 UI组件的分层测试(Google Android测试体系)

8.4 金字塔模型与沙漏模型

image image

8.5 微服务测试模型(马丁福勒)

  • Resources:通过特定协议暴露能力;
  • Service:负责领域模型的协作;
  • Domain:包含行为和数据的领域对象模型;
  • Repositories:作用于域实体的集合,并且通常是持久性支持的;
  • Gateway:与远程服务进行通讯;
  • Data Mappers:模型的序列化方案。

8.6 微服务测试策略

  • 单元测试:检验应用程序中最小的可测试软件,以确定它们的行为是否符合预期;
  • 集成测试:验证组件之间的通信路径和交互以检测接口缺陷;
  • 组件测试:将运行软件的范围限制在被测系统的一部分,通过内部代码接口操纵系统,并使用测试替身将被测代码与其他组件隔开来;
  • 端到端测试:验证系统是否满足外部要求并实现其目标,从头到尾测试整个系统。

九、自动化测试策略

9.1 用户端测试体系

  • 研发单元测试:JUnit、Robolectric不依赖真机或者模拟器;
  • 集成测试:Espresso单应用快速集成测试;
  • 验收测试:Appium、ATX/AirTest、Calabash跨应用测试。

Google Android测试体系:

9.1.1 工具体系参考


9.1.2 智能遍历工具

  • 百度:SmartMonkey
  • 腾讯:NewMonkey
  • 头条:fastbot
  • 支付宝:Macaca的NoSmoke
  • Android Monkey、Android APP Crawler
  • 霍格沃兹的APPCrawler
  • OWASP-ZAP Web漏洞自动探测

9.1.3 稳定性测试体系案例


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

9.2 服务端测试体系

  • 手工测试
  • 自动化测试
  • DIFF测试、流量回放
  • Mock

9.2.1 后端链路调用架构图

淘宝:

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

9.3 接口测试框架

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


9.3.2 JVM-Sandbox-Repeater录制回放工具

9.3.3 接口重构与DIFF测试

Twitter diffy diff测试算法

9.3.4 流量回放

GoRplay技术架构

十、测试环境搭建

10.1 被测系统UAT(Application Under Test)

10.2 常见的被测系统类型

  • UI:Web、APP、IOT
  • Service:
    • RESTful:sprint boot
    • webservice
    • rpc:dubbo pb
  • code:SDK lib

10.3 部署方法

10.3.1 打包部署:apk、APP、ipa、jar、war

  • 打包部署:
    • Android:Gradle
    • iOS:XCode、XCodeBuild
    • 自动化构建工具
    • Web:NodeJS npm
    • Service:Maven Gradle
  • 打包命令:
# web
npm run build

# app
gradlew tasks
gradlew assembleDebug
gradlew assembleRelease

# spring boot
mvn clean package

image

10.3.2 脚本部署:自动化脚本与自动化平台

10.3.3 容器部署:基于容器镜像Docker K8S