接口测试 从理论到实践 (满满的干货)

Posted 软件测试大师

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了接口测试 从理论到实践 (满满的干货)相关的知识,希望对你有一定的参考价值。


接口测试


1
接口测试的定义与分类

    接口测试是测试系统组件间接口的一种测试。 

    主要用于检测外部系统与系统之间以及系统内部各个子系统之间的交互点。

    重点测试数据的交换、传递和控制管理过程,以及系统间的相互逻辑依赖关系等等。

    这要求对业务逻辑有一定程度上的理解,对数据流向有较好的定位。

    接口测试般会用于多系统间交互开发,或者拥有多个子系统的应用系统开发的测试。

    接口测试适用于为其他系统提供服务的底层框架系统和中心服务系统,主要测试这些系统对外部提供的接口,验证其正确性和稳定性。

    接口测试同样适用于一个上层系统中的服务层接口,越往上层,其测试的难度越大。


       接口测试实施在多系统多平台的构架下,有着极为高效的成本收益比。

    接口测试天生为高复杂性的平台带来高效的缺陷监测和质量监督能力。平台越复杂,系统越庞大,接口测试的效果越明显。


       接口测试的目的是测试接口,尤其是那些与系统相关联的外部接口,测试的重点是要检查数据的交换、传递和控制管理过程,还包括处理的次数。外部接口测试一般是作为系统测试来看待的。


       不是所有的团队都可以在一个隔离的测试环境中进行测试工作的,因此使得对外部接口的测试显得困难。

    我们应该确保较早地与相关的组织协调好并确定进行外部接口测试的方案。

    有时候相关的组织只是人工的静态的审阅一次数据而并不真正的用这些数据来测试,这些都增加了实际测试执行中遇到的风险,但有些时候是可以避免的。



      一般来说接口分为如下三类:



接口测试 从理论到实践 (满满的干货)


    B.上层服务对下层服务的调用(这个理解难度稍微有点大,在我们程序中功能是分层的,那么属于上层对底层服务的调用,以后能够有机会接触到代码或者更加稍微复杂点的接口测试就能够理解。举个例子,我们的程序框架分为三层,分别是web层:提供给用户请求的层次;feb迁至层:作为信息传递的中转站;service层:作为程序应用的核心,处理所有的请求)


接口测试 从理论到实践 (满满的干货)

    

    C.服务之间的调用(如添加一条数据时,会先调用数据查询的服务,查询该数据是否是重复数据)


接口测试 从理论到实践 (满满的干货)


     不同类型的接口测试方法可能不一致,但总体来说不管是哪种类型,被测接口即为服务,测试手段为客服方,接口测试的目的就是:通过我们的测试手段,去验证满足其申明提供的功能。


2
如何做接口测试


   接口测试的原理:通过测试程序模拟客服端向服务器发送请求报文,服务器接收请求报文后对相应的报文做出处理然后再把应答报文发送给客户端,客户端接收应答报文这一过程(reques->response)。


    接口测试的流程与功能测试有什么区别呢?从原则上以及流程上讲,是没有啥区别的,都同一套软件测试流程:需求讨论->评审需求->确定需求->产出接口定义->根据需求文档及接口定义设计测试用例(测试用例主要从业务场景,功能以及异常测试几个方面考虑)->评审用例->执行测试。


    接口测试采用的最基本的就是黑盒测试,在这个测试过程中我们最需要关注的是,如何来设计测试用例,设计测试用例所采用的方法也是我们常所用的几大方法:等价类、边界值以及错误推测法、场景法。在设计测试用例之前,我们先来看看常见的接口文档形式。

接口测试 从理论到实践 (满满的干货)

接口测试 从理论到实践 (满满的干货)



    接口测试编写测试用例,主要关注点是输入参数、输出结果以及内部业务逻辑是否正常‘,所以我梦设计用例也要从这几方面出发考虑:


    a)输入参数测试:针对输入参数进行的测试,也可以说是假定接口参数的不正确性  进行的测试,确保接口对任意类型的输入都做了相应的处理:输入参数合法(不合法),输入参数为空,为null,输入参数超长等等;


    b)接口是否满足了所提供的功能,相当正常情况测试,如果一个接口功能复杂时推荐对接口用例进行结构划分,这样子用例就有更好的可读性和可维护性;


    c)逻辑测试:逻辑测试严格讲应为单元测试,单元测试应保持内部逻辑的正确性,可单元测试和接口测试的界限并不是那么清晰,所以我们也可以从给出的设计文档中考虑内部逻辑错误的分支情况和异常;


    d)异常情况测试:接口实现是否对异常情况都进行了处理,接口输入参数虽然合法,但是在接口实现中,也会出现异常,因为内部的异常不一定是输入的数据造成的,而有可能是其他逻辑造成的,程序需要对任何异常都进行处理;


    针对上面的注册接口,我们利用测试用例设计方法来编写测试用例,如下所示:

接口测试 从理论到实践 (满满的干货)接口测试 从理论到实践 (满满的干货)


3
接口测试的工具选择


     可以进行接口测试的工具有很多,这里简单介绍几个:


>loadrunner  :一款商业性能测试工具,用来做接口测试,很好很强大。


>jmeter :一款开源的性能测试工具,操作简单方便,既有jdbc request 操作数据库数据,也有http request 和 soap request 应对测试;


>httprequester :火狐浏览器自带接口测试工具,插件中安装即可,界面简单明了,容易上手。


>postman :谷歌浏览器的扩展工具,界面简洁,开发者比较常用的一款插件工具。


>soapui : 开源测试工具,通过soap/http 来检查、调用、实现web service的功能/负载/符合性测试。


    我们将在后面的教学中,重点讲解Jmeter这款综合性比较高的工具;


一、Jmeter 的安装与启动

Jmeter官网下载安装包:http://jimeter.apache.org/

下载完成后,解压压缩包,并把安装包剪切复制到D盘

配置环境变量:



2) 修改CLASSPATH变量,变量值中添加  %JMETER_HOME%\lib\ext\ApcheJMeter_core.jar;%JMETER_HOME\lib\jorphan.jar;%JMETER_HOME%\lib\logkit-1.2.jar;然后点击确定保存。


启动:在Jmeter的安装路径下的bin文件夹,找到Jmeter.bat执行文件,双击即可打开启动,如下图所示:

接口测试 从理论到实践 (满满的干货)




二、Jmeter原件介绍

    测试计划:我们打开Jmeter就可以看到测试计划这个元件,所有的测试任务都必须在测试计划下,它就相当于一个顶级目录,在这个目录下可以添加多组测试或者是测试数据。


接口测试 从理论到实践 (满满的干货)



    线程组:右键点击测试计划,添加线程组,如果你需要利用Jmeter来做测试的话,那么必须要添加线程组,线程组比较关键的地方在于,我们可以设置循环次数以及并发用户,利用这个特点,Jmeter也可以完成压力测试的任务;


接口测试 从理论到实践 (满满的干货)


配置元件:右键点击线程组--添加--配置元件,就可以看到各种不同作用的元件


接口测试 从理论到实践 (满满的干货)


sampler:右键点击线程组-->sampler,可以看到各种各样的请求我之后进行的测试也要通过添加这些不同类型的请求来完成


接口测试 从理论到实践 (满满的干货)



    监听器:右键点击线程组---->监听器,后期我们要查看每个请求的结果,从而通过对请求的内容以及响应结果判断,确定我们的请求是否是正常的,后期操作的过程中,我们会给大家详细的进行讲解;


    断言:右键点击线程组---->断言,断言与我们平时写代码用到的断言有异曲同工之妙,可以帮助我们判断返回的结果是否正确,在自动化的应用过程中大有好处,后面会讲到断言的强大应用;


    函数助手:点击选项---函数助手对话框,里面有很多Jmeter内置的函数,可以拿来直接用,我们做参数化的时候,巧妙利用里面的内置函数,可以事半功倍!


接口测试 从理论到实践 (满满的干货)



4
Jmeter做接口测试实战


    上面我们介绍了Jmeter这款综合性比较高的接口测试工具,接下来我们就重点讲解下如何利用这款工具来进行接口测试,具体的操作步骤详见下文:


我们这里以老黄历为例来进行讲解,他的需求文档如下图所示


接口测试 从理论到实践 (满满的干货)



一、准备工作

1)添加一个线程组--添加一个http请求,如下图所示


接口测试 从理论到实践 (满满的干货)



二、正式测试


1)点击绿色的按钮,进行执行

2)查看结果是否执行正确,如果看到下面的结果就说明是正确的


接口测试 从理论到实践 (满满的干货)



三、参数话



如果我想测试近10天的老黄历情况,应该怎么做可以用到参数化功能,具体有三种详细的参数化功能,下面详细为大家介绍:

1)添加自定义变量:右键点击线程组-----配置元件----用户定义的变量;添加的变量如下:

如何正确的引用这些变量呢,在http请求的sampler里面,直接填写${变量名},如下所示:



接口测试 从理论到实践 (满满的干货)


    这样定义了用户自定义变量了之后,每次变更参数的时候,我们可以直接修改date这个变量对应的参数值就可以了,但是这个自定义变量的优点就是任何引用这个变量的地方我们只需要做一个修改即可,缺点就是他只能对应一个变量,如果我们想循环跑这个请求10次,并且要求是不同的参数这里就需要你动手去修改10次,有没有更好的方案?当然有,我们采取CSV读取测试数据的方式。


2)CSV控件:右键点击线程组-----配置元件----CSV Data Set Config,元件界面如下所示:



接口测试 从理论到实践 (满满的干货)

    

    引用的方式也是一样在需要用到变量的地方,填写:${变量名},那么我们txt里面的数据是怎么填写的的呢,我们准备5条数据,如下所示:


接口测试 从理论到实践 (满满的干货)

    

    但是要让数据都跑起来,还有一个设置小技巧,我们txt里面有几条数据,就需要设置几次循环,这样才能达到批量测试的效果,如下图所示,来设置循环次数:

接口测试 从理论到实践 (满满的干货)



然后执行,大告成功!

3)函数助手:右键点击选项----函数助手对话框----选择“_time”函数,在第一行中输入日期格式:Yyyymmdd(分别代表年月日),这样就会获取当前日期,但是有一个确定,也只能执行一次,想要达到更好的随机生成日期时间的效果,需要进一步进行研究与学习。

接口测试 从理论到实践 (满满的干货)



参数化的三个小技巧都已经展示出来了,大家赶紧去试试!


四、压力测试

平时条件允许我们会对接口进行小型的压力测试,那这里我们就需要用到参数化技巧,具体的步骤如下:

1)首先准备好测试数据,存放在本地的TXT文件中;

2)新建CSV文件,添加txt的文件路劲以及变量名;

3)在相关的http请求中,添加引用变量

4)在线程组中设置并发用户数,此时循环数为1,如下图所示:

接口测试 从理论到实践 (满满的干货)



5
接口测试的缺陷管理


    接口测试的过程中,我们需要将发现的bug提交到bug管理系统,进行后期的追踪与跟进。这里对于软件测试工程师来说,重点在于如何发现测试过程中的bug?怎么断定它就是一个bug?


一般来说,接口测试中检查测试结果,主要关注三大块:响应结果、日志、数据表核对数据。

我们拿实战过程中的一个例子来说:

实占场景:对充值接口进行测试


参数要求如下:



接口测试 从理论到实践 (满满的干货)


我们利用jmeter进行测试,输入的手机号是正确的,但是充值额度是0,返回的相应结果如下图:


接口测试 从理论到实践 (满满的干货)


明显给出的参数是错误的,不符合要求的,所以我们要针对把这个bug提交上去,提交的bug内容如下:



    后期我们需要对已提交的bug进行持续性的跟进,直到解决为止。


了解更多










以上是关于接口测试 从理论到实践 (满满的干货)的主要内容,如果未能解决你的问题,请参考以下文章

满满的干货之接口测试篇

接口测试理论知识整理和实践

2021字节跳动 “软件测试知识点 ”数据库压力测试方法实战理论满满!

接口测试篇接口测试用例编写常见误区

干货分享实战演练基于加密接口测试测试用例设计!

干货| 接口测试核心知识点梳理与解析