简介
《测试工程师全栈技术进阶与实践》是2020年4月人民邮电出版社出版的图书,作者是茹炳晟.
本书系统地梳理软件测试知识体系,深入讲解自动化测试、移动应用测试、性能测试和测试基础架构设计的核心原理。通过一系列行业实践案例的讲解,呈现一副包括GUI/API自动化测试、移动应用测试、测试数据平台、测试基础架构、性能/压力测试、代码级测试、测试新技术和大型网站架构等在内的软件测试技术全景图。
读后笔记
因个人对软件测试了解的广度不够,通过这本书可以比较系统的拓展知识面。笔记主要分成2种方式: markdown 和xmind
软件测试的基础知识
软件测试工程师
核心竞争力
传统测试工程师
测试开发工程师
掌握非测试知识
迷你版的系统架构师
网络架构的核心知识
容器技术
云计算技术
DevOps思想
前端开发技术
软件测试
“好的”测试用例
定义:一个完备的集合,能够覆盖所有的等价类和边界值的集合
特征
整体完备性
等价类划分的准确性
等价类集合的完备性
设计方法
等价类
错误推测法, “探索式测试方法”
经验
具体实践:建立常见缺陷知识库,在用例设计过程中,使用缺陷知识库作为检查表(checklist),帮助优化和补充测试用例的设计。
自动化测试的原始驱动力和使用场景
软件开发各个阶段的自动化测试
单元测试的自动化技术
代码级集成测试的自动化技术
Web Service 测试的自动化技术
GUI测试的自动化技术
测试覆盖率
需求覆盖
代码覆盖
高效的撰写软件缺陷报告
缺陷报告
标题,概述,影响,环境配置,前置条件,重现步骤,期望结果和实际结果,优先级和严重程度,变通方案
根原因分析
以始为终,做好软件测试计划
测试范围
测试策略
测试进度
测试风险把控
互联网产品的测试策略设计(单元测试,API测试,GUI测试)
背景:研发流程的不同决定了测试策略的不同
传统软件测试策略:金字塔模型(重量级单元测试> API测试> GUIC测试)
互联网产品的测试策略:棱形模型(重量级 API测试,轻量级GUI/单元测试)
GUI 自动化测试的精要
从 0 到1: GUI自动化测试初探
例子:构建一个Selenium自动化测试用例
Selenium的实现原理
效率为王:
测试脚本和测试数据的解耦
页面对象模型
更接近业务的抽象:让自动化更好的描述业务
测试数据
基于API调用创建测试数据
基于数据库操作创建
综合运用API调用和数据库操作创建
实时创建
事先创建
实时和事先创建的互补
GUI测试还能这么“玩”
自动生成页面对象
自动生成GUI测试数据
无头浏览器介绍
Headless chrome与Puppeteer的使用
精益求精
提高GUI 测试稳定性的关键技术
非预计的弹出对话框
被测试系统的A/B测试
随机的页面延迟造成控件识别失败
测试报告
早期的基于视频的GUI测试报告
开源GUI测试框架的测试报告实现思想
全球化的GUI测试报告的创新设计
案例:大型全球化电商网站
前端模块的划分
GUI自动化测试策略设计
前端组件测试
前端模块的测试
端到端的测试
GUI自动化测试脚本的管理
如:前端模块A(模块级测试用例,业务流程脚本,页面对象)
移动应用测试技术
种类
Web应用
原生应用
混合应用
测试方法概论
Web应用的测试
原生应用的测试
混合应用的测试
移动应用的测试难点
专项测试
安装,卸载
特殊操作测试
交互测试
通知测试
交叉事件测试
兼容性测试
流量测试
耗电量测试
弱网络测试
边界测试
测试工具: Appium(最主要依赖java,Node,js,Xcode, Carthage,Android SDK,adb)
-
Appium的实现原理(C/S架构)
Appium客户端通过多语言支持的第三方库向服务端发起请求,基于Node.js的Appium服务端会接受客户端的请求,接着和iOS或者Android平台上的代理工具打交道,代理工具在运行过程中不断接收请求,并根据WebDriver协议解析出要执行的操作,最后调用iOS或者Android平台的原生测试框架完成测试
服务端
Mac和window版本
客户端:测试代码运行端
设备端
Appium Inspector的使用
用途:协助对界面元素进行定位的工具
企业级移动应用测试框架的设计思想和实践
-
设计思想:面向对象
重要部分:PageObject, MobileElement, WebDriver,Reporter, TestPlan和Flow
实践:接口对不同的平台要统一封装;完善的日志(时间戳,类型,关键信息);测试报告
移动应用测试框架的实现和实践
TestPlan层:提供Assertion和log等工具,用户可以用这2个工具验证测试和输出日志, Reporter会在筛选测试的步骤,验证结果和日志分析后渲染测试报告
Element层:封装各种不同的元素,供TestPlan调用
View层:封装页面对象,将一对端的石头封装成页面,方便测试脚本的编写。
BasicPage:isPageLoaded(),pinch(),swipe(),waitForElement, captureSnapshot(),,,
搭建企业级移动测试私有云的实践
Selenium Grid基本架构: hub+node
Open STF:基于nodejs编写的远程管理android智能设备的工具
移动运用云测试服务介绍
Sauce Labs
Testin
MTC:mobile testing center
百度提供:云测试,云调试,云众测,线上监控,测试工具和移动应用质量标准等服务
API自动化测试技术
从0到1:API测试初探
复杂场景的API测试
API自动化测试框架的技术演进和创新
微服务模式下的API测试
单体架构
微服务架构
微服务架构下的挑战测试
基于消费者契约的API测试
微服务的依赖解耦和模拟服务
代码级软件测试基础和进阶
代码级测试的基本理念和方法
常见方法
静态方法
人工,自动
动态测试方法
人工,自动
静态扫码工具:Sonar
单元测试框架TestNG
基本用法
高级用法
代码覆盖率工具JaCoCo
性能测试
性能测试的基础
软件性能和性能指标
终端用户眼中的软件性能
系统运维人员眼中的软件性能
软件设计开发人员眼中的软件性能
性能测试人员眼中的软件性能
指标
并发用户数
已上线:系统日志分析法获取用户行为
未上线新系统:行业中类似系统的统计信息建立用户行为
响应时间:数据网络传输时间+Web服务器处理时间+数据库服务器处理时间
前端响应时间
系统响应时间
系统吞吐量:软件系统负载的承受能力的指标
常见的7种性能测试
后端性能测试:CPU占用率,内存使用率,磁盘I/O和网络I/O
前端性能测试:减少HTTP请求次数;减少DNS查询次数;避免页面跳转;使用内容分发网络;通过Gzip压缩传输文件
代码级性能测试
压力测试
配置测试:宿主操作系统,应用服务器,数据库,java虚拟机,网络环境,。。。。。
并发测试
可靠性测试
4大应用领域:能力验证,能力规划,性能调优,缺陷发现
性能测试实践
前端性能测试工具:WebPagetest
实际中需要解决2个问题
1.所有的操作都是基于界面,不利于CI/CD流水线
解决方法:webpagetest API wrapper
2.被测网站部署在公司的内部网络,处于外网webpagetest无法完成测试
解决方法:webpagetest私有化部署
后端性能测试主流商业工具:LoadRunner
对比jmeter:如何支持海量并发,实现更好的负载控制
-
全链路压测
基于真实的身材环境来模拟海量的并发用户请求和数据,对整个业务链路进行压力测试,试图找到所以潜在性能瓶颈并持续优化的实践
后端性能测试主流开源工具:JMeter
测试案例与经验
性能基准测试
同一事务的响应时间变慢
系统资源的占用率变大
网络带宽的使用量变高
-
稳定性测试
长时间的模拟被测系统的负载7*24
系统资源的所以监控指标不存在“不可逆转”的上升趋势
事务的响应时间不存在逐渐变慢的趋势
事务的错误率不超过1%
并发测试
容量规划测试
准备测试数据
基本方法
基于GUI操作生成测试数据
通过API调用生成测试数据
通过数据库操作生成测试数据
综合运用API和数据库生成测试数据
创建时机
实时创建方法
事先创建方法
综合运用实时和事先创建方法
统一数据测试平台
软件测试新技术
发挥人的潜能--探索性测试:即兴发挥,快速实验,随时调整
- 基于功能需求和非功能需求进行扩展和延伸
测试先行-- TDD
开发人员实现功能代码前,先设计好测试用例的代码,然后根据测试用例的代码编写产品的功能代码,最终目的是让开发前设计的测试用例代码能够顺利执行通过;
优势
保证开发的功能一定是符合实际需求
更加灵活的迭代方式
保证系统的可扩展性
更好的质量保证
测试用例即文档
实施过程
对需要实现的新功能添加一批测试
运行所有测试,看看新添加的测试是否失败
编写实现软件新功能的代码
再次运行所有的测试,看是否有测试失败
重构代码
重复以上步骤直到所有的测试通过
进阶
1.控制TDD测试用例的粒度
测试用例分解成更小的粒度任务列表,考虑到用户的使用场景,保证每一个任务列表都是最新的功能模块
2.保证代码的整洁和高效
3.通过重构保证最新叫法代码的优雅和简洁
打蛇打七寸--精准测试
借用一定的手段,通过辅助算法对传统软件测试过程进行可视化,分析及优化的过程,建立一套测试分析系统;
传统软件测试的主要短板
测试的维护成本日益升高
测试过程低效
缺乏有效的回归用例选取机制
测试结果可信度不高
无论是白盒测试还是黑盒测试技术都有局限性
核心思想
- 对传统测试的补充
- 采用黑盒测试和白盒测试相结合的模式
- 数据可信度高
系统自动录入和管理,人工无法直接修改数据
4.精准测试的过程不直接面对产品代码
基于代码覆盖率的统计
5.精准测试与平台无关,多维度的测试分析算法系统
具体方法
- 软件精准测试示波器
2.测试用例和被测产品代码的双向追溯
3.智能回归测试用例选取算法
4.测试用例聚类分析
安全第一--渗透测试
定义
专业人员模拟黑客,从系统可能存在漏洞的位置进行攻击测试,在黑客入侵前,找到隐藏的安全漏洞,从而达到保护系统安全的目的;
常用方法
针对性的测试
外部测试
内部测试
盲测
双盲测试
步骤
- 规划和侦查
- 安全扫描
- 获取访问权限
- 维持访问权限
5.入侵分析
常用工具
Nmap
Aircrack-ng
sqlmap
Wifiphisher
AppScan
用机器设计测试用例 -- 基于模型的测试(Model-Based-Testing, MBT)
原理:通过建立被测系统的设计模型,并结合不同的算法和策略来遍历改模型,从而生成测试用例
常见模型
有限状态机
状态图
UML
常见工具
BPM-X, fMBT, GraphWalker
人工智能在测试领域的应用
常见场景
应用TensorFlow通过软件界面截图寻找bug
利用K近邻算法协助失败测试用例的分析
利用模式识别算法来模糊定位GUI的元素
利用路径权重来自动生成测试用例
工具
Appvance IQ, Applitool, MABL, TestAI
测试人员的互联网架构核心知识
必要性
基于消息队列的分布式系统测试设计,清楚不同方案的优势和劣势
缓存的示例
架构知识的学习方法
大型网站的架构介绍
最简单的网站架构
应用和数据分离的网站架构
引入本地缓存和分布式缓存的网站架构
引入应用服务器集群的网站架构
引入主从分离的数据库
引入CDN服务器和返厦代理服务器的网站架构
引入分布式文件系统和分布式数据库系统的网站架构
基于业务拆分和消息队列的网站架构
基于分布式服务的网站架构
微服务架构
下一代微服务架构--服务网格
网站的高性能架构设计
前端的高性能架构
后端服务器的高性能架构
网站的可收缩行架构设计
分层的可收缩性
缓存集群的可收缩性
数据库的可收缩性
网站的可扩展性架构
事件驱动架构与消息队列
引入消息队列后的测试关注点
思维导图方式如下: