目录:
- 被测系统架构与数据流分析
- 开源项目 LiteMall 系统架构:
- 开源项目 Mall 的系统架构:
- 如何快速了解一家公司的架构
- 统一建模语言 UML
- 推荐工具
- 梳理业务流程:
- 使用思维导图分析功能点:
- 使用时序图分析数据流:
- 使用活动图分析测试用例:
- 测试用例设计总结
- 测试体系与测试方案设计
- 了解被测系统架构
- 智能家居技术架构:
- 阿里云经典业务架构:
- 阿里云物联网平台技术架构:
- 企业服务钉钉技术架构:
- 企业服务飞书技术架构:
- 电子商城 Mall 开源项目技术架构:
- 经典技术架构:
- 腾讯与阿里的质量保证服务参考:
- 测试开发技术体系:
- 测试能力架构图:
- 被测需求理解
- 需求文档
- 需求评审
- 需求分析
- 常用测试策略与测试手段
- 测试策略概念
- 测试策略的关注重点
- 测试手段
- 测试策略模版:
- bug定位方法
- 常见 Bug 分类:
- 为什么需要掌握 Bug 定位
- Bug 展现层:
- 技术架构层次
- MVC 三层分析方法
- View 层常用分析方法
- Controller 层常用分析方法
- Model 层常用分析方法
- Web Bug分析方法
- Web UI View 层 Bug 分析方法
- Web Controller 层分析方法
- Web Model 层分析方法-分析数据传递方式与结构
- App Bug 分析方法
- App View 层 Bug 分析:
- App Controller 层分析
- App Model 层分析方法
- Andorid Profiler 网络分析
- 使用代理工具分析
- 网络协议层分析
- 性能Bug分析方法:
- H5 性能分析方法:
- 利用 Chrome 分析 Web 性能
- 分析性能瓶颈 使用 Profile 进行代码剖析
- 代码覆盖率分析方法
- 总结
- 分层测试策略
- 分层测试策略的初衷 质量保证
- 分层测试策略的初衷 效率提升
- 测试金字塔
- UI 组件的分层测试
- 金字塔模型与沙漏模型:
- 微服务测试模型
- 微服务测试策略
- 自动化测试策略
- 用户端测试体系:
- 工具体系参考:
- 智能遍历工具:
- 稳定性测试体系案例:
- 服务端测试体系
- 后端链路调用架构图
- 使用 Mock 技术解耦与提高测试覆盖
- 接口测试框架:
- 测试用例自动生成技术例子 Swagger
- JVM-Sandbox-Repeater 录制回放工具:
- 接口重构与 diff 测试
- 流量回放
- 更多质量保证
- 自动化测试策略总结
- 测试环境搭建
- 被测系统 AUT(Application Under Test)
- 常见的被测系统类型
- 部署方法
- 打包部署
- 打包命令
- 自动化脚本部署
- 容器部署
1.被测系统架构与数据流分析
开源项目 LiteMall 系统架构:
- 角色与数据
- 用户产品
- 前端技术栈
- 后端技术栈
- 数据存储
开源项目 Mall 的系统架构:
- 角色与数据
- 用户产品
- 前端技术栈
- 后端技术栈
- 服务治理技术栈
- 监控技术栈
- 大数据处理技术栈
- 数据存储
- 持续集成/持续交付/DevOps
- …
如何快速了解一家公司的架构
- 业务架构
- 领域模型:角色、行为、数据
- 业务流程:角色之间的集成关系
- 系统架构:
- 架构角色与技术栈:
- 网关:apache/nginx/f5/
- 应用开发:spring boot/spring cloud/
- 通讯协议:dubbo/http/pb
- 数据处理:hadoop/spark/flink
- 数据存储:redis/mysql/oracle/redis/es
- 文档存储:mongodb/hbase/neo4j
- 部署架构:架构角色之间的集成关系
- 架构角色与技术栈:
统一建模语言 UML
- 用例图:商业模式、业务角色
- 时序图:业务流程、调用关系
- 部署图:系统架构与集成关系
- 活动图:业务逻辑分析
推荐工具
- plantuml
- yed
- draw.io
- processon
- visio
梳理业务流程:
@startuml
skin rose
scale 800 height
left to right direction
actor User as user
actor Admin as admin
package 商品 {usecase "发布商品"usecase "浏览商品"usecase "购买商品"usecase "下架商品"
}package 订单 {usecase "结算订单"usecase "查询订单"usecase "退款"usecase "管理订单"
}
admin -up-> 发布商品
admin -up-> 下架商品
admin -up-> 管理订单
user --> 浏览商品
user --> 购买商品
user --> 结算订单user --> 结算订单
user --> 查询订单
user --> 退款
@enduml
使用思维导图分析功能点:
@startmindmap
skin rose
caption figure 1
title My super title* <&flag>Debian
** <&globe>Ubuntu
*** Linux Mint
*** Kubuntu
*** Lubuntu
*** KDE Neon
** <&graph>LMDE
** <&pulse>SolydXK
** <&people>SteamOS
** <&star>Raspbian with a very long name
*** <s>Raspmbc</s> => OSMC
*** <s>Raspyfi</s> => Volumioheader
My super header
endheadercenter footer My super footerlegend rightShortlegend
endlegend
@endmindmap
使用时序图分析数据流:
scale 800 height
skin rose
用户 -> 认证中心: 登录操作
认证中心 -> 缓存: 存放(key=token+ip,value=token)token用户 <- 认证中心 : 认证成功返回token
用户 -> 认证中心: 下次访问头部携带token认证
认证中心 <- 缓存: key=token+ip获取token
其他服务 <- 认证中心: 存在且校验成功则跳转到用户请求的其他服务
其他服务 -> 用户: 信息
使用活动图分析测试用例:
@startuml
skin rose
scale 1000 height
start
repeat:Test something;if (Something went wrong?) then (no)#palegreen:OK;breakendif->NOK;:Alert "Error with long text";
repeat while (Something went wrong with long text?) is (yes) not (no)
->//merged step//;
:Alert "Success";
stop
@enduml
测试用例设计总结
- 使用用例图分析角色与资源
- 使用思维导图分析功能点
- 使用时序图分析数据流
- 使用活动图分析业务逻辑
2.测试体系与测试方案设计
了解被测系统架构
- 业务架构:业务模型分析
- 技术架构:技术组件、通讯协议分析
- 数据架构:数据模型、数据存储引擎分析
智能家居技术架构:
阿里云经典业务架构:
阿里云物联网平台技术架构:
企业服务钉钉技术架构:
企业服务飞书技术架构:
电子商城 Mall 开源项目技术架构:
经典技术架构:
- 网关产品 Nginx Apache Httpd
- Web 应用开发 Vue 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
腾讯与阿里的质量保证服务参考:
阿里云效测试能力与架构:
腾讯 WeTest 测试能力全景图:
测试开发技术体系:
- 用户端测试
- Web/App 测试
- Web/App 自动化测试
- 用户端专项测试
- 用户端安全测试
- 服务端测试
- 接口协议与 Mock
- 接口自动化测试
- 服务端性能测试
- 服务端安全测试
- 持续交付
- 容器技术 Docker
- 自动化系统 Jenkins
- 持续集成
- 持续交付
- 测试开发
- 持续部署 DevOps
- 测试框架 测试平台
- 测试左移 精准测试
- 测试右移 质量监控
测试能力架构图:
3.被测需求理解
需求文档
- 查看需求需求文档范例
- 模拟需求宣讲
- 产品需求文档范例:https://docs.qq.com/doc/DV2ZMWUxFWE9XaEVk
需求评审
需求分析
- 明确测试范围
- 明确功能点
- 明确业务流程
- 明确输出结果
- 分析异常流程
- 预估测试需要的时间和资源
4.常用测试策略与测试手段
测试策略概念
在特定环境约束之下,描述软件开发周期中关于测试原则、方法、方式的纲要,并阐述了它们之间如何配合,以高效地减少缺陷、提升质量。
测试策略的关注重点
- 测试的目标是什么?
- 测试可能存在的风险是什么?
- 测试的对象和范围是什么?
- 如何安排各种测试活动?
- 如何评价测试的效果?
测试手段
- 黑盒测试
- 白盒测试
- 动态测试
- 静态测试
- 手工测试
- 自动化测试
测试策略模版:
https://docs.qq.com/doc/DV0Z6VEZHSUlwTXhC
5.bug定位方法
常见 Bug 分类:
维度 | 介绍 |
---|---|
功能 | 业务流程是否正确 |
性能 | 业务流程是否顺畅 |
安全 | 是否符合安全标准与规范 |
专项质量 | 用户体验 UX 兼容性 稳定性 可靠性 |
为什么需要掌握 Bug 定位
- 提交 Bug 时候追加更多有用信息,方便研发更快的解决问题
- 分析 Bug 形成原因,进行溯源并建立特征进行批量追踪
Bug 展现层:
- 条件:测试数据
- 过程:测试步骤
- 结果:测试结果
技术架构层次
- 视图层 View:
- Web UI html css
- App activity view
- 控制器层 Controller:
- Web:chrome、devtool
- App:dalvik art objectc-runtime
- 模型层 Model:
- 模型的传递方式 http tcp rpc 串口
- 模型的形式 json xml binary
- 模型定义 schema
MVC 三层分析方法
- View 层:运行平台、应用调试机制、链路分析
- Controller 层:运行平台、应用调试机制、链路分析
- Model 层:运行平台、应用调试机制、链路分析
View 层常用分析方法
- UI 人工测试 自动化测试
- UE 人工测试 自动化测试
- UI Diff 自动化分析
Controller 层常用分析方法
- 运行平台日志:log
- 应用调试日志:debug trace hook profile
Model 层常用分析方法
- 运行平台 log
- app 调试机制
- 链路分析:代理抓包 嗅探抓包
Web Bug分析方法
Web UI View 层 Bug 分析方法
- 主要依赖于 html css js
- 可以使用 chrome 开发者工具 elements 与 style
Web Controller 层分析方法
- console 可以了解 js 的输出与报错信息
- source 模块可以对 js 进行 debug
Web Model 层分析方法-分析数据传递方式与结构
- 运行平台 log
- chrome network
- 链路分析
- 代理 proxy: fiddler charles mitmproxy
- 网络层协议 network: tcpdump wireshark
App Bug 分析方法
App View 层 Bug 分析:
- UI 界面交互
- UX/UE 用户体验
- UI Diff:uiautomator dump
App Controller 层分析
通过 logcat 分析 app runtime 日志:
App Model 层分析方法
- 运行平台 log
- 应用:应用日志
- 链路分析:
- 代理抓包:charles fiddler mitmproxy
- 嗅探抓包:wireshark tcpdump
Andorid Profiler 网络分析
使用代理工具分析
网络协议层分析
性能Bug分析方法:
H5 性能分析方法:
利用 Chrome 分析 Web 性能
分析性能瓶颈 使用 Profile 进行代码剖析
代码覆盖率分析方法
总结
- 明确 Bug 问题的现象与复现步骤
- 分层分析关键过程的数据与问题特征
- 积累 Bug 特征与问题根源特征,丰富测试经验,提高 Bug 发现的能力
6.分层测试策略
分层测试策略的初衷 质量保证
- 需求分析
- 测试标准确立
- 测试用例 review
- 界面覆盖率
- 接口覆盖率
- 代码覆盖率
分层测试策略的初衷 效率提升
- 人工测试:招人 加人 培训,无论横向扩容还是纵向扩容,成本都很大
- 自动化测试:自动化测试 自动遍历测试 录制回放测试
- 尽早测试尽快反馈:单元测试 集成测试
- 流水线:持续集成 持续交付 DevOps
测试金字塔
UI 组件的分层测试
金字塔模型与沙漏模型:
微服务测试模型
- Resources 通过特定协议暴露能力
- Service 负责领域模型的协作
- Domain 包含行为和数据的领域对象模型
- Repositories 作用于域实体的集合,并且通常是持久性支持的
- Gateway 与远程服务进行通讯
- Data Mappers 模型的序列化方案
微服务测试策略
- 单元测试 检验应用程序中最小的可测试软件,以确定它们的行为是否符合预期
- 集成测试 验证组件之间的通信路径和交互以检测接口缺陷
- 组件测试 将运行软件的范围限制在被测系统的一部分,通过内部代码接口操纵系统,并使用测试替身将被测代码与其他组件隔离开来
- 端到端测试 : 验证系统是否满足外部要求并实现其目标,从头到尾测试整个系统
7.自动化测试策略
用户端测试体系:
- 研发单元测试:JUnit、Robolectric 不依赖真机或者模拟器
- 集成测试:Espresso 单应用快速集成测试
- 验收测试:Appium、ATX/AirTest、Calabash 跨应用测试
工具体系参考:
智能遍历工具:
- 百度 SmartMonkey
- 腾讯 NewMonkey
- 头条 fastbot
- 支付宝 Macaca 的 NoSmoke
- Android Monkey、Android App Crawler
- OWASP-ZAP Web 漏洞自动探测
稳定性测试体系案例:
- Fastbot 已广泛应用于字节客户端类产品的稳定性测试与兼容性测试。每日启动任务数超过 1 万次,每月平均发现 5 万个以上的崩溃。借助 Fastbot 的能力,我们在发版前就可以修复大部分的 crash,确保线上用户的使用体验。同时,Fastbot 在整个 DevOps 流程扮演重要的基础服务角色 {style=“width: 100%”}
字节跳动:
服务端测试体系
- 手工测试
- 自动化测试
- DIFF 测试、流量回放
- Mock
后端链路调用架构图
淘宝
使用 Mock 技术解耦与提高测试覆盖
接口测试框架:
- Python:Requests
- Java:RestAssured
- 简约的接口测试 DSL
- 支持结构化解析 XML JSON 等
测试用例自动生成技术例子 Swagger
JVM-Sandbox-Repeater 录制回放工具:
接口重构与 diff 测试
Twitter diffy diff 测试算法
流量回放
GoRplay 技术架构
更多质量保证
- 性能
- 安全
- 兼容性
- 健壮性
- 易用性
自动化测试策略总结
- 分层测试策略
- 系统测试
- 集成测试
- 单元测试
- 测试手段
- 手工测试
- 自动化测试
- 测试框架
8.测试环境搭建
被测系统 AUT(Application Under Test)
常见的被测系统类型
- UI:Web App IOT
- Service:
- RESTful:sprint boot
- webservice
- rpc:dubbo pb
- code: SDK lib
部署方法
- 打包部署:apk app ipa jar war
- 脚本部署:自动化脚本与自动化平台
- 容器部署:基于容器镜像 Docker K8S
打包部署
- 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
自动化脚本部署
- 通过 bash python 等脚本实现自动化的构建与部署
- 通过持续集成平台比如 jenkins 完成流程管理
容器部署
- 自动化构建 bash
- 容器构建 docker
- 容器编排 k8s
- 持续集成 jenkins