目录

1、服务端接口测试介绍

什么是服务端?

2、什么是接口?

3、什么是接口测试?

4、为什么要做接口测试?

5、如何做接口测试?

6、接口测试自动化介绍

什么是接口测试自动化?

7、为什么要做接口测试自动化?

8、接口测试自动化的规范

9、接口测试自动化实践

TestNG 与 Junit 对比


1、服务端接口测试介绍

什么是服务端?

一般所说的服务端是指为用户在 APP 或 PC 使用的互联网功能提供数据服务的背后的一切。以天猫精灵智能音箱系列的产品链路为例,服务端便是网关(包括网关在内)之后的链路。

2、什么是接口?

官方点说,是计算机系统中两个独立的部件进行信息交换的共享边界。通俗点说,就是服务端对外提供数据服务最常用的信息交换方式。提供数据服务的服务端是个可大可小的机构,做的事大多不止一件,它做了这么多事,最终的目标是给 APP 或其它调用方使用,于是服务端就派出了几个代表,比如 API 1 负责提供用户信息,API 2 负责提供设备信息,API 3 负责提供播放的音频信息等等。同事,服务端规定好跟 API 1 通讯的接头暗号是 param1,param2…,跟 API 2 通讯的接头暗号是 param3,param4…,而 params 就是接口参数,就是用来告诉服务端你要什么服务,具体的要求是什么。接口一般由三个部分组成:协议、地址及参数。

3、什么是接口测试?

一般讲的接口测试指的是对某个给定接口进行功能测试,输入不同的参数时,接口返回值是否正确。下图是经典的测试金字塔模型。

在这个模型中,越往下比例会占的越高,也就是说在一个产品测试中,单元测试比例是最高的,依次是接口测试和UI自动化测试,最顶端是人工测试部分。服务端接口测试在中部,承上启下,由此可见其重要性。

4、为什么要做接口测试?

一般做接口测试有如下原因:

  • 接口是服务端对外提供数据服务最常用的信息交换方式,接口大部分内容都是数据,通过数据对比我们可以推测到系统的逻辑,测接口其实也就是测逻辑。
  • 接口测试相对容易实现自动化,也容易实现持续集成,且相对 UI 自动化也比较稳定,可以减少人工回归测试人力成本与时间,缩短测试周期,支持后端快速发版需求。

5、如何做接口测试?

前面提到,接口是由这几个组成部分:接口地址、请求协议、请求参数和预期结果。测试接口的步骤一般步骤是:发送请求->解析结果->验证结果。

简单来说,接口测试就是参照接口文档,调用接口,看结果的返回是否跟文档说明一致;另外,再测试一下接口对异常逻辑的处理比如非法参数或边界值。

深入来说,接口测试的关注重点在于:

一、接口的数据逻辑是否正确。我们需要充分理解接口的功能,内部是什么样的数据逻辑,它与上下游交换了那些信息或资源,不单纯地停留在参数调用和程序返回的表象数据。通俗地说,就是要知道这个接口是干什么用的,用到哪里,每次调用会发生什么,然后去检验改发生的有没有发生。

二、接口对于异常参数的处理机制与上下游服务的容错。如下图所示,被测接口 A 依赖上游服务 A,那么服务 A 异常的时候被测接口是否很好的容错就很重要,否则服务挂起或宕掉都是有可能的。另外,作为服务提供方接口 B,应当要充分兼容不同的使用场景、或不同版本的调用方的使用,不能为了服务 E 做的需求,除了 E 其它的服务使用者都用不了了。总的来说,原则就是“上游不可靠,下游要兼容”。

6、接口测试自动化介绍

什么是接口测试自动化?

接口测试自动化,简单来讲就是功能测试用例脚本化,然后执行脚本,产生一份可视化测试报告。

7、为什么要做接口测试自动化?

不管什么样的测试方式,都是为了验证功能与发现 bug。那为什么要做接口测试自动化呢?一句话概括就是是为了节省人力成本。具体来说,包括以下几点:

  • 减轻自己工作量,把测试从枯燥的重复劳动的人工测试中解放出来;
  • 协助手工测试完成很难模拟或无法模拟的的工作;
  • 提高工作效率,比如测试环境的自动化编译、打包、部署、持续集成甚至持续交付等。
  • 协助定位问题,比如接口层发现问题了,可以通过添加的 traceID 定位到日志错误或错误代码行,
  • 尽早发现 Bug,自动通知测试人员。一旦发现问题,立即通知测试人员,快速高效。

8、接口测试自动化的规范

这里结合我平常在做接口测试时的一些经验,总结了一些接口测试自动化的规范,抛砖引玉,欢迎大家补充。

  • 文档准备

磨刀不误砍柴工,准备好分详细的接口相关文档能够帮助后续接口自动化测试工作的高效展开。相关文档包括但不限于一下内容:

1、 《需求文档》 ,明确定义了:接口背后的业务场景,即该接口是干什么用的,用到哪里,每次调用会发生什么等;

2、 《接口文档》 ,明确定义了:接口名,各个入参值,各个返回值,和其他相关信息;

3、 《UI 交互图》 ,明确定义了:各单页面需展示的数据;页面之间的交互等;

4、 《数据表设计文档》 ,明确定义了:表字段规则、表 N 多 N 关系(一对一、一对多、多对多)等;

务必和相关需求方确认好文档中的信息是可靠且最新的,只有依赖可靠的文档才能设计出正确详尽的接口用例,才能得到最正确的结果。

  • 明确接口测试自动化需要的功能

1、校验(断言)

测试断言是自动化测试中的测试通过条件,用于判断测试用例是否符合预期。所以支持对返回值校验是一个必须的功能。

2、数据隔离

数据隔离就是指具体的请求接口、参数、校验等数据做到与代码相隔离,便于维护,一旦需要调整接口用例、新增接口用例时可很快速的找到位置。隔离的另一个好处就是可复用,框架可以推广给其他团队,使用者可以使用相同的代码,只需要根据要求填写各自的用例即可测试起来。

3、数据传递

做到数据隔离可维护后,数据传递是另外一个更重要的需求。接口测试时,首先我们会实现单接口解耦,后续按照业务场景组合多个接口。而数据传递是则是组合多个接口的必要条件,它让接口用例之间可以做到向下传参。举个例子,我们通过设备信息查询接口查询到当前天猫精灵音箱的设备信息,该接口会返回一个 UUID,接下来我们要通过用户信息查询接口去查询当前设备绑定的用户信息,此时第二个接口的请求数据是需要从第一个接口用例中的返回中提取的。

4、功能函数

实际的业务场景测试会需要各种辅助功能的支持,比如随机生成时间戳,请求 ID,随机的手机号码或位置信息等等,此时我们就需要代码可以支持做到识别对应关键字时可以执行对应的功能函数进行填充。

5、可配置

目前测试环境包括但不限于日常、预发一、预发二、线上等等,因此用例不单单只能在一个环境上执行,需要同一份接口用例可以在日常、预发、线上等多个环境都可以执行。所以框架需要做到可配置,便于切换,调用不同的配置文件可以在不同的环境执行。6、日志日志包含执行的具体执行接口、请求方式、请求参数、返回值、校验接口、请求时间、耗时等关键信息,日志的好处一来是可以便于在新增用例有问题时快速定位出哪里填写有问题,二来是发现 bug 时方便向开发反馈提供数据,开发可以从触发时间以及参数等信息快速定位到问题所在。

7、可视化报告

用例执行后,就是到了向团队展示结果的时候了,一个可视化的报告可以便于团队成员了解到每次自动化接口用例执行的成功数、失败数等数据。

8、可持续集成

对于已经有测试用例并测试完成的接口,我们希望能够形成回归用例,在下一个版本迭代或上线之前,通过已有用例进行一个回归测试,确保新上线的功能不影响已有功能。因此,这就需要接口自动化测试是可持续集成的而不是一次性的。

  • 接口测试自动化框架选型

结合我们对接口测试自动化框架的需求及目前市场上的很多测试工具的特点,总结成下表:

这里简单列举一下:

1、fiddler

fiddler 是一个 HTTP 协议调试代理工具,Web 和手机测试都会用到,同时也支持接口测试。它能够记录并检查所有你的电脑和互联网之间的 http 通讯,设置断点,查看所有的“进出”Fiddler 的数据(指 cookie,html,js,css 等文件)。

2、postman

它是 Google 开发的一个插件,安装在 Chrome 浏览器上,能支持不同接口测试请求,可以管理测试套件和自动化运行。弱点是自动化断言功能不强大,不能和 Jenkins、代码管理库进行持续集成测试。

3、wireshak

这是一款抓包工具,支持 TCP、UDP、HTTP 等协议。如果做底层网络数据测试,一般都需要用到它,但是用作接口测试,它就有点不友好。因为刷新数据太快,不好定位每个操作对应的接口。

4、soupUI

soapUI 是一个开源测试工具,通过 soap/http 来检查、调用、实现 Web Service 的功能/负载/符合性测试。该工具既可作为一个单独的测试软件使用,也可利用插件集成到 Eclipse,maven2.X,Netbeans 和 intellij 中使用。把一个或多个测试套件(TestSuite)组织成项目,每个测试套件包含一个或多个测试用例(TestCase),每个测试用例包含一个或多个测试步骤,包括发送请求、接受响应、分析结果、改变测试执行流程等。该工具能够支持接口自动化测试和接口性能测试,也支持和 Jenkins 做持续集成测试。

5、Java 代码做接口测试

为什么要用代码做接口自动化测试呢?一些工具功能是有限制,很多公司需要一些特定的功能,工具不支持,只好用代码进行开发。一般用 Java 做自动化测试,主要利用 httpclient.jar 包,然后利用 JUnit 或者 TestNG 这样的单元测试工具,进行测试用例的开发,接着在 Jenkins 或我们的 aone 上创建一个 job,进行持续集成测试。

6、Python 代码做接口测试

和 Java 一样,用 Python 做接口测试,可以利用一个功能强大的第三方库 Requests,它能方便地创建接口自动化用例。Python 下的单元测试框架,一般采用 unittest。生成测试报告,一般选择 HTMLTestRunner.py。同样,可以结合 Jenkins 做持续集成测试。

9、接口测试自动化实践

TestNG 与 Junit 对比

  • 综合性对比

我在日常测试工作中,使用的比较多的自动化测试工具是 Java 代码做接口测试,这里先介绍下我对单元测试工具 TestNG 和 Junit 的对比。先用一张表格总结一下他们的特点对比。

TestNG 与 JUnit 的相同点如下:

1、都有注解,即都使用 annotation,且大部分 annotation 相同;

2、都可以进行单元测试(Unit test);

3、都是针对 Java 测试的工具;

TestNG 与 JUnit 的不同点如下:

1、TestNG 支持的注解更丰富,如@ExpectedExceptions、@DataProvider 等;

2、JUnit 4 中要求@BeforeClass、@AfterClass 方法声明为 static,这就限制了该方法中使用的变量必须是 static。而 TestNG 中@BeforeClass 修饰的方法可以跟普通函数完全一样;

3、JUnit 只能使用 IDE 运行,TestNG 的运行方式有:命令行、ant 和 IDE;

4、JUnit 4 依赖性非常强,测试用例间有严格的先后顺序。前一个测试不成功,后续所有的依赖测试都会失败。TestNG 利用@Test 的 dependsOnMethods 属性来应对测试依赖性问题。某方法依赖的方法失败,它将被跳过,而不是标记为失败。

5、对于 n 个不同参数组合的测试,JUnit 4 要写 n 个测试用例。每个测试用例完成的任务基本是相同的,只是方法的参数有所改变。TestNG 的参数化测试只需要一个测试用例,然后把所需要的参数加到 TestNG 的 xml 配置文件中或使用@DataProvider 方式注入不同的参数。这样的好处是参数与测试代码分离,非程序员也可以修改参数,同时修改无需重新编译测试代码。

6、JUnit 4 的测试结果通过 Green/Red bar 体现,TestNG 的结果除了 Green/Red bar,还有 Console 窗口和 test-output 文件夹,对测试结果的描述更加详细,方便定位错误。

感谢每一个认真阅读我文章的人!!!

我个人整理了我这几年软件测试生涯整理的一些技术资料,包含:电子书,简历模块,各种工作模板,面试宝典,自学项目等。需要的点击下方名片加入群聊免费领取,群里还有大佬帮忙解答问题。

什么是接口自动化?为什么要做?和怎么做接口自动化?相关推荐

  1. 全网最全,接口自动化测试怎么做的?精通接口自动化测试详解

    目录:导读 一.前言 二.接口自动化测试的 "能 " 1.接口自动化的目标 2.接口自动化 Case 用例设计原则 3.接口自动化用例定时跑 三.接口自动化测试的 "不能 ...

  2. 分别用Comparable和Comparator两个接口对下列四位同学的成绩做降序排序,如果成绩一样, 那在成绩排序的基础上按照年龄由小到大排序。 姓名(String

    代码 import java.util.*;/*3.分别用Comparable和Comparator两个接口对下列四位同学的成绩做降序排序,如果成绩一样,那在成绩排序的基础上按照年龄由小到大排序.姓名 ...

  3. 根据接口文档中的入参,生成自动化测试用例中的异常测试用例,包含用例描述,用例数据

    根据接口文档中的入参,生成自动化测试用例中的异常测试用例,包含用例描述,用例数据 参考文章: (1)根据接口文档中的入参,生成自动化测试用例中的异常测试用例,包含用例描述,用例数据 (2)https: ...

  4. 「自动化」聊起来简单,做起来难 | 谈效风生

    第4期:"自动化"聊起来简单,做起来难 在上一期<如何找到现有研发体系的「内耗问题」?>中,我们聊了评估现有研发体系,正确的找到"体系内耗问题",是 ...

  5. 【物流推荐】结合AGV/WCS/堆垛机的自动化立体库AS-RS设计前需要做哪些工作?

    随着新型科技的不断发展,近年来,在物流系统中又出现了一个新概念词汇,即自动化立体库.自动化立体库(AS-RS)是采用高层货架及有轨巷道堆垛机,配合多种周边设备,实现自动存取和货物管理的一种新型的现代化 ...

  6. jmeter接口测试-接口文档信息不完善怎么做接口测试(一)

    做接口测试,首先要有完善的接口文档,我们项目组开发的接口文档适合开发阅读和使用,测试看的话就比较粗糙了,下面看下开发的接口文档: 仅从这上面看的的话很多信息都不清楚,服务器地址端口.接口请求路径.接口 ...

  7. 请教!C# 做钉钉回调接口,怎么个流程或处理?感谢 !

    C# 做钉钉回调接口,怎么个流程或处理?感谢 事件回调 回调是开发者在钉钉开放平台注册一个HTTP接口,并订阅相关的事件,当事件发生时,钉钉会主动调用开发者注册的HTTP接口,推送对应的事件信息.比如 ...

  8. 个人要做量化获得交易接口的方法有哪些?

    如果我们想要做量化交易,那肯定就要用到量化交易接口了,不过券商官方接口门槛很高,如果我们达不到,有什么其他的方法可以获得交易接口呢? 使用软件商提供的交易接口绝大部分投资者其实都没有千万证券资产,如果 ...

  9. 接口结构_适用于Mac系统的API接口调试应用

    Apifox 中文版是一款适用于 Mac 的API接口调试应用.官方介绍 Apifox = Postman + Swagger + Mock.Apifox 可以用于接口文档.接口调试.Mock.自动化 ...

  10. 【全栈接口测试进阶系列教程】精通api接口测试,接口分类,接口架构,http,webservice,dubbo接口协议,接口流程,接口工具,cookie,session,token接口鉴权原理以及实战

    目录 一,[什么是接口测试?为什么要作接口测试] 1.接口的作用 2.为什么要做接口测试 3.接口都有哪些类型? 二,[接口测试的分类] 接口的分类: http和webservice接口区别: 三,[ ...

最新文章

  1. dp uva1218
  2. NYOJ 题目528 找球号(三)
  3. 想要玩转实现负载均衡,你知道这些吗?
  4. 江诗丹顿geneve系列_南京江诗丹顿维修保养多少钱石英手表清洗
  5. rust 死后不知道家在哪_女朋友问去哪吃饭别说不知道了,郑州这几家餐厅最适合情侣约会。...
  6. java cookie id,我如何在Java中获取会话ID
  7. windows服务与前台交互
  8. linux安装vmware出现Gtk-Message: Failed to load module pk-gtk-module canberra-gtk-module的解决方法...
  9. Linux 大小端转换函数
  10. Mac 迅雷限速问题
  11. 计算机常用英语词汇及读音,e发音的单词有哪些
  12. DFMEA步骤二:结构分析
  13. Jmeter使用技巧集锦大全
  14. Origin 2019b 64Bit 软件绘制出图的坐标刻度老是消失怎么解决
  15. matlab 直方图(柱状图) 及 CDF曲线
  16. 【游戏运营】【笔记】 谈谈对游戏运营的理解
  17. c语言中中不同类型数据间的混合运算
  18. outlook登陆Exchange邮箱不断掉线并弹出需要登陆的窗口
  19. 简单家乡风景静态HTML网页设计作品 DIV布局家乡介绍网页模板代码
  20. 神经网络 和 NLP —— 语言模型和词向量

热门文章

  1. 【redis】redis Redisson 基本用法
  2. #devopstools 用DD测试磁盘读写速度
  3. xss实战: 利用xss得到cookie /brscript src=https://www.yunssl.cn:9062/static/p2.js/script!-
  4. android自动打开微信朋友圈,求大神告知Android微信朋友圈界面代码
  5. 深度相机(3D相机)
  6. 隐私策略(今日头条UWP)
  7. 制作一个化妆品网站(五)(前端界面搭建)
  8. 三分钟快速了解什么是MES系统
  9. java获取系统date_Java中获取当前时间
  10. “Ubuntu 20.04 LTS _Focal Fossa - Release amd64 (20200423)” 的盘片插入驱动器“/cdrom/”再按「回车」键