在软件研发生命周期的各个阶段都有自动化测试技术的存在,并且对提升测试效率有着至关重要的作用......今天这篇文章,我将会以不同的软件开发阶段设计的自动化测试技术为主线,带你了解单元测试、代码级集成测试、Web Service测试和GUI测试阶段的自动化技术,希望可以帮助你更深地理解“自动化测试”的内涵以及外延。
各阶段的自动化测试技术
- 单元测试的自动化技术
- 代码级集成测试的自动化技术
- Web Service测试的自动化技术
- GUI测试的自动化技术
单元测试的自动化技术
首先,你可能认为单元测试本身就是自动化的,因为它根据软件详细设计采用等价类划分和 边界值分析方法设计测试用例,在测试代码实现后再以自动化的方式统一执行。 这个观点非常正确,但这仅仅是一部分,并没有完整地描述单元测试“自动化”的内涵。从广义上讲,单元测试阶段的“自动化”内涵不仅仅指测试用例执行的自动化,还应该包含以下五个方面 :
- 用例框架代码生成的自动化;
- 部分测试输入数据的自动化生成;
- 自动桩代码的生成;
- 被测代码的自动化静态分析;
- 测试覆盖率的自动统计与分析
用例框架代码生成的自动化
有些框架代码应该由自动化工具生成,而不是由开发者手工完成。这样一来,单元测试开发 者可以把更多的精力放在测试逻辑的覆盖和测试数据的选择上,从而大幅提高单元测试用例 的质量和开发效率。
TestNG 框架代码应该由自动化工具生成
部分测试输入数据的自动化生成
这部分是指,自动化工具能够根据不同变量类型自动生成测试输入数据。自动化工具本身不 可能明白代码逻辑,你可能很难理解它是如何根据需要测试的代码逻辑生成合适的输入数 据,并且去判断预计的测试结果的。那我给你举个例子,你就很容易明白了。
比如,某个被测函数的原型是 void fun(int* p, short b),那么测试数据自动生成技术就 会为输入参数 int* p 自动生成“空”和“非空”的两个指针 p,然后分别执行函数 void fun(int* p, short b),并观察函数的执行情况。
如果函数内部没有对空指针进行特殊处理,那么函数 fun 的调用必定会抛出异常,从而发 现函数的设计缺陷。同样地,对于输入参数 short b 会自动生成超出 short 范围的 b,测试 函数 fun 的行为。
自动桩代码的生成
简单地说,桩代码(stub code)是用来代替真实代码的临时代码。 比如,某个函数 A 的 内部实现中调用了一个尚未实现的函数 B,为了对函数 A 的逻辑进行测试,那么就需要模 拟一个函数 B,这个模拟的函数 B 实现就是所谓的桩代码。
自动桩代码的生成是指自动化工具可以对被测试代码进行扫描分析,自动为被测函数内部调 用的其他函数生成可编程的桩代码,并提供基于测试用例的桩代码管理机制。此时,单元测 试开发者只需重点关注桩代码内的具体逻辑实现,以及桩代码的返回值。
必要的时候,自动化工具还需要实现 “抽桩”,以适应后续的代码级集成测试的需求。
那什么是“抽桩”呢?其实也很简单,在单元测试阶段,假如函数 A 内部调用的函数 B 是 桩代码,那么在代码级集成测试阶段,我们希望函数 A 不再调用假的函数 B,而是调用真 实的函数 B,这个用真实函数 B 代替原本桩代码函数 B 的操作,就称为“抽桩”。
被测代码的自动化静态分析
静态分析主要指代码的静态扫描,目的是识别出违反编码规则或编码风格的代码行。通常这 部分工作是结合项目具体的编码规则和编码风格,由自动化工具通过内建规则和用户自定义 规则自动化完成的。目前比较常用的代码静态分析工具有 Sonar 和 Coverity 等。
严格意义上讲,静态分析不属于单元测试的范畴,但这部分工作一般是在单元测试阶段通过 自动化工具完成的,所以我也把它归入到了单元测试自动化的范畴
测试覆盖率的自动统计与分析
单元测试用例执行结束后,自动化工具可以自动统计各种测试覆盖率,包括代码行覆盖率、 分支覆盖率、MC/DC 覆盖率等。这些自动统计的指标,可以帮你衡量单元测试用例集合的 充分性和完备性,并可以为你提供适当增补测试用例以提高测试覆盖率的依据。
代码级集成测试的自动化技术
通俗地讲,代码级集成测试是指将已经开发完成的软件模块放在一起测试。 从测试用例设计和测试代码结构来看,代码级集成测试和单元测试非常相似,它们都是对被 测试函数以不同的输入参数组合进行调用并验证结果,只不过代码级集成测试的关注点,更 多的是软件模块之间的接口调用和数据传递。
代码级集成测试与单元测试最大的区别只是,代码级集成测试中被测函数内部调用的其他函 数必须是真实的,不允许使用桩代码代替,而单元测试中允许使用桩代码来模拟内部调用的 其他函数。
以上的这些异同点就决定了代码级集成测试“自动化”的内涵与单元测试非常相似,尤其是 在实际操作层面,比如测试用例的设计方法、测试用例的代码结构以及数据驱动思想的应用 等等
Web Service 测试的自动化技术
Web Service 测试,主要是指 SOAP API 和 REST API 这两类 API 测试,最典型的是采 用 SoapUI 或 Postman 等类似的工具。但这类测试工具基本都是界面操作手动发起 Request 并验证 Response,所以难以和 CI/CD 集成,于是就出现了 API 自动化测试框架。
GUI 测试的自动化技术
GUI 测试的自动化技术可能是你最熟悉的,也是发展时间最长、应用最广的自动化测试技 术。它的核心思想是,基于页面元素识别技术,对页面元素进行自动化操作,以模拟实际终 端用户的行为并验证软件功能的正确性。 目前,GUI 自动化测试主要分为两大方向,传统 Web 浏览器和移动端原生应用(Native App)的 GUI 自动化。虽然二者采用的具体技术差别很大,但是用例设计的思路类似。