2020-08-06 测试工程师(全栈技术进阶与实践)

简介

《测试工程师全栈技术进阶与实践》是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.通过重构保证最新叫法代码的优雅和简洁

打蛇打七寸--精准测试

  • 借用一定的手段,通过辅助算法对传统软件测试过程进行可视化,分析及优化的过程,建立一套测试分析系统;

  • 传统软件测试的主要短板

  • 测试的维护成本日益升高

  • 测试过程低效

  • 缺乏有效的回归用例选取机制

  • 测试结果可信度不高

  • 无论是白盒测试还是黑盒测试技术都有局限性

  • 核心思想

    1. 对传统测试的补充
    1. 采用黑盒测试和白盒测试相结合的模式
    1. 数据可信度高
  • 系统自动录入和管理,人工无法直接修改数据

  • 4.精准测试的过程不直接面对产品代码

  • 基于代码覆盖率的统计

  • 5.精准测试与平台无关,多维度的测试分析算法系统

  • 具体方法

    1. 软件精准测试示波器
  • 2.测试用例和被测产品代码的双向追溯

  • 3.智能回归测试用例选取算法

  • 4.测试用例聚类分析

安全第一--渗透测试

  • 定义

  • 专业人员模拟黑客,从系统可能存在漏洞的位置进行攻击测试,在黑客入侵前,找到隐藏的安全漏洞,从而达到保护系统安全的目的;

  • 常用方法

  • 针对性的测试

  • 外部测试

  • 内部测试

  • 盲测

  • 双盲测试

  • 步骤

    1. 规划和侦查
    1. 安全扫描
    1. 获取访问权限
    1. 维持访问权限
  • 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服务器和返厦代理服务器的网站架构

  • 引入分布式文件系统和分布式数据库系统的网站架构

  • 基于业务拆分和消息队列的网站架构

  • 基于分布式服务的网站架构

  • 微服务架构

  • 下一代微服务架构--服务网格

网站的高性能架构设计

  • 前端的高性能架构

  • 后端服务器的高性能架构

网站的可收缩行架构设计

  • 分层的可收缩性

  • 缓存集群的可收缩性

  • 数据库的可收缩性

网站的可扩展性架构

  • 事件驱动架构与消息队列

  • 引入消息队列后的测试关注点


思维导图方式如下:


测试工程师(全栈技术进阶与实践).png
©著作权归作者所有,转载或内容合作请联系作者
  • 序言:七十年代末,一起剥皮案震惊了整个滨河市,随后出现的几起案子,更是在滨河造成了极大的恐慌,老刑警刘岩,带你破解...
    沈念sama阅读 206,839评论 6 482
  • 序言:滨河连续发生了三起死亡事件,死亡现场离奇诡异,居然都是意外死亡,警方通过查阅死者的电脑和手机,发现死者居然都...
    沈念sama阅读 88,543评论 2 382
  • 文/潘晓璐 我一进店门,熙熙楼的掌柜王于贵愁眉苦脸地迎上来,“玉大人,你说我怎么就摊上这事。” “怎么了?”我有些...
    开封第一讲书人阅读 153,116评论 0 344
  • 文/不坏的土叔 我叫张陵,是天一观的道长。 经常有香客问我,道长,这世上最难降的妖魔是什么? 我笑而不...
    开封第一讲书人阅读 55,371评论 1 279
  • 正文 为了忘掉前任,我火速办了婚礼,结果婚礼上,老公的妹妹穿的比我还像新娘。我一直安慰自己,他们只是感情好,可当我...
    茶点故事阅读 64,384评论 5 374
  • 文/花漫 我一把揭开白布。 她就那样静静地躺着,像睡着了一般。 火红的嫁衣衬着肌肤如雪。 梳的纹丝不乱的头发上,一...
    开封第一讲书人阅读 49,111评论 1 285
  • 那天,我揣着相机与录音,去河边找鬼。 笑死,一个胖子当着我的面吹牛,可吹牛的内容都是我干的。 我是一名探鬼主播,决...
    沈念sama阅读 38,416评论 3 400
  • 文/苍兰香墨 我猛地睁开眼,长吁一口气:“原来是场噩梦啊……” “哼!你这毒妇竟也来了?” 一声冷哼从身侧响起,我...
    开封第一讲书人阅读 37,053评论 0 259
  • 序言:老挝万荣一对情侣失踪,失踪者是张志新(化名)和其女友刘颖,没想到半个月后,有当地人在树林里发现了一具尸体,经...
    沈念sama阅读 43,558评论 1 300
  • 正文 独居荒郊野岭守林人离奇死亡,尸身上长有42处带血的脓包…… 初始之章·张勋 以下内容为张勋视角 年9月15日...
    茶点故事阅读 36,007评论 2 325
  • 正文 我和宋清朗相恋三年,在试婚纱的时候发现自己被绿了。 大学时的朋友给我发了我未婚夫和他白月光在一起吃饭的照片。...
    茶点故事阅读 38,117评论 1 334
  • 序言:一个原本活蹦乱跳的男人离奇死亡,死状恐怖,灵堂内的尸体忽然破棺而出,到底是诈尸还是另有隐情,我是刑警宁泽,带...
    沈念sama阅读 33,756评论 4 324
  • 正文 年R本政府宣布,位于F岛的核电站,受9级特大地震影响,放射性物质发生泄漏。R本人自食恶果不足惜,却给世界环境...
    茶点故事阅读 39,324评论 3 307
  • 文/蒙蒙 一、第九天 我趴在偏房一处隐蔽的房顶上张望。 院中可真热闹,春花似锦、人声如沸。这庄子的主人今日做“春日...
    开封第一讲书人阅读 30,315评论 0 19
  • 文/苍兰香墨 我抬头看了看天上的太阳。三九已至,却和暖如春,着一层夹袄步出监牢的瞬间,已是汗流浃背。 一阵脚步声响...
    开封第一讲书人阅读 31,539评论 1 262
  • 我被黑心中介骗来泰国打工, 没想到刚下飞机就差点儿被人妖公主榨干…… 1. 我叫王不留,地道东北人。 一个月前我还...
    沈念sama阅读 45,578评论 2 355
  • 正文 我出身青楼,却偏偏与公主长得像,于是被迫代替她去往敌国和亲。 传闻我的和亲对象是个残疾皇子,可洞房花烛夜当晚...
    茶点故事阅读 42,877评论 2 345