什么是接口测试—接口测试详解,什么是接口测试用例

4747 290 2022-08-07


本文讲述了什么是接口测试—接口测试详解,什么是接口测试用例。

  1. 什么是接口?

  接口测试主要用于外部系统与系统之间以及内部各个子系统之间的交互点,定义特定的交互点,然后通过这些交互点来,通过一些特殊的规则也就是协议,来进行数据之间的交互。
  2.接口都有哪些类型?
  接口一般分为两种:1.程序内部的接口2.系统对外的接口
  系统对外的接口:比如你要从别的网站或服务器上获取资源或信息,别人肯定不会把数据库共享给你,他只能给你提供一个他们写好的方法来获取数据,你引用他提供的接口就能使用他写好的方法,从而达到数据共享的目的。
  程序内部的接口:方法与方法之间,模块与模块之间的交互,程序内部抛出的接口,比如bbs系统,有登录模块、发帖模块等等,那你要发帖就必须先登录,那么这两个模块就得有交互,它就会抛出一个接口,供内部系统进行调用。
  接口的分类:1.webservice接口2.httpapi接口
  webService接口是走soap协议通过http传输,请求报文和返回报文都是xml格式的,我们在测试的时候都用通过工具才能进行调用,测试。
  httpapi接口是走http协议,通过路径来区分调用的方法,请求报文都是key-value形式的,返回报文一般都是json串,有get和post等方法,这也是最常用的两种请求方式。
  json是一种通用的数据类型,所有的语言都认识它。(json的本质是字符串,他与其他语言无关,只是可以经过稍稍加工可以转换成其他语言的数据类型,比如可以转换成Python中的字典,key-value的形式,可以转换成JavaScript中的原生对象,可以转换成java中的类对象等。)
  3.接口的本质及其工作原理是什么?
  接口你可以简单的理解他就是URL,工作原理就会说URL通过get或者post请求像服务器发送一些东西,然后得到一些相应的返回值,本质就是数据的传输与接收。
  4.什么是接口测试?
  接口测试是测试系统组件间接口的一种测试。接口测试主要用于检测外部系统与系统之间以及内部各个子系统之间的交互点。测试的重点是要检查数据的交换,传递和控制管理过程,以及系统间的相互逻辑依赖关系等。
  简答的说就是通过URL像服务器或者其他模块等,传输我们想传输的数据,然后看看他们返回的是不是我们预期想要的。
  5.问什么要做接口测试?
  1)越底层发现bug,它的修复成本是越低的。
  2)前端随便变,接口测好了,后端不用变,前后端是两拨人开发的。
  3)检查系统的安全性、稳定性,前端传参不可信,比如京东购物,前端价格不可能传入-1元,但是通过接口可以传入-1元。
  4)如今的系统复杂度不断上升,传统的测试方法成本急剧增加且测试效率大幅下降,接口测试可以提供这种情况下的解决方案。
  5)接口测试相对容易实现自动化持续集成,且相对UI自动化也比较稳定,可以减少人工回归测试人力成本与时间,缩短测试周期,支持后端快速发版需求。接口持续集成是为什么能低成本高收益的根源。
  6)现在很多系统前后端架构是分离的,从安全层面来说:
  (1)只依赖前端进行限制已经完全不能满足系统的安全要求(绕过前面实在太容易),需要后端同样进行控制,在这种情况下就需要从接口层面进行验证。
  (2)前后端传输、日志打印等信息是否加密传输也是需要验证的,特别是涉及到用户的隐私信息,如身份证,银行卡等。
  6.怎样做接口测试?
  由于我们项目前后端调用主要是基于http协议的接口,所以测试接口时主要是通过工具或代码模拟http请求的发送与接收。工具有很多如:postman、jmeter、soupUI、java+httpclient、robotframework+httplibrary等。
  –也可以用接口自动化来实现,就是用代码实现,框架和UI自动化差不多,发送请求用断言来判断。
  7.接口测测试点是什么?
  目的:测试接口的正确性和稳定性;
  原理:模拟客户端向服务器发送请求报文,服务器接收请求报文后对相应的报文做处理并向客户端返回应答,客户端接收应答的过程;
  重点:检查数据的交换,传递和控制管理过程,还包括处理的次数;
  核心:持续集成是接口测试的核心;
  优点:为高复杂性的平台带来高效的缺陷监测和质量监督能力,平台越复杂,系统越庞大,接口测试的效果越明显(提高测试效率,提升用户体验,降低研发成本);
  用例设计重点:通常情况下主要测试最外层的两类接口:数据进入系统接口(调用外部系统的参数为本系统使用)和数据流出系统接口(验证系统处理后的数据是否正常);
  PS:设计用例时还需要注意外部接口提供给使用这些接口的外部用户什么功能,外部用户真正需要什么功能。
  8.后端接口都测试什么?
  回答这个问题,我们可以从接口测试活动内容的角度下手,看一下面这张图,基本反应了当前我们项目后端接口测试的主要内容:

image.png

  9.后端接口测试一遍,前端也测试一遍,是不是重复测试了?
  回答这个问题,我们可以直接对比接口测试和app端测试活动的内容,如下图为app测试时需要覆盖或考虑内容:

image.png

  从上面这两张图对比可以看出,两个测试活动中相同的部分有功能测试、边界分析测试和性能测试,其它部分由于各自特性或关注点不同需要进行特殊的测试,在此不做讨论。接下来我们针对以上三部分相同的内容再进行分析:
  1)基本功能测试:
  由于是针对基本业务功能进行测试,所以这部分是两种测试重合度最高的一块,开发同学通常所指的也主要是这部分的内容。
  2)边界分析测试:
  在基本功能测试的基础上考虑输入输出的边界条件,这部分内容也会有重复的部分(比如业务规则的边界)。但是,前端的输入输出很多时候都是提供固守的值让用户选择(如下拉框),在这种情况下测试的边界范围就非常有限,但接口测试就不存在这方面的限制,相对来说接口可以覆盖的范围更广,同样的,接口出现问题的概率也更高。
  3)性能测试:
  这个比较容易区分,虽然都需要做性能测试,但关注点确大不相同。App端性能主要关注与手机相关的特性,如手机cpu、内存、流量、fps等。而接口性能主要关注接口响应时间、并发、服务端资源的使用情况等。两种测试时的策略和方法都有很大区别,所以这部分内容是需要分开单独进行测试的,理论上来说这也是不同的部分。
  综论:
  1)接口测试和app测试的活动有部分重复的内容,主要集中在业务功能测试方面。除此之外,针对各自特性的测试都不一样,需要分别进行有针对性的测试,才能确保整个产品的质量。
  2)接口测试可以关注于服务器逻辑验证,而UI测试可以关注于页面展示逻辑及界面前端与服务器集成验证
  接口测试持续集成:
  对接口测试而言,持续集成自动化是核心内容,通过持自动化的手段我们才能做到低成本高收益。目前我们已经实现了接口自动化,主要应用于回归阶段,后续还需要加强自动化的程度,包括但不限于下面的内容:
  1)流程方面:在回归阶段加强接口异常场景的覆盖度,并逐步向系统测试,冒烟测试阶段延伸,最终达到全流程自动化。
  2)结果展示:更加丰富的结果展示、趋势分析,质量统计和分析等
  3)问题定位:报错信息、日志更精准,方便问题复现与定位。
  4)结果校验:加强自动化校验能力,如数据库信息校验。
  5)代码覆盖率:不断尝试由目前的黑盒向白盒下探,提高代码覆盖率。
  6)性能需求:完善性能测试体系,通过自动化的手段监控接口性能指标是否正常。
  接口测试质量评估标准:
  1)业务功能覆盖是否完整
  2)业务规则覆盖是否完整
  3)参数验证是否达到要求(边界、业务规则)
  4)接口异常场景覆盖是否完整
  5)接口覆盖率是否达到要求
  6)代码覆盖率是否达到要求
  7)性能指标是否满足要求
  8)安全指标是否满足要求
  10.接口测试都要掌握哪些知识?
  1)了解系统及内部各个组件之间的业务逻辑交互;
  2)了解接口的I/O(input/output:输入输出);
  3)了解协议的基本内容,包括:通信原理、三次握手、常用的协议类型、报文构成、数据传输方式、常见的状态码、URL构成等;
  4)常用的接口测试工具,比如:jmeter、loadrunner、postman、soapUI等;
  5)数据库基础操作命令(检查数据入库、提取测试数据等);
  6)常见的字符类型,比如:char、varchar、text、int、float、datatime、string等;
  如何学这些技能?
  1)系统间业务交互逻辑:通过需求文档、流程图、思维导图、沟通等很多渠道和方式;
  2)协议:推荐《图解http》这本书,内容生动,相对算是入门级的书籍,其他的还有《图解tcp、IP》等;
  3)接口测试工具:百度这些工具,然后你会发现,好多的教学博客、相关问题解决方案、以及一些基于工具的书籍,当然,选择合适的书很重要;
  4)数据库操作命令:学习网站(W3C、菜鸟教程)、教学博客,以及一些数据库相关书籍,入门级推荐:《mysql必知必会》、《oraclePL/SQL必知必会》等
  5)字符类型:还是百度,有句话这么说:内事不决问百度,外事不决问Google。。。
  如何获取接口相关信息?
  一般的企业,都会由开发或者对应的技术负责人员编写接口文档,里面会注明接口相关的地址、参数类型、方法、输入、输出等信息,如果没有,想办法获取。
  接口文档八要素:
  封面:封面最好是本公司规定的封面,有logo,内容标题,版本号,公司名称,文档产生日期;
  修订历史:表格形式较好些,包括:版本、修订说明、修订日期、修订人、审核时间审核人等;
  接口信息:接口调用方式,常用的GET/POST方式,接口地址;
  功能描述:简洁清晰的描述接口功能,比如:接口获取的信息不包括哪些;
  接口参数说明:每个参数都要和实际中调用的一样,包括大小写;参数的含义言简意赅的说明,格式,是string还是int还是long等格式;
  说明部分,说明参数值是需要哪里提供,并详细说明参数怎么生成的,例如时间戳,是哪个时间段的,参数是否必填,一些参数是必须要有的,有些是可选参数等;
  返回值说明:
  1)最好有一个模板返回值,并说明每个返回参数的意义;
  2)提供一个真实的调用接口,真实的返回值;
  调用限制,安全方面:
  加密方式,或者自己公司一个特殊的加密过程,只要双方采用一致的加密算法就可以调用接口,保证了接口调用的安全性,比如常见的md5;
  文档维护:文档在维护的时候,如有修改一定要写上修改日期,修改人,对大的修改要有版本号变更;
  11.其他相关知识?
  get请求,post请求的区别:
  1)GET使用URL或Cookie传参。而POST将数据放在BODY中。
  2)GET的URL会有长度上的限制,则POST的数据则可以非常大。
  3)POST比GET安全,因为数据在地址栏上不可见。
  4)一般get请求用来获取数据,post请求用来发送数据。
  其实上面这几点,只有最后一点说的是比较靠谱的,第一点post请求也可以把数据放到url里面,get请求其实也没长度限制,post请求看起来参数是隐式的,稍微安全那么一些些,但是那只是对于小白用户来说的,就算post请求,你通过抓包也是可以抓到参数的。(唯一区别就是这一点,上面3点区别都是不准确的)
  http状态码:
  1)2002开头的都表示这个请求发送成功,最常见的就是200,就代表这个请求是ok的,服务器也返回了。
  2)3003开头的代表重定向,最常见的是302,把这个请求重定向到别的地方了。
  3)400400代表客户端发送的请求有语法错误,401代表访问的页面没有授权,403表示没有权限访问这个页面,404代表没有这个页面。
  4)5005开头的代表服务器有异常,500代表服务器内部异常,504代表服务器端超时,没返回结果。
  webservice接口怎么测试:
  它不需要你在拼报文了,会给一个webservice的地址,或者wsdl文件,直接在soapui导入,就可以看到这个webservice里面的所有接口,也有报文,直接填入参数调用,看返回结果就可以了。
  天气预报wsdl地址:http://www.webservicex.net/globalweather.asmx?wsdl。
  cookie与session的区别:
  1)cookie数据存放在客户的浏览器上,session数据放在服务器上。
  2)cookie不是很安全,别人可以分析存放在本地的cookie并进行cookie欺骗
  考虑到安全应当使用session。
  session会在一定时间内保存在服务器上。当访问增多,会比较占用你服务器的性能
  考虑到减轻服务器性能方面,应当使用cookie。
  单个cookie保存的数据不能超过4K,很多浏览器都限制一个站点最多保存20个cookie。
  所以个人建议:
  将登陆信息等重要信息存放为session。

  其他信息如果需要保留,可以放在cookie中。

本文整理了面试中经常被问到的接口测试题目,也是项目中经常遇到的实际问题,希望能通过这些题目提高对接口测试的理解。

后续也会持续更新一些题目进来,希望能对大家有所帮助。

1、get和post区别是什么?

POST和GET都是向服务器提交数据,并且都会从服务器获取数据。

传送方式:get通过地址栏传输,post通过报文传输

传送长度:get参数有长度限制(受限于url长度),而post无限制

GET产生一个TCP数据包(对于GET方式的请求,浏览器会把http header和data一并发送出去,服务器响应200返回数据),POST产生两个TCP数据包(对于POST,浏览器先发送header,服务器响应100 continue,浏览器再发送data,服务器响应200 ok返回数据)

get请求参数会被完整保留在浏览历史记录里,而post中的参数不会被保留

在做数据查询时,建议用GET方式;而在做数据添加、修改或删除时,建议用post方式

2、常见的POST提交数据方式

application/x-www-form-urlencoded

multipart/form-data

application/json

text/xml

3、你们公司是如何做接口测试的?

接口测试实际跟一般测试不同就是测试用例的设计部分。

通过接口文档获得接口请求的参数

设计接口测试功能用例(主要从用户角度出发看接口能否实现业务需求,用例设计就是黑盒用例那一套)

各种入参验证(正常情况,异常情况包括输入参数个数不对,类型不对,可选/必选,还有考虑参数有互斥或关联的情况)

接口返回值各种验证(符合接口文档需求)

了解接口实现逻辑,实现逻辑覆盖(语句/条件/分支/判定/…)

接口能并发执行吗、安全吗,性能满足要求吗?

采用工具或者自写代码来验证

发现问题跟功能测试一样,该报bug报bug,该跟踪状态的跟踪状态

4、如何分析一个bug是前端还是后端的?

平常提bug的时候,前端开发和后端开发总是扯皮,这种情况很容易判断。

先抓包看请求报文,对着接口文档,看请求报文有没问题,有问题就是前端发的数据不对;

请求报文没问题,那就看返回报文,返回的数据不对,那就是后端开发的问题咯。

5、请详细阐述接口测试和UI测试在测试活动中是如何协同测试的?

UI与接口测试的协同可以从下面的方向考虑:

UI的操作实际上就是用另一种方式调用接口,那么接口有多少种参数组合就要求UI用例要构造多少种操作进行调用

UI操作所需要的数据可以用接口来生成

接口测试可以保证数据和逻辑的准确性,UI测试需要考虑交互和界面展示的逻辑正确性

UI测试需要重视接口调用不成功或者接口异常情况下UI的呈现方式和用户体验

UI中可能会有一些状态的缓存信息(这样就不需要每次频繁调用接口去获取了),比如鉴权信息等,需要重点关注这些缓存的更新策略

6、接口测试中上下游接口有数据依赖如何处理?

假如一个事务需要顺序调用2个接口:A和B接口, B依赖A接口的响应数据,这时候在执行B接口之前必须完成A接口,并通过某些手段获得A接口的特定数据给B接口使用。

上下游接口的数据依赖无非就是准备测试数据,数据一般有三种方式获得:

独立统一的测试数据库, A、B需要的数据都可以从库里拿到

假如B依赖A创造的数据,那么每次执行B之前必须执行A去做数据创建

通过正则表达式动态获得A的返回数据,并保存到变量中,通过参数化的方式传递给B接口

7、依赖于第三方数据的接口如何进测试?

可以使用SoapUI等工具直接调用第三方数据接口的webservice,通过返回值来查看第三方数据的接口是否调用正常。

也可以利用一些工具来模拟第三方的数据返回,最大限度的降低对第三方数据接口的依赖。

8、接口测试中依赖登录状态的接口如何测试?

依赖登录状态的接口的本质上是在每次发送请求时需要带上Session或者Cookie才能发送成功,在构建POST请求时添加必要的Session或者Cookie。

如果使用python+requests实现的话,可以使用session对象发送接口请求。

9、webService接口测试是什么?

webService接口有一套完整的协议标准,主要为soap协议,用来进行消息的传递,返回结果需要包装在一个soap协议指定的语法格式中。即使你只需要简单的返回字符1,也需要包装在协议种返回,协议描述了成功失败否,结果值等,可以通过soapUI测试工具去进行接口的模拟及测试。

web service接口的特点:

接口中实现的方法和要求参数一目了然。

不用担心大小写问题。

不用担心中文 urlencode 问题。

代码中不用多次声明认证(账号,密码)参数。

传递参数可以为数组,对象等。

10、如何获取接口的参数?

设计接口测试用例时,涉及的是电商系统,其中包括很多修改,如商品、商家、店铺等等,针对这些数据的修改,会涉及到很多参数。如商品的名称,商品的尺码,商品的颜色等等。

那在设计实现“修改”接口时,如何确定要传哪些参数?是只需要传我要修改的参数,还是全部参数都要传?

方式一、关键还是看后台逻辑实现

举例:User有两个属性username,password

后台逻辑实现:update User set username=? where id=xxx;

那么,如果你只想更新username的时候,可以不传password,其值是保持不变的。

后台逻辑实现:udpate User set username=?,password=? where id=xxx;

这种情况下,即使你只想更新username,也需要传password的值给后台,不然password就会被更新为空。

此外,还有一些数据如id等,如果sql中没有写,那即使传递了本字段的参数,数据库也不会更新。因此,在写关于“修改”的接口时,需要考虑一下,后台的逻辑是怎么实现的,然后确认要传递哪些参数。

方式二、抓包工具直接抓取接口情况分析

如果系统已经实现了,并且已经确定了接口逻辑,那么我们通过Fiddler等抓包工具,抓取到对应业务的请求报文,分析其中传递参数信息即可。

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

接口是获取和操作资源的方式,而大部分系统和产品中,资源一般都是产品的核心,比如微信核心资源就是通讯录关系链和聊天记录等,因此资源是必测的。

另外接口中大部分的内容是数据,通过数据的对比我们能推测到系统和产品的逻辑,测接口就是测逻辑。

最后接口中的返回相对单纯,不像web页面,html代码中有太多ui的东西,ui最不稳定,变化太快,接口相对稳定一点点,但是里面的干扰信息更少,断言相对容易很多。

12、HTTP接口传递数据最常用的方式?

Get方式是从服务器上获取数据;在做数据查询时,建议用Get方式;如:商品信息接口、搜索接口、博客访客接口等。

Post方式是向服务器传送数据 ;在做数据添加、修改或删除时,建议用Post方式 ;如:微博图片上传图片接口、登录注册接口等。

13、什么是接口测试?

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

接口测试的重点是检查数据的交换,传递的正确性,以及接口间逻辑依赖关系。

提交接口测试的重要意义:实现开发期并行测试,减少页面层测试的深度,缩短整个项目的测试周期。

14、我们测试的接口属于哪一类?

大多数的接口指的是HTTP接口,通常是指 B/S架构,由客户端(浏览器)调用,或模拟客户端(浏览器)调用服务器提供的API接口,由接口完成处理并返回一个应答的过程。

常见接口类型还有:Webservice接口,http接口,jms接口,hessian接口、REST接口。

15、接口测试用例编写的要点都包含哪些?

测试每个参数类型不合法的情况(等价类)

测试每个参数取值范围不合法的情况(等价类)

测试参数为空的情况(等价类)

测试参数前后台定义的一致性

测试每个参数的上下限(边界值)

如果两个请求有严格的先后顺序,需要测试调转顺序的情况(参数组合和顺序)

接口参数有可选和必选情况的参数组合测试(参数组合和顺序)

16、接口测试的基本步骤?

1)获取请求报文数据

通过fiddler工具或者API接口文档获得请求报文参数,其中就包括请求方式(get、post、put等)、URL地址、请求的query string parameter以及请求的body数据。

2)借助工具模拟请求报文并发送

把第一步中获得的参数,整理到jmeter、postman、soapui等接口参数工具中,模拟接口请求并发送该请求。

3)获得响应结果

使用接口测试工具发送请求后,会返回响应报文,分析响应报文中的数据是否是符合要求的。

4)断言:判断实际结果是否与预期相同

在工具中也可以添加预设的断言,在运行接口测试后,会自动返回接口是否实现正确。我们可以使用响应报文的响应状态码、响应的headers头部或者响应的正文数据(html、json格式等)进行断言。

17、HTTP协议的特点是什么?

1)HTTP是无连接

无连接的含义是限制每次连接只处理一个请求。服务器处理完客户的请求,并收到客户的应答后,即断开连接。采用这种方式可以节省传输时间。

2)HTTP是媒体独立的

这意味着,只要客户端和服务器知道如何处理的数据内容,任何类型的数据都可以通过HTTP发送。客户端以及服务器指定使用适合的MIME-type内容类型。

3)HTTP是无状态

HTTP协议是无状态协议。无状态是指协议对于事务处理没有记忆能力。缺少状态意味着如果后续处理需要前面的信息,则它必须重传,这样可能导致每次连接传送的数据量增大。另一方面,在服务器不需要先前信息时它的应答就较快。

18、HTTP客户端请求消息包含哪几部分?

客户端发送一个HTTP请求到服务器的请求消息包括以下格式:

请求行(request line)

请求头部(header)

空行

请求数据

19、HTTP服务器响应消息包含哪些信息?

HTTP响应由四个部分组成,分别是:

状态行

消息报头

空行

响应正文

20、常见的HTTP状态码

1xx -- 信息提示(表示临时的响应。客户端在收到常规响应之前,准备接收一个或多个1xx响应)

2xx -- 成功(表明服务器成功地接受了客户端请求)

3xx -- 重定向(客户端浏览器必须采取更多操作来实现请求。例如,浏览器可能不得不请求服务器上的不同的页面,或通过代理服务器重复该请求)

4xx -- 客户端错误(发送错误,客户端有问题。例如,客户端请求不存在的页面,客户端未提供有效的身份证验证信息)

5xx -- 服务器错误(服务器由于遇到错误而不能完成该请求)

上述是小编为大家整理的什么是接口测试—接口测试详解,什么是接口测试用例。


版权声明:本文内容由网络用户投稿,版权归原作者所有,本站不拥有其著作权,亦不承担相应法律责任。如果您发现本站中有涉嫌抄袭或描述失实的内容,请联系我们jiasou666@gmail.com 处理,核实后本网站将在24小时内删除侵权内容。

上一篇:想要测试Dubbo接口?测试的关键点在哪里?dubbo接口测试和http接口测试
下一篇:接口测试到底怎么做,看完这篇文章彻底搞清楚,接口测试怎么做的流程
相关文章

 发表评论

暂时没有评论,来抢沙发吧~