一、快速了解一家公司的架构
业务架构
- 领域模型:角色、行为、数据;
- 业务流程:角色之间的继承关系。
系统架构
- 架构角色与技术栈:
- 网关: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 梳理业务流程
2.3 使用思维导图分析功能点
2.4 使用时序图分析数据流
2.5 使用活动图分析测试用例
三、了解被测系统架构
- 业务架构:业务模型分析
- 技术架构:技术组件、通讯协议分析
- 数据架构:数据模型、数据存储引擎分析
智能家居技术架构:
阿里云经典业务架构:
阿里云物联网平台技术架构:
企业服务钉钉技术架构:
企业服务飞书技术架构:
电子商城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 需求分析
- 明确测试范围;
- 明确功能点;
- 明确业务流程;
- 明确输出结果;
- 分析异常流程;
- 预估测试需要的时间和资源。
六、常用测试策略与测试手段
6.1 测试策略
6.1.1 概念
- 在特定环境约束之下,描述软件开发周期中关于测试原则、方法、方式的刚要,并阐述了它们之间如何配合,以高效地减少缺陷、提升质量。
6.1.2 关注重点
- 测试的目标是什么?
- 测试可能存在的风险是什么?
- 测试的对象和范围是什么?
- 如何安排各种测试活动?
- 如何评价测试的效果?
6.2 测试手段
- 黑盒测试
- 白盒测试
- 动态测试
- 静态测试
- 手工测试
- 自动化测试
- 测试策略模版:测试策略
七、Bug 定位方法
7.1 常见Bug分类
维度 | 介绍 |
---|---|
功能 | 业务流程是否正确 |
性能 | 业务流程是否顺畅 |
安全 | 是否符合安全标准与规范 |
专项质量 | 用户体验UX兼容性、稳定性、可靠性 |
7.2 Bug 定位的意义
- 提交Bug时追加更多有用信息,方便研发更快的解决问题;
- 分析Bug形成原因,进行溯源并建立特征,进行批量追踪。
7.3 Bug展现层
- 条件:测试数据
- 过程:测试步骤
- 结果:测试结果
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
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分析方法
- 主要依赖于HTML、CSS、JS;
- 可以使用Chrome开发者工具elements与style。
7.5.2 Web Controller 层分析方法
- Console可 以了解JS的输出与报错信息;
- Source 模块可以对JS进行Debug。
7.5.3 Web Model 层分析方法-分析数据传递方式与结构
- 运行平台Bug:
- Chrome-network
- 链路分析:
- 代理proxy:Fiddler、Charles、Mitmproxy
- 网络层协议network:tcpdump、Wireshark
7.6 APP Bug 分析
7.6.1 APP View 层Bug分析
- UI界面交互
- UX/UE 用户体验
- UI Diff:uiautomator dump
7.6.2 APP Controller 层Bug分析
- 通过logcat分析APP runtime日志
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步骤
- 明确Bug问题的现象与复现步骤;
- 分层分析关键过程的数据与问题特征;
- 积累Bug特征与问题根源特征,丰富测试经验,提高发现Bug的能力。
八、分层测试策略
8.1 分层测试策略的初衷
8.1.1 质量保证
- 需求分析
- 测试标准确立
- 测试用例review
- 界面覆盖率
- 接口覆盖率
- 代码覆盖率
8.1.2 效率提升
- 人工测试:招人、加人、培训,无论横向扩容还是纵向扩容,成本都很大;
- 自动化测试:自动化测试、自动遍历测试、录制回放测试;
- 尽早测试尽快反馈:单元测试、集成测试;
- 流水线:持续集成、持续交付DevOps。
8.2 测试金字塔(马丁福勒)
8.3 UI组件的分层测试(Google Android测试体系)
8.4 金字塔模型与沙漏模型
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 接口测试框架
- Python:Requests
- Java:RestAssured
- 简约的接口测试DSL
- 支持结构化解析XML、JSON等
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
10.3.2 脚本部署:自动化脚本与自动化平台
- 自动化脚本部署:
- 通过bash python等脚本实现自动化的构建与部署;
- 通过持续集成平台,比如Jenkins完成流程管理。
10.3.3 容器部署:基于容器镜像Docker K8S
- 自动化构建bash
- 容器构建docker
- 容器编排K8S
- 持续集成Jenkins