接口测试自动化生成框架

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

接口测试的实施优先级

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

相关厂商内容

京东618大促下的数据驱动个性化推荐

如何构建软硬件结合的人工智能产品研发体系

中国创新型互联网企业走向海外的技术机遇与挑战

LinkedIn成员分类平台大数据应用的最佳实践

各个击破:高可扩展云计算架构、高效运维、大数据处理、APM

相关赞助商

全球架构师峰会,7月17日-18日,深圳大梅沙京基海湾大酒店。马上报名

接口测试的实施条件

接下来说下,接口测试实施需要的一些条件。第一个就是测试人员的能力,代码的熟悉能力、接口测试框架的使用能力、接口测试环境的搭建能力、接口测试设计的能力、基础代码的编写能力、基础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%的测试代码),且能告诉大家我们可以做一些事情更智能化和简单化。

关于作者

高翔(花名季哥) 淘宝软件有限公司资深测试工程师,曾任职于华为南京研究所和群硕软件有限公司。有着通讯、ERP、互联网等多种行业的测试经验,对需求分析、测试流程、测试设计方法、风险分析有较深的理解,擅长于测试模型的建立、用例架构的设计、公共组件功能的抽象和应用、探索式测试流程和方法实践。



感谢崔康对本文的审校。

给InfoQ中文站投稿或者参与内容翻译工作,请邮件至[email protected]。也欢迎大家通过新浪微博(@InfoQ)或者腾讯微博(@InfoQ)关注我们,并与我们的编辑和其他读者朋友交流。

时间: 2024-10-12 00:00:50

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

Android热补丁动态修复技术(四):自动化生成补丁——解决混淆问题

一.前言 在上一章中,我们使用javassist成功为项目注入了System.out.println(AntilazyLoad.class);这行代码,解决了class_ispreverified问题,可以正常使用了,但肯定还存在着很多未知的问题. 首先是javassist的问题 class中使用到的类,必须添加到classpool的classpath中,我在Demo中写了一个自定义控件,注入代码的时候报错,提示没有找到Context,然后我将android.jar整个添加到classpath之

接口自动化简单框架

接口自动化简单框架 一.自动化测试分类: 1.数据驱动:根据数据(读取EXCEL数据)来测试 2.代码驱动:测试用例都是代码,通过读取代码测试 3.关键字驱动:UI自动化,根据封装好的工具,输入关键字测试,有点傻瓜式测试 点击 --> .click() 下一步 提交 --> .submit() { '点击':click() '提交':submit() } 二.自动化框架 自动化框架:可以理解为工具的集合.在日常工作中根据需要实现某些功能,封装起来.或结合其他自动化工具. 三.搭建数据驱动自动化

基于gulp搭建的前端自动化构建框架

Gulp-cli 基于gulp搭建的前端自动化构建.适用于中小型项目,快速构建前端项目框架. 项目启动 // 常用命令 项目编译: npm run build 项目编译并启动: npm run start 项目地址 如对你有帮助,希望给个Star !哈哈哈!! git clone [email protected].com:perfectSymphony/Gulp-cli.git 项目目录 ├── README.md # 项目说明 |-- bin # (在gulpfile文件中使用到)解析lay

使用randoop自动化生成测试用例

使用randoop自动化生成测试用例 1. 综述 使用randoop自动化生成测试用例 2. 操作 下载randoop的jar包: 将jar包和所要测试的类(如Calculate.class)放在同一个文件夹: 在此文件夹打开命令行提示符,输入如下命令: java -ea -classpath .;randoop-2.1.4.jar;Calculate randoop.main.Main gentests --testclass=Calculate --timelimit=15 结果如下: 在那

文档生成框架

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

使用C#通过调用minitab的COM库自动化生成报表

本文介绍通过C#调用minitab com组建自动化生成报表的方法. 首先需要在minitab中通过手动配置的方式生成报表来得到该报表的命令行,过程如下 选择菜单“编辑器”->“启用命令”启用命令窗口 在工作表中输入数据,并按需求配置并生成需要的报表 拷贝出会话窗口中生成该报表的命令行 得到所需的mimitab命令后就可以在C#中通过调用minitab执行该命令得到对应的报表了,过程如下 新建C#工程,并把名为Mtb 17.0 Type Library的COM库加入到该工程的引用 执行以下代码,

【Unity】工具类系列教程—— 代码自动化生成!

转载自:https://zhuanlan.zhihu.com/p/30716595?utm_medium=social&utm_source=qq [为什么要做自动化工具] 工具类的创建是为了解决实际问题或者优化既有流程,我们来先看看一些项目里面经常遇到的问题. 程序代码有很多时候类是相似的,因此新建一个功能的时候你会直接复制了之前"相似"的代码块,然后删除掉无用的逻辑功能,但是有时候会出现漏网之鱼. 开完会,策划发过来一个功能案子,UI相关的界面非常的多,你费劲拼完了UI,写

java自动化-juint框架简述

本人使用的是java的juint框架来组织的自动化测试,故我这边需要简单介绍一下juint框架 首先,建议自行百度一下juint框架,先有一个大概的了解 所谓的接口自动化测试,会对多个接口中每一个接口发送各式各样的请求,其主要的思维是下面的方式 可以想到,我们所要模拟的测试,一般的是一套代码,部署在本地或者测试服务器上,发送请求到服务器,以上图所示的各种方式依次请求各个接口,然后再对请求后返回的数值或者其他的进行校验,达到预期即可认为本次测试通过 那么主流的接口测试的java框架(请原谅笔者技术

centos7搭建ANT+jmeter+jenkins接口测试自动化环境

一.环境准备 因为用到了jmeter和apache-tomcat,centos7必须要有java环境,所以配置jdk和apache-tomcat什么的,就不多说了,自行操作 帮你们偷懒: ant下载地址:http://mirrors.hust.edu.cn/apache//ant/binaries/apache-ant-1.10.3-bin.tar.gz jmeter下载地址:http://mirror.bit.edu.cn/apache//jmeter/binaries/apache-jmet