接口测试自动化生成框架

接口测试这个词语,相信大家都不陌生了吧。目前我个人的理解,接口测试应该属于白盒测试的范畴,也是很多测试工程师很想从事和向往的一个测试手段。大家都觉得白盒测试深不可测,但实际上是怎么样的呢。

  接口测试的实施优先级

  对于 Web 应用来说,接口测试就是对某一个接口进行测试代码的编写和执行。一般情况下,实施接口测试的优先级是:对暴露在外面的接口(该接口会给第三方调用)进行接口测试;内部的核心功能接口也会做接口测试;内部非核心功能接口的接口测试(很多时候就是单元测试)。当然这个实施的具体细节,还需要根据项目的情景和人员的能力来确定如何实施接口测试、在哪里做接口测试、为什么要做接口测试、做到什么程度等。

  接口测试的实施条件

  接下来说下,接口测试实施需要的一些条件。第一个就是测试人员的能力,代码的熟悉能力、接口测试框架的使用能力、接口测试环境的搭建能力、接口测试设计的能力、基础代码的编写能力、基础 Debug 能力等。第二个就是接口测试框架,框架是否定制化一些功能(比如自动加载 java bean、方便初始化数据、方便校验数据库数据等)。第三个就是测试团队和测试流程的支持,测试团队需要支持测试人员对核心接口进行接口测试(包括时间上、精力上、技术上等支持);测试流程上需要保证接口测试的效率和项目接入性(在项目当中实施接口测试,充分考虑开发团队和功能测试团队合作等)。

  接口测试的实例

  接下来会通过一个案例来说明接口测试的一些基本考虑点,这里不涉及到详细的接口测试流程和注意点,只会把接口测试的一些想象展示给大家。

public interface IdleItemService {
Result<ExtraItem> publish (ExtraItem extraItem);/**
* taobao.idlesell.item.update
* 编辑闲置宝贝*/
Result<ExtraItem> update (ExtraItem extraItem);/**
* taobao.idlesell.item.get
* 查询闲置宝贝*/
Result<ExtraItem> query (Long itemId,Boolean hasDesc,Boolean hasPic,String appKey);
}

  上面的代码是淘宝的提供出去的某个 Top 接口代码,测试人员需要针对这个 Top 接口做最严格的接口测试,那他该怎么做呢,需要持续关注什么呢。

  接口测试之前,需要充分的了解接口的实现功能的业务逻辑、接口参数、接口返回值。功能业务逻辑:外部可以通过该接口发布一个闲置二手的宝贝,具体细节不做说明。

  接口参数: 一个宝贝的所有信息参数。见图:

  接口返回值:Result<IdleItemResult>,其中包含一些 errorcode 等基本属性。

  接口的测试设计主要关注点

  1. 接口中所有的入参都要写测试用例。
  2. 每个入参的每个错误类型都要准备一个异常用例。如必须参数缺省、参数类型错误、参数范围错误、参数超过最大位数、参数没有达到最小指定位数、参数的无效值(有效状态外)、参数的小数点超过规定长度、参数含有非法字、参数含有违禁字、参数的关联性检查(如所在省、市,所在地不匹配)等等。
  3. 对于正常系的用例,要把所有入参的各种合法的有效值都执行到。所有入参的最大位可以用一个测试用例执行掉。所有可缺省的参数不要(只输入必须参数)的测试用例也要做一个。
  4. 对于搜索接口,应该把每个参数单独作为搜索条件来确认搜索结果是否正确,然后再确认多条件输入后的结果。

  如下是部分参数的接口测试设计的截图:

  接口的测试代码的编写

  大家应该发现了对于所有的参数,我们都需要校验一下参数的基本特征,如前面讲到的异常用例一样。那么接口测试代码又是什么样的呢。

  • step1: 编写测试基类(加载资源、初始化环境)(可选)。
  • step2: 编写测试类。
  • step3: 在该测试类中编写测试方法。
  • step4: 在测试方法中调用被测方法。
  • step5: 验证预期结果与返回的结果是否一致。
  • step6: 执行测试查看测试结果。

  那么针对所有的接口测试用例写接口测试代码,可以看到的是,我们的接口测试代码主要是入参的不同,校验结果的不同,其他区域的测试代码都是一样的。我们要做的是不断的 copy 前一个测试用例代码,然后修改某个参数、修改某个验证点就搞定了。

  接口测试自动化生成框架

  对于这些比较重复的测试代码编写工作,大家肯定想到是否可以自动生成这些脚本,还会想到自动生成的脚本是否可以和测试数据一起自动运行测试代码呢。这里可没想象那么简单,需要考虑业务逻辑、接口环境、测试数据、接口测试框架等一系列的组合。

  我们来简单点吧,我们的目的,在一定的测试范围内,充分利用工具来自动化生成测试用例,保证测试用例的覆盖率。 两种程度的复用该测试套件,一种是测试用例的生成和复用,一种是测试代码的生成和复用。 请看下面的自动化生成框架的架构图:

  模板引擎架构图如下:

  相关术语解释:

  1. All Pairs:利用参数来定制化生成测试用例的攻击,入口是 Excel 准备的参数文件;出口是 txt 文件的测试用例。这个工具是开源的,可以自己定制化开发,具体请见:http://www.infoq.com/cn/news/2011/08/combination-test
  2. 业务 API 库:由于需要生成测试代码,需要知道业务逻辑所涉及到的接口和类,比如 IC 中的发布宝贝的发布接口。
  3. 模板:根据业务逻辑规则制定的逻辑描述,可以利用因果图分析法中的“或与非”来描述接口业务功能逻辑(需要抽象出相应的关键因子,也就是部分的接口入参)
  4. 测试用例分析器:将 txt 文件格式的测试用例进行分析,分析每个用例的参数和参数值和业务逻辑。
  5. 测试数据分析器:将 xml 文件格式的测试数据进行分析,与生成的每个测试用例代码进行组合和处理,生成带数据的测试代码。

  那么接下来我们需要做什么呢。迭代去开发我们需要的组件就行,第一步考虑自动生成接口测试框架代码,定制化的选择接口来自动生成框架代码(包括集成了现成的接口测试框架);接下来考虑如何让我们的用户(测试人员)来输入我们的测试数据,并考虑与框架代码生成进行集成融合;另外一块就是测试环境的 API 的调用了,如何能自动运行自动生成的测试代码并反馈结果给测试人员等一系列的问题需要进一步深入挖掘。

  这里还需要说明的是,我们不期望这个框架能解决所有接口功能接口测试代码的自动生成(有些接口实现业务逻辑较复杂),我们能解决掉一部分重复工作(某个接口的 60% 的测试代码),且能告诉大家我们可以做一些事情更智能化和简单化。

====================================分割线================================

最新内容请见作者的GitHub页:http://qaseven.github.io/

时间: 2024-08-07 05:54:08

接口测试自动化生成框架的相关文章

基于IBM Rational Robot的自动化功能测试框架

简介: 本文介绍了构建在 IBM Rational Robot 基础之上的自动化功能测试框架,来帮助组织更好的 进行自动化的功能测试. 1. 前言 测试本身就是一项异常艰苦的工作,而成功的进行自动化的功能测试,对很多软件开发组织来讲,更 是困难重重.本文介绍了构建在IBM Rational Robot基础之上的自动化功能测试框架,来帮助组织更好的 进行自动化的功能测试. 2. 现实的挑战 2.1 自动化测试的迫切需求 随着业务的变化,软件产品的种类越来越多,软件产品的升级越来越快,在很多的软件开

《测试驱动的嵌入式C语言开发》——2.3节CppUTest:一个用C++实现的自动化单元测试框架

2.3 CppUTest:一个用C++实现的自动化单元测试框架现在你已经见过了Unity,接下来我会快速介绍一下CppUTest,同时也是我更倾向于使用的对C和C++代码进行单元测试的自动化测试框架.事实上,不仅因为它是一个功能全面的测试框架,同时也因为我是CppUTest的作者之一.本书开始的几个例子会用Unity,在第8章之后会使用CppUTest.CppUTest是为了支持在多种操作系统上开发嵌入式软件而特别设计的.CppUTest的宏被设计成不需要了解C++也可以写测试用例.这使得C程序

文档生成框架

序言 Word文档生成在许多项目中都是需要的,目前来看有两种方案,一种是通过Apache POI工具包.iText来生成,另外一种是利用Office Open Xml规范来进行生成.各种方案各有优缺点,这里不对其进行详细比较,已经有许多人进行过深入的比较,详细请咨询谷哥和度娘.这里采用的方案是利Office Open Xml的方式进行文档生成. 对于采用POI,iText来说,要生成复杂的Doc文件,其实并不容易.而采用Xml结构生成,去把一个文档生成xml文件,看看里面的内容,估计也会是满头是

在Fedora18安装下一代静态网站生成框架Awestruct

Awestruct是非常棒的静态网站生成框架,他基于Jekyll,使用Ruby语言开发.Awestruct可以根据模板生 成非常漂亮的网站,例如可以用BootStrap或者BluePrint,这两个大名鼎鼎的东东不用多说了吧,地球人都知 道.废话不多说,进入主题.安装Ruby环境 首先安装一些依赖库,否则安装Awestruct会报如下的错误 : Building native extensions. This could take a while... ......... ERROR: Erro

extjs5-Sencha cmd 5 生成框架app文件夹下面为什么没有controller这个包?

问题描述 Sencha cmd 5 生成框架app文件夹下面为什么没有controller这个包? 我用的extjs5.0.0 sencha cmd 5.0.1.231 执行命令没有报错一切正常,也能访问到http://local:1814 这个页面但是不知道为什么app文件夹下面没有controller这个包 ,做了例子页面出不来也不报错 解决方案 我的也是,你现在知道是什么原因了吗? 解决方案二: 我也是 解决了吗? 解决方案三: 我也是 解决了吗? 解决方案四: 5.0推荐使用ViewCo

使用阿里云ECS自动化配置框架对实例的管理员账号进行自定义

1. 实例自动化配置框架 实例自动化配置框架是阿里云ECS为用户提供的一种自定义实例启动行为的架构,详细信息请参考阿里云线上帮助文档:https://help.aliyun.com/knowledge_detail/49121.html   本文档主要介绍怎么通过该框架在创建实例时让用户自己定义实例的管理员用户的方法. 2. 场景 用户想要在阿里云ECS购买时中达到如下的效果: 1) 不使用ECS默认自带的root用户作为管理员(具体用户可在脚本中进行禁止远程登录) 2) 创建一个新的管理员用户

《测试驱动的嵌入式C语言开发》——2.1节什么是自动化单元测试框架

2.1 什么是自动化单元测试框架自动化单元测试框架就是一个软件包,它能让程序员表达产品代码应该有什么样的行为.自动化单元测试框架的工作就是要提供以下能力: 用于表述测试用例的通用语言: 用于表述期望结果的通用语言: 能够使用产品代码所用编程语言的功能: 能把所有的工程.系统或子系统中的单元测试用例收集到一起: 一个能运行全部或者部分测试用例的机制: 对于测试套件的成功和失败给出明确的报告: 对于失败的测试给出详细的报告.本书中用到的两个单元测试框架在测试嵌入式C代码以及开源代码中都很流行,并且它

高级自动化钓鱼框架PhishLulz已经发布,是灾难还是救星?

2016年11月的新西兰黑客大会Kiwicon上,FortConsult的网络安全专家Michele Orru发布了一款自动化网络钓鱼工具,并且将其命名为PhishLulz.这个钓鱼框架主要是由ruby所编写,并且运行起来十分高效.在演示过程中,安全专家只需要10分钟就能搭建起钓鱼环境,进行精确的钓鱼攻击. 钓鱼框架特点 该钓鱼框架已经开源,并且发布在了github上,目前已经有10人fork,60多人star.可以说这个开源项目受到很多人的关注,接下来的发展会越来越稳定和突出. 特点 该钓鱼框

自动化生成 Openstack 新项目开发框架

目录 目录 前言 环境 openstack-project-generator 前言 Openstack Developer 应该都知道, 开发一个 Openstack 的新项目并不是一个从 0 到 1 的过程, 而是在一个 Project Template 的框架中, 为其填充 API/DB/Manager 等代码定义和实现. 一般来说, 搭建这个 Template 框架并不困难, 只是太过繁琐. 本篇推荐的开源小项目, 可以非常帮助我们完成这些繁琐的工作, 用法也很简单. 如果大家能帮忙提交