【软件测试】接口测试的简介

1.接口测试的背景

1.1    什么是接口测试

接口测试是测试系统组件间接口的一种测试。接口测试主要用于检测外部系统与系统之间以及内部各个子系统之间的交互点。测试的重点是要检查数据的交换,传递和控制管理过 程,以及系统间的相互逻辑依赖关系等。

1.2   为什么要做接口测试

在淘宝网系统的历史上,首先出现的是功能测试和性能测试,然后是自动化测试,但发

接口测试在这种需求下应运而生。 首先,随着系统复杂程度的上升,传统的测试方法测试成本急剧增加,测试效率大幅下降(数据模型推算,底层的一个bug能够引发上层的 8 个左右bug,而且底层的bug2.1   战略方针

接口测试的核心战略在于:以保证系统的正确和稳定为核心,以持续集成为手段,提高 手段:持续集成 

另外在这个战略过程中,我们需要几类资源作为支撑,下面做简单描述。 首先在这个战略中最重要的一点是要强调团队的重要性,特别是团队中需要有合理的人力资源配置,在这个团队中,需要全才,也需要专才,需要技术专家,也需要业务专家,既 需要高效的执行者,也需要有效的管理者,任何人在这个团队中都可以发挥重要作用。

其次我们需要强大的测试技术以及测试框架去支撑我们的日常工作,包括基于 JAVA 

再次要充分重视文档的重要性,包括需求文档,开发技术方案,测试技术方案,接口定 2.2  发展各阶段和目标

将简要讲述一个接口测试团队从建立初期到发展起来经历了哪些阶段,以及我们期 稳定提高阶段:

 摸索阶段过后就应该会进入一个稳定提高期。经历了摸索阶段过后,团队的技术、框架

和流程规范都应该有了一个基本的定型。这个时候团队的目标就是通过不同的项目实践来不 断优化这些定型后的东西,最终总结出一套最佳实践出来。它应该能够成为其它项目测试活 动的参照,甚至是标准。这个时候,我们会发现所有的项目都在有序、统一、高效、可靠的 进行。

扩大影响,组织共赢阶段 :

那么到达上面这个目标之后是不是就是接口测试团队的终点呢然不是,不要忘了,

到目前为止,无论你在接口测试的工作上做得再好,那也仅仅只局限在接口测试本身上。我 们不应该满足于此。通常来说接口测试团队在整个质量保证团队中占据了众多的核心技术人 员。他们擅长使用各种技术来解决问题,甚至比开发团队做得还好。拥有如此多的技术资源, 如果我们不懂得合理利用,那真的是很大的浪费。在做好接口测试本身的基础上,我们还应 该积极了解其它测试团队面临哪些问题,这些问题是不是可以利用技术手段来解决,如果可 以,我们是否可以为他们实现一些实用的工具来帮助他们解决问题或者提高工作效率;我们 自己的技术是否有需要分享给其它测试团队,甚至是整个软件团队,以帮助他们更好地完成 工作。总之,我们应该思考如何更有效、更合理地利用接口测试团队的资源,来提高整个组 织的业绩,这不仅会扩大接口测试团队本身的影响力,让接口测试团队成为整个组织的核心 竞争力,同时它还创造了一个共赢的局面。

另一方面,在工作的流程上,各个测试角色是可以互补的,接口测试的设计、用例可以 跟功能和性能测试共享,接口测试的报告可以作为功能测试的重要参考,让其了解底层都经 历了哪些测试,哪里是 bug 的密集区,哪里相对安全一些。在功能测试工程师找到 bug 之后, 接口测试工程师可以用代码直接覆盖这个 bug 产生的代码,使这个 bug 永远不会出现第二次。 接口测试人员还可以直接绕过页面,对底层系统进行性能和压力的测试,在测试中各个角色 的密切配合,也减少了测试的成本,提供系统全方位的质量保障。

3.接口测试的定位

3.1   人员能力定位

  • 熟悉软件测试流程,测试理论和测试方法。能够根据测试需求,制定测试计划和设 计测试用例。
  • 了解软件工程理论知识和开发流程,有一定的编程能力。能够根据测试用例,准备 测试数据以及编写和执行测试脚本,并对软件 bug 进行跟踪分析和报告。
  • 掌握 JUnit,Spring,Maven,CruiseControl,DBunit,Unitils,Ibatis 3.3   工作内容定义

下图是接口测试在各个发展阶段的工作内容,在初期阶段以编码和持续集成为主,以后【软件测试】接口测试的简介

规范而统一的工作流程是大家分工合作的基础,只有每一个人都遵循统一的流程,项目才可能统一有序地进行。因而,规范的工作流程对提高团队的合作能力以及工作效率都有至关重要的作用。


4.3   流程步骤详解

根据以往的实践经验总结,接口测试可以分为以下几个步骤:需求分析和设计评审,测试框架和技术选型,测试计划制定,测试环境搭建,测试用例设计和评审,测试实现和执行, 持续集成。下面,将对每一个步骤作详细说明。

4.3.1  需求分析和设计评审

几乎所有软件活动都是以需求分析开始的,接口测试也是如此。在本阶段我们有两个任 务:一是充分理解需求,并保证所有人对需求的理解一致;二是尽可能找出需求本身所存在 的问题。

需求分析之后,紧接着就应该进入系统设计阶段了。系统设计不应该仅仅只是系统设计 师或者开发人员的事情,作为接口测试人员,应该可以从测试的角度为系统的设计提供一些 方案或者建议,优化设计的同时提高系统的可测性。

4.3.2   测试框架和技术选型


系统设计评审之后,系统实现所需要使用到的技术都应该已经选定。在这个阶段,接口 测试人员就需要根据系统设计来选定自己的测试框架和要使用到的技术。当然,这并不是必 须的,如果你所测试的项目和之前已经测试过的项目技术架构都差不多的话,那么你可以沿 用之前的测试框架和技术,或者在这个基础上稍加调整。如果所测试的项目采用的是一种不 同的技术架构,那么你就需要仔细考虑如何选定与之相适应的测试框架和技术。

接口测试框架和技术的选型有很多因素,原则就是选择一个能满足你的测试需要的最好 用的框架和技术,并且尽量是你的项目成员都比较熟悉的框架和技术。没有必要单纯为了提 高测试的技术含量而选用功能奇多但却复杂难懂的工具来使用。

4.3.3   测试计划制定


接口测试的测试计划制定基本上和功能测试差不多。这个阶段主要要明确有哪些测试资 源,测试资源如何分配,在整个测试过程中需要完成哪些事情,每个时间点应该完成哪些事 情,还有最重要的也是很容易被忽略掉的一点就是风险评估。虽然我们不可能识别出所有的 风险,但是我们可以根据经验值来识别出大部分的潜在风险并加以管理。良好的风险管理是 一个软件团队成熟的体现。

4.3.4   测试环境搭建

在测试框架和技术选型完成以后就可以开始进行测试环境的搭建了,在接口测试中典型 的环境搭建过程可能是这样的:首先你会为接口测试建立一个基本的工程,并为这个工程设 计一个良好的结构,在这个工程中引入你所选定的测试框架和依赖,为这些框架和依赖编写 好必要的配置文件,将该工程和待测系统的工程以某种形式联系在一起(通常是项目依赖), 在该环境下能运行通过一个最基本的测试。

4.3.5   测试用例设计与评审

接口测试的测试用例设计是以接口为单位来设计测试,在设计的过程中我们重点关注的是接口有哪些可能的输入参数和预期的输出结果是什么。当然在需要的时候,也要考虑接口 的性能和所期望承受的压力等。在这个过程中很重要的一点就是为不同的测试划分优先级, 这在测试资源不足的情况下将会指导你哪些测试应该优先完成,哪些测试可以延迟完成。即 便是在测试资源很充足的情况下,你也可以按照优先级来完成测试,这样一旦遇到某个风险 爆发,那么基本上可以保证,优先级高的工作已经完成了,而不至于惊慌失措。

测试用例设计出来以后应该经过评审,并将评审结果以某种形式记录下来,作为测试实 施的最终方案。评审最好由以下这些人员共同参与:需求方、设计人员、开发人员、功能测 试人员、接口测试人员以及这些人员的直接主管。不同的角色会从不同角度对测试设计进行 考虑,因此在这个过程中会使测试设计得到极大的完善。

4.3.6  测试实现和执行

测试设计一旦产出并通过评审,那么测试实现相对来说就是一件比较简单的事情了。无 

持续集成是接口测试实现全面自动化回归测试的重要技术手段。简单来说,持续集成就 是把写好的测试代码持续不断地运行起来,并且利用版本控制技术,让测试代码测试的始终 是最新版本的系统接口。

当接口测试进行到这个阶段的时候,我们的目标就是要让测试代码持续不断的运行,并 且保证在运行不通过的时候及时定位并解决问题。在开发人员维护系统的时候,我们同时也 会根据持续集成的结果来维护我们的测试代码。

最后,需要注意的是,虽然以上提及的步骤是我们接口测试人员遵循的规范,但是不同 于功能测试等其他测试,接口测试需要与开发同步进行。如下图所示,在项目启动的时候我 们就要参与进去,在编码结束时测试也基本完成,中间的每个步骤也与开发紧密相关。因此, 我们接口测试的工程师又叫测试开发工程师,我们既需要测试的知识,又必须具有一定的编 码能力。


4.4   质量评估标准

接口覆盖率是否达到要求。

1) 所有供外部调用的接口必须有相对应的测试用例,覆盖率要达到 95%以上。

2) 所有供内部调用并涉及到产品主要功能的接口测试用例覆盖率要达到 90%以上。

3) 所有供内部调用并涉及到次要功能的接口,测试代码覆盖率可以随接口复杂度和重 要程度增高而增加。

测试用例中对接口业务规则的验证是否完整。

1) 测试用例要覆盖接口的主要业务规则。 接口的主要业务规则,就是该接口的主要功能,它影响着接口的业务实现和调用状态。

如发布一个宝贝,那么发布一个全新、二手、拍卖、闲置的宝贝等等就是主要功能。

2) 测试用例要覆盖接口的常用业务规则。 还是发布宝贝的例子,80%

对该字段的长度为 4,5 的测试用例。

 测试用例中是否覆盖接口之间的关联性测试。 如:一个添加接口的关联性测试,就要以该添加接口的返回值为参数,来调用其他关联

接口如修改和删除接口,验证其是否可调用并且调用成功。

遗留的 bug 对系统的影响程度。

1) 经常调用的接口,不可含有主要业务规则和常用业务规则相关的 bug,次要业务规 

JUnit

断言机制

通过断言机制,让我们的程序能够自动的判断测试结果是否正确,而无需我们人工的去分析和判断。通过批量运行和断言机制,使得我们的自动化测试变得可能。

测试报告

当测试运行完毕后,JUnit 

 

? DbUnit

DbUnit是一个基于JUnit扩展的数据库测试框架,目的是在测试运行前后使数据库处 于可知状态。它提供了大量的类对与数据库相关的操作进行了抽象和封装,运用DbUnit 的一般流程如下:

1) 根据业务准备测试用的数据,一般准备成 Excel 格式的数据集;

2) 在测试执行前,将数据集更新到数据库;

3) 在测试执行后,将数据库恢复到测试前的状态。 在实际测试中直接运用DbUnit的情况很少,通常是跟其他技术(如Unitils)一起配

合使用。

 

? Spring TestContext Framework

 

Spring TestContext Framework

u Spring 上下文管理和缓存

提供对 Spring 上下文的持久化载入和缓存机制,节省 Sprng 容器启动时间,从而缩 短大型项目集成测试执行时间,有效提高测试效率。

? 测试 fixtures 提供若干抽象类简化集成测试编码,方便测试类直接访问 ApplicationContext 来 进行显 式 bean 查 找或整 体测试 上下文 状态 ,访问 JdbcTemplate 

? Unitils

 

Unitils 是辅助单元测试的一个开源类库,其目的是使单元测试更为简单和便于维护。 同时也对一些现有的类库(如dbunit)进行更好的扩展,并且可以和JUnit以及TestNG测 试框架进行集成。

Unitils提供通用的断言工具,支持数据库测试,支持使用Mock进行测试,并提供对 Spring以及Hibernate的集成。

Unitils提供以下功能:

常用的测试工具。 

4)   当存根(stub)数据对象并不需要提供具体行为相应时,可使用虚假对象。

持久层测试的支持

1)   通过一些增长的,可重复的,或后期处理脚本来自动管理数据库;

2) 提供自动地使数据库约束失效,将序列(sequences

5)   提供 Hibernate SessionFactory 的创建以及 session 的管理;

6)   提供 Hibernate 之类的 ORM 类库的数据库映射的自动测试。

对集成 EasyMock 的支持

1)   简化 EasyMock mock 对象的支持;

2)   

Spring 集成

1)   通过上下文配置,使得 Spring 管理的 bean 可以简单的注入到单元测试中;

2)   支持在单元测试中使用由 Spring 配置的 Hibernate SessionFactory。

 

? TestNG

 

TestNG 是为了解决 Junit 过于简单的问题而产生的,它与 Junit 是同一类的框架,两者不 CruiseControl 是一种持续集成过程的框架,包括了旺旺消息通知、邮件通知,Ant、Maven 和各种源码控制工具(SVN、CVS)的插件,并提供了 web Clover

 

Clover

? Statement coverage,也称作 Line coverage,用于评价测试的代码语句覆盖率。

? Basic block coverage, 是 Statement coverage 

6.接口测试的方向

在经历了接口测试的发起、稳定、成型以后,我们有必要探讨一下接口测试的未来。然 而,这却是一个十分困难的命题,因为,未来永远是一个谜。任何形式的预测,最终结果常 常成为笑料,IT 业界尤其如此。鉴于此,我们需要把更多的目光关注到接口测试的发展方向 上,而不是接口测试发展的最终结果的预测上。

接口测试之框架改进 目前,我们已经形成了完整的接口测试框架。但在不同的项目中,差别仍然很大,没有

形成统一的基础架构,从而导致构建接口测试框架的过程比较繁琐,因此,我们可以在以下 几个方面进行改进与优化:

1、测试数据管理框架构建与统一;

2、接口测试项目构建基础框架; 3、mock 测试也是一致的,从本质上来说,自动化代表了未来测试发展的主流方向。目前,我们已经 实现了接口测试的持续集成,而更高程度的自动化、更加广泛的自动化是我们未来的发展方 向。

更高程度的自动化包含:1、持续集成框架的柔性改进,包括更加丰富的测试结果、更 加人性化的结果展现,测试结果旺旺/邮件推送,而不仅仅是项目构建失败的提醒;2、持续 集成中接口测试项目自动构建与部署。

更加广泛的自动化包含:1、各开发语言接口测试持续集成,HUDSON 的研究与应用;2、 将接口测试应用到更加广泛的项目当中;3、持续集成框架与测试框架(用例、缺陷)的整 合。

接口测试之测试驱动 接口测试是白盒测试的一部分。作为接口测试而言,我们不仅需要保证代码的质量、系统的性能,我们还需要保证系统开发过程的正确性与高效性。测试驱动开发是接口测试的一 个重要思想。

在接口测试的过程中,我们要力求做到覆盖到更多的代码行,覆盖到更多的逻辑过程, 驱动开发更加准确、高效的实现自己的代码。同时,我们需要对代码进行分析与评审,驱动 开发提高代码的质量。

接口定义在系统级架构的过程中,是非常重要的一个环节。接口定义是否合理,需要从 更高层面,譬如系统的交互性、系统的易用性、系统的可扩展等方面来考虑。接口测试的职 责,需要从这些方面来约束和规范系统的接口定义过程,驱动开发完善设计,避免接口定义 的随意性以及接口改动的频繁性。接口的改动对系统的伤害是不言而喻的。因此,从一开始 就驱动开发完善接口定义是接口测试的一个重要发展方向。

接口测试之未来遐思

我们生活在信息膨胀的时代,IT 行业的发展越来越快,也对测试提出了更高的要求。提 出成本更低,效率更高的测试技术、测试框架、测试方法、测试理论是我们未来能适应高速 发展的 IT 行业的基本要求。因此,我们提出如下的设想:

测试虚拟化:提供接口测试虚拟机,构建测试虚拟化层。将被测系统运行在虚拟机中, 测试代码,智能分析测试结果,智能定位缺陷,智能修复缺陷。

来源:王俊凯夫人

声明:本站部分文章及图片转载于互联网,内容版权归原作者所有,如本站任何资料有侵权请您尽早请联系jinwei@zod.com.cn进行处理,非常感谢!

上一篇 2017年1月18日
下一篇 2017年1月18日

相关推荐