软件测试52讲 / 从小工到专家的实战心法
茹炳晟
eBay中国研发中心,测试基础架构技术主管
 
  • 课程目录
  • 课程介绍
  • 开篇词 | 从“小工”到“专家”,我的软件测试修炼之道

    我将以我从业这么多年的经验和教训为基础,为你系统梳理软件测试的知识体系,并为你总结了从测试“小工”到“专家”的“三步走”策略,助你成长为优秀的测试工程师。

  • 01 | 你真的懂测试吗?从“用户登录”测试谈起

    高质量的软件测试,用例设计不仅需要考虑明确的显式功能性需求,还要涉及兼容性、安全性和性能等一系列的非功能性需求。

  • 02 | 如何设计一个“好的”测试用例?

    对大多数的软件测试而言,综合使用等价类划分、边界值分析和错误推测这三大类方法就足够了。

  • 03 | 什么是单元测试?如何做好单元测试?

    单元测试,是对软件中的最小可测试单元,在与软件其他部分相隔离的情况下进行的代码级测试,可以在软件开发的早期以最小的成本保证局部代码的质量。

  • 04 | 为什么要做自动化测试?什么样的项目适合做自动化测试?

    自动化测试是一把“双刃剑”,你需要明确哪些场景可以开展自动化测试,而哪些场景下的测试并不适合自动化,才能最大限度地发挥自动化测试的优势。

  • 05 | 你知道软件开发各阶段都有哪些自动化测试技术吗?

    说到自动化测试时,你的第一反应很可能就是GUI自动化测试。然而,在软件研发生命周期的各个阶段都有自动化测试技术的存在,并且对提升测试效率有着至关重要的作用。

  • 06 | 你真的懂测试覆盖率吗?

    测试覆盖率包括需求覆盖率和代码覆盖率,但是需求覆盖率的统计方式不再适用于目前的敏捷开发实践,所以现在的“测试覆盖率”,更多的是指代码覆盖率。

  • 07 | 如何高效填写软件缺陷报告?

    缺陷报告是测试工程师与开发工程师交流沟通的重要桥梁,也是测试工程师日常工作的重要输出。好的缺陷报告绝对不是大量信息的堆叠,而是以高效的方式提供准确有用的信息。

  • 08 | 以终为始,如何才能做好测试计划?

    一份成功的测试计划,必须清楚地描述:测试范围、测试策略、测试资源、测试进度和测试风险预估,这五个最重要的方面。

  • 09 | 软件测试工程师的核心竞争力是什么?

    我把测试工程师按照工作内容,分为了功能测试工程师(即传统测试工程师)和测试开发工程师两类,分别给你分享了他们的核心竞争力。

  • 10 | 软件测试工程师需要掌握的非测试知识有哪些?

    软件测试工程师需要掌握非常多的非专业知识,主要包括:网站架构、容器技术、云计算技术、DevOps思维,以及前端开发技术等的核心知识以及实践。

  • 11 | 互联网产品的测试策略应该如何设计?

    传统软件通常采用金字塔模型的测试策略,而现今的互联网产品往往采用菱形模型,遵循“重量级API测试,轻量级GUI测试,轻量级单元测试”的原则。

  • 12 | 从0到1:你的第一个GUI自动化测试

    我基于Selenium 2.0,带你从0到1建立了一个GUI自动化测试用例。这个用例的实现很简单,但是只有真正理解了这个工具的原理,你才能真正用好它。

  • 13 | 效率为王:脚本与数据的解耦 + Page Object模型

    今天我就通过介绍GUI测试中两个非常重要的概念:测试脚本和数据的解耦,以及页面对象模型,带你看看如何优化这个测试用例。

  • 14 | 更接近业务的抽象:让自动化测试脚本更好地描述业务

    业务流程的核心思想是,从业务的维度来指导测试业务流程的封装,特别适用于组装面向终端用户的端到端(E2E)的系统功能测试场景。

  • 15 | 过不了的坎:聊聊GUI自动化过程中的测试数据

    实际项目中,要综合运用API调用和数据库操作来创建测试数据,并分而治之地采用On-the-fly和Out-of-box的方式,以寻求数据稳定和准备效率的平衡。

  • 16 | 脑洞大开:GUI测试还能这么玩(Page Code Gen + Data Gen + Headless)?

    我分别介绍了无头浏览器、页面对象自动生成,以及GUI测试数据自动生成,这三个GUI测试中比较有意思的知识点,包括它们的概念、应用场景等内容。

  • 17 | 精益求精:聊聊提高GUI测试稳定性的关键技术

    根据我的实践经验,我归纳了五种造成GUI自动化测试不稳定的主要因素,并给出了对应的解决思路。

  • 18 | 眼前一亮:带你玩转GUI自动化的测试报告

    开源GUI自动化测试框架的GUI测试报告往往需要自己来开发,主要使用了扩展Selenium原本的操作函数的方式以及Hook函数来实现。

  • 19 | 真实的战场:如何在大型项目中设计GUI自动化测试策略

    如果你所在的企业或者项目正在大规模开展GUI测试,并准备使用页面对象模型、业务流程封装等最佳实践,那么你很可能会遇到本文所描述的问题并迫切需要相应的解决办法。

  • 20 | 与时俱进:浅谈移动应用测试方法与思路

    在我看来无论是移动端测试还是PC端测试,都属于GUI测试的范畴,所以PC端很多基本的测试思路,也同样适用于移动端的GUI测试。

  • 21 | 移动测试神器:带你玩转Appium

    我以最新版本的Appium为例,手把手地带你搭建了iOS环境,以及Appium测试环境,并设计两个测试用例。

  • 22 | 从0到1:API测试怎么做?常用API测试工具简介

    API测试基本都可以分为三步,即准备测试数据、通过API测试工具发起对被测API的request、验证返回结果的response。

  • 23 | 知其然知其所以然:聊聊API自动化测试框架的前世今生

    对于API测试,我们不能仅仅停留在感性认识的层面,还需要熟悉并掌握这些测试方法,完成相应的API测试工作。

  • 24 | 紧跟时代步伐:微服务模式下API测试要怎么做?

    微服务架构下,API测试的最大挑战来自于庞大的测试用例数量,以及微服务之间的相互耦合。今天我将介绍基于消费者契约的方法,来帮你克服这两大难题。

  • 25 | 不破不立:掌握代码级测试的基本理念与方法

    代码错误,可以划分为“有特征”的错误和“无特征”的错误两大类。相应地,代码级测试的方法也可以分为静态方法和动态方法两大类。

  • 26 | 深入浅出之静态测试方法

    我将和你详细讨论静态测试方法,帮你理解研发流程上是如何保证代码质量,以及如何搭建自己的自动静态代码扫描方案,并应用到日常开发工作中去。

  • 27 | 深入浅出之动态测试方法

    由于自动动态方法并不能理解代码逻辑,所以仅仅被用于发现异常、崩溃和超时这类“有特征”的错误,而对于代码逻辑功能的测试,主要还是要依靠人工动态方法。

  • 28 | 带你一起解读不同视角的软件性能与性能指标

    目前,对软件性能最普遍的理解就是软件处理的及时性。但其实,从不同的系统类型,以及不同的视角去讨论软件性能,都会有所区别。

  • 29 | 聊聊性能测试的基本方法与应用领域

    我今天主要和你分享了七种常用的性能测试方法,以及性能测试的四种常见场景。

  • 30 | 工欲善其事必先利其器:后端性能测试工具原理与行业常用工具简介

    今天,我以问答的形式,和你分享了后端性能测试的理论,以及工具使用的问题。

  • 31 | 工欲善其事必先利其器:前端性能测试工具原理与行业常用工具简介

    今天,我使用WebPagetest测试了一个具体网站的前端性能。在解读这个测试报告的同时,我和你分享了几个重要的前端性能指标,以及如何提升这些指标。

  • 32-无实例无真相:基于LoadRunner实现企业级服务器端性能测试的实践(上)

    今天我和你讨论的主题是,如何基于LoadRunner实现企业级服务器端性能测试。

  • 33 | 无实例无真相:基于LoadRunner实现企业级服务器端性能测试的实践(下)

    今天接着上一篇文章,我和你分享了企业级后端性能测试的后四个阶段的内容,包括录制并增强虚拟用户脚本、创建并定义性能测试场景、执行性能测试场景,以及分析测试报告。

  • 34 | 站在巨人的肩膀:企业级实际性能测试案例与经验分享

    今天我挑选了最重要的四类性能测试方法(性能基准测试、稳定性测试、并发测试,以及容量规划测试),和你分享如何在实际项目中完成这些测试,确保软件的性能。

  • 35 | 如何准备测试数据?

    在实际项目中,业界往往会综合采用API和数据库的方式生成测试数据,即通过API调用生成基础数据,然后使用数据库的CRUD操作进一步生成符合特殊测试需求的数据。

  • 36 | 浅谈测试数据的痛点

    其实,在不同的时机创建测试数据,就是为了解决准备测试数据的不同痛点。那么,准备测试数据的痛点,都体现在哪些方面呢?

  • 37 | 测试数据的“银弹”- 统一测试数据平台(上)

    在1.0时代,准备测试数据最典型的方法就是,将测试数据准备的相关操作封装成数据准备函数。

  • 38 | 测试数据的“银弹”- 统一测试数据平台(下)

    我和你分享了测试数据准备2.0时代的Builder Pattern实践,以及3.0时代的统一测试数据平台。

  • 39 | 从小作坊到工厂:什么是Selenium Grid?如何搭建Selenium Grid?

    今天,我从测试基础架构的概念讲起,并和你分享了传统Selenium Grid 和基于Docker的Selenium Grid的搭建方法。

  • 40 | 从小工到专家:聊聊测试执行环境的架构设计(上)

    广义上讲,测试执行环境除了包括测试执行机以外,还包括测试执行机的维护、集群的容量规划、测试发起的控制、测试用例的组织等等。这也就是我要和你的测试基础架构的定义。

  • 41 | 从小工到专家:聊聊测试执行环境的架构设计(下)

    在今天这篇文章中,我从测试基础架构演进的视角,和你分享了测试基础架构发展的前世今生。

  • 42 | 实战:大型全球化电商的测试基础架构设计

    其实,大型全球化电商网站全局测试基础架构的设计思路,可以总结为“测试服务化”。

  • 43 | 发挥人的潜能:探索式测试

    通过今天这篇文章,我阐述了一个基本思想是:探索式测试是一种软件测试风格,而不是一种具体的软件测试技术。

  • 44 | 测试先行:测试驱动开发(TDD)

    TDD的核心思想便是在开发人员实现功能代码前,先设计好测试用例,编写测试代码,然后再针对新增的测试代码来编写产品的功能代码,最终目的是让新增的测试代码能够通过。

  • 45 | 打蛇打七寸:精准测试

    精准测试的核心思想是,借助一些高效的算法和工具,收集、可视化并且分析原生的测试数据,从而建立起一套测试分析系统。

  • 46 | 安全第一:渗透测试

    虽说现在对系统与软件安全采取的一些措施已经可以防止大部分的安全漏洞了,但却还不足以完全保证系统的安全性。这时,渗透测试便以其独立的“风姿”出现在了你我的视野里。

  • 47 | 用机器设计测试用例:基于模型的测试

    基于模型的测试(MBT)是一种基于被测系统的模型,由工具自动生成测试用例的软件测试技术。

  • 测试专栏特别放送 | 答疑解惑第一期

    特别选在专栏即将结束的节点上,我和编辑一起策划了这个“答疑解惑”系列,从已发布的文章,以及对应的留言中,精选出一些问题,为你解答。

  • 测试专栏特别放送 | 答疑解惑第二期

    今天我要分析的五个问题来自于第6~11篇这6篇文章,其中第9和第10篇文章中的两个问题被我合并为了一个问题,并且我会针对这个问题,再次为你简单梳理一条学习路径。

  • 48 | 优秀的测试工程师为什么要懂大型网站的架构设计?

    今天我通过消息队列和缓存两个实例给你讲解了测试工程师学习架构知识的重要性,并且从我个人的经验出发,提出了“由广度到深度”和“自上而下”的架构学习思路。

  • 49 | 深入浅出网站高性能架构设计

    今天,我以测试人员的视角,和你分享了网站高性能架构设计中,需要重点关注的点。

  • 50 | 深入浅出网站高可用架构设计

    在今天这篇文章中,我将影响网站高可用的因素归为了三类,并相应地给出了解决这三类问题的方案。

  • 51 | 深入浅出网站伸缩性架构设计

    网站的可伸缩性架构设计主要包含两个层面的含义,一个是指根据功能进行物理分离来实现伸缩,另一个是指物理分离后的单一功能通过增加或者减少硬件来实现伸缩。

  • 52 | 深入浅出网站可扩展性架构设计

    在今天这篇文章,也是这个专栏最后一篇正文中,我会再和你详细讨论网站的可扩展性(Extensibility)架构设计。

  • 测试专栏特别放送 | 答疑解惑第三期

    今天,我从GUI自动化测试系列中,根据目前GUI测试技术的应用情况,以及“你”在文章后留下的问题,我选择了五个问题,为你解答。

  • 测试专栏特别放送 | 答疑解惑第四期

    今天的“答疑解惑”文章,我将针对API自动化测试和代码级测试这两个系列6篇文章中的问题,和你展开分享。

  • 测试专栏特别放送 | 答疑解惑第五期

    今天的“答疑解惑”系列文章,我们一起来解决性能测试系列中7篇文章的问题。你可以通过下面对每篇文章的简单总结回顾一下文章内容,也可以点击链接回到对应的文章复习。

  • 测试专栏特别放送 | 答疑解惑第六期

    今天的“答疑解惑”系列文章,我们一起来解决测试数据准备和测试基础架构这两个系列8篇文章中的问题。

  • 测试专栏特别放送 | 答疑解惑第七期

    今天的“答疑解惑”系列文章,我们一起来复习并解决测试新技术、测试人员的互联网架构核心知识这最后两个系列的相关问题。

  • 测试专栏特别放送 | 浅谈全链路压测

    今天这篇文章,我和你分享了全链路压测的基本知识,以及在开展全链路压测的难点、对应的解决思路。

  • 结束语 | 不是结束,而是开始

    现在专栏已经进入了尾声,于我而言是一个创作过程的结束,但于你而言这只是开始。

  • 测一测 | 这些软件测试题目,你都掌握了吗?

    经过将近五个月、60篇文章的学习,相信你已经对软件测试的全貌有了一个大致的理解,而对某一种类型的测试,也有了更深入的理解。

专栏简介

软件测试,可以说是软件开发的最后一道防线,也是产品上线前最为重要的一个环节。

软件测试看似简单,但要把软件测试做到极致,却并非易事。师傅领进门后,你需要不断地用知识武装自己,才能跟随技术发展的趋势,成为一名优秀的测试人。走在测试路上,如果你也遇到了这些问题:

  1. 测试用例设计看似简单,却总是不够完备;

  2. 软件的复杂度和更新迭代速度超乎想象,你需要寻找更高效的学习路径;

  3. 自动化测试已成主流,但你的团队还停留在手工测试,困惑于怎么借助自动化测试工具提升团队效率;

  4. 大量的测试框架和工具,让你不知所措,不知如何选择最适合自己项目的框架和工具;

  5. 由Google等公司主导的“去QE,开发自己测试”的模式,让你不清楚自己未来职业该如何规划;

《软件测试52讲》专栏的目标就是帮你解决这些困惑。

在这个专栏里,茹炳晟将用通俗易懂的语言,以知其然知其所以然的思路,为你系统梳理软件测试的知识体系,深入讲解自动化测试、性能测试和测试架构设计的核心原理,助你从软件测试的“小工”进阶为“专家”。

同时,为了帮助你的测试方案落地,茹炳晟分享了一系列的行业最佳实践,这些实践案例也会为你构建一幅包括GUI/API自动化测试、测试数据平台、测试基础架构建设、性能/压力测试、代码级测试、测试新技术和大型网站架构等在内的软件测试技术全景视图。

茹炳晟,具有 16 年的软件测试开发经验,先后任职于eBay 中国研发中心、HP软件中国研发中心、阿尔卡特朗讯和Cisco中国研发中心。

茹炳晟精通软件全生命周期各个阶段的测试技术,并提倡“测试即服务”的理念。他曾负责建立全球大型电商网站的测试基础架构和和自动化测试方案,主持搭建持续集成测试生态体系和企业级测试基础架构,主持与参加过的测试项目几乎涵盖所有种类,包括嵌入式系统测试、金融平台单元测试、平台SDK测试、轨道交通安全软件测试、Web Service测试以及性能全链路压测等。

专栏模块

专栏共 52期,系统阐述了测试工程师必须具备的核心测试理念和技能,分为五大模块。

  • 软件测试基础篇,将系统地讲解软件测试的基本概念、主流的测试方法和测试理念,为后续技术知识的学习打好基础。

  • 软件测试技术篇,将包括GUI自动化测试、API自动化测试、代码级测试和性能测试技术,通过理论结合实例的方式,为你讲述这四种测试技术的核心知识、设计思想,以及最佳实践。

  • 测试架构篇,将讲述测试数据准备与测试基础架构的内容,既有解决测试数据准备痛点的方案,又有大型互联网企业测试基础架构设计的最佳实践。

  • 测试新技术篇,将选取当下比较热门的探索式测试、测试驱动开发、精准测试、渗透测试技术和基于模型的测试,分别讲述它们解决的问题和具体的实现方法。

  • 测试人员的互联网架构核心知识篇,将从高性能、高可用、伸缩性和可扩展性四个维度对大型网站架构进行深度剖析,弥补测试工程师相较与开发工程师以及测试架构师之间的鸿沟。

专栏详细目录如下:

限时福利

1.订阅后,分享专属海报,每邀请一位好友订阅,可以得到24元现金奖励

2.戳此添加社群管理员,进入技术交流&福利群

适宜人群

想要系统学习互联网时代下软件测试技术的软件行业从业者;具有1~5年经验的软件测试工程师和测试开发工程师;测试架构师,及希望进阶测试架构师的测试人员;中小型,以及大型企业的测试工程师内训。