软件测试笔记(十)如何作到有效的集成测试?

前言

软件产品的构成都是很是复杂的,这也就意味着它将含有多个模块,这些模块经过接口进行交互。针对于这些集成模块的测试,咱们称之为集成测试。也能够认为它是由单元测试扩展出来的。架构

集成测试的定义

集成测试是测试单元模块之间的链接或数据传输的过程。它又称为I&T(集成与测试)。微服务

它分为大爆炸法、自上而下法、自下而上法和三明治或混合集成法(自上而下和自下而上相结合)。这个过程是经过使用名为stub和Drivers的虚拟程序来执行,其不须要实现软件整个模块,而只是模拟与调用模块的数据通讯便可。工具

它一般是在单元测试以后完成以后执行的。集成测试中涉及的每一个模块都应该在集成测试以前进行单元测试。经过在集成测试以前进行单元测试,能够提升执行软件集成测试的信心。单元测试

集成测试也须要编写相应的测试计划,从而减小了测试的混乱,并为有效执行集成测试提供了清晰的路径。测试

集成测试的目标

  1. 下降风险
  2. 验证接口的功能和非功能行为是否符合设计和规定
  3. 创建对接口质量的信心
  4. 查找缺陷(可能接口自己或组件或系统内)
  5. 防止集成接口的缺陷在后期测试中发现

如何写集成测试用例

假设网页程序中有三个模块,如“登陆页”、“收件箱”和“删除邮件”。spa

在编写集成测试用例时,咱们不关注单个模块的功能,由于在单元测试期间应该覆盖单个模块,在集成测试阶段咱们主要关注模块之间的通讯。根据上述假设,咱们必须关注“登陆页面如何连接到收件箱页面”和“收件箱页面如何连接到删除邮件模块”。设计

image.png

什么是大爆炸式的集成测试

它是将全部模块合并一次,并在完成单个模块测试后验证功能。在大爆炸式集成测试中,只有在全部模块都准备好以后,才能集成各个模块。而后他们会去检查它是否表现良好。在这种类型的测试中,可能会出现一些缺点,例如,多是在很后期发现缺陷。很难定位缺陷是来自于某个模块或者是接口,亦或是集成方面的问题。blog

什么是自上而下的集成测试

image.png

在自上向下的集成测试中,测试是自上而下进行的。首先测试高级模块,而后测试低级模块,最后将低级模块集成到高级模块,以确保系统工做正常。接口

在这种类型的测试中,若是模块尚未准备好进行集成测试,那么桩程序(stub)将用做临时模块。ci

什么是自下而上的集成测试

image.png

在自下而上的集成测试中,测试是自下而上进行的。首先测试底层模块,而后测试高层模块,最后将高层模块集成到低层,以确保系统按预期工做驱动程序用做集成测试的临时模块。

桩和驱动程序有什么区别

桩和驱动程序用于组件级的测试

image.png

假设咱们在一个应用程序中有两个模块,即“模块1”和“模块2”。开发人员只开发了应用程序的“模块1”。在他们完成“模块2”的开发以前,咱们(测试人员)收到了测试“模块1”的要求。咱们能够测试“模块1”,若是其与“模块2”没有依赖关系。假设“模块1”依赖于“模块2”。那咱们该怎么办?在这种状况下若是想要测试“模块1”,须要开发人员建立一个桩(stub)模块来替换“模块2”。若是“模块2”依赖于“模块1”,但“模块1”还没有就绪,则采用相同的方法在本例中,咱们使用驱动(driver)替换“模块1”。

像咱们以前提过的登陆而且登陆邮箱页面的案例。
您必须测试登陆页面(假设,邮箱页面正在开发中)。登陆页面将在登陆后调用邮箱页面,但邮箱页面还没有就绪。为了克服这种状况,开发人员编写了一个虚拟程序做为邮箱页面。这个就是桩(stub)程序。

桩(stub)被称为“程序”。若是“调用的程序”不完整,则将其替换为桩。(这是自上而下的方法)。

再来讲说驱动程序,登陆页面已经准备好了,但不是邮箱页面。此次假设邮箱页面已经准备好测试,可是登陆页面尚未准备好。为了克服这种状况,开发人员编写了一个相似于登陆页面的虚拟程序。这个虚拟程序就是驱动程序,驱动程序也就是“调用程序”。若是“调用程序”不完整,则将其替换为驱动程序。(这种状况在自下而上的方法中发生)。

驱动
自顶向下集成测试中使用桩 自下而上集成测试中使用驱动程序
在开发子程序时使用桩 开发过程当中使用驱动程序
首先测试最上层的模块 最底层模块最早测试
它用来模拟未集成的底层模块的行为 它用来模拟未集成的上层模块的行为
桩是被调用程序 驱动是调用程序

什么是混合集成测试

混合集成测试也称为三明治集成测试。它是自顶向下和自下而上集成测试的结合。

集成测试的工具

一些集成测试工具以下:

  1. Citrus Integration Testing
  2. VectorCAST/C++
  3. FitNesse
  4. Validata

总结

集成测试是测试环节中很重要的一个部分,尤为是在今天软件产品的架构都在向微服务的架构转变,那么集成各个服务间的测试就显得尤其重要。但愿对你们有所帮助,若是有疑问或者想法,也请你们留言区回复。