接口概念

关于接口的概念,根据个人的理解和认识大致把接口分为两类:程序接口和协议接口。

程序接口:

  关于程序接口,也可以看作是程序模块接口,具体到程序中一般就是提供了输入输出的类、方法或函数。对于程序接口的测试,一般需要使用与开发程序接口相同的编程语言。通过传入不同的参数,来验证程序接口的功能。

协议接口

 关于协议接口,一般指系统通过不同的协议来提供的接口,例如HTTP/SOAP协议等。这种类型接口对底层代码做了封装,通过协议的方式对外提供调用。因为不涉及程序层面,所以不受编程语言的限制:我们可以通过其它编程语言和工具进行测试。

接口分类

接口大体分为以下三类:

1、系统与系统之间的接口

软件的接口架构 软件接口类型有哪些_服务器

 系统与系统之间的接口,这里可以是公司内部不同系统之间的接口调用,也可以是不同公司之间系统接口的调用;例如:微博、微信、QQ提供的第三方登录。

2、下层服务对上层服务的接口

软件的接口架构 软件接口类型有哪些_软件的接口架构_02

应用层      :从认识上可以看成是系统所提供的UI层功能,对于Web系统来说,可以认为是浏览器页面上所提供的功能:登录、注册、查询、删除等。

 Service层 :可以理解为服务器所提供数据和逻辑的处理。

 DB层        :数据库主要用来存放数据,例如用户的个人信息、商品的信息等。

访问对象  :  它是一个面向对象的数据库访问接口。

  举例来说各层的工作过程:首先Service提供了一个查询接口--->这个接口需要一个参数(查询的关键字)--->然后应用层提供了一个输入框,需要用户输入查询关键字,并且还提供了一个查询按钮用于提交查询的关键字。当用户输入查询关键字并点击提交按钮后,相当于调用的查询接口,查询接口需要对用户提交的关键字做出相应的判断,是否为空?然后通过DAO层调用数据库,根据关键字查询表中的数据,最后再将拿到的数据返回给应用层,应用层负责将数据展示到Web页面上。

     在这个过程中,各层之间的交互就是通过接口,应用层与Service主要通过HTTTP接口。Service层与DB层主要通过DAO(Data Access Object)数据库访问接口。Python与MySQL之间调用,pymysql驱动就扮演着这样的角色。

3、系统内服务与服务之间的调用

软件的接口架构 软件接口类型有哪些_HTTP_03

系统内部,服务与服务之间的调用,大多情况下是程序之间的调用。本质就是:程序开发的函数或类方法,提供入参与返回值;

 为什么要对接口进行测试?

1 更早的发现问题

  测试应该更早的介入到项目开发中,因为越早的发现bug,修复成本越低。然而功能测试必须要等到系统提供可测试的界面才能对系统进行测试。然而接口测试可以在功能界面开发出来之前对系统进行测试,系统接口是上层功能的基础,接口测试可以更早更低成本的发现和解决问题。

2 缩短产品研发周期

  对于产品研发周期来说,如果将所有测试工作都集中在功能测试阶段,那么测试的问题和修复周期就会变长,因为测试可以更早的介入产品开发中,可以有效的控制功能阶段bug数量,从而有效的缩短产品开发周期。

3 发现更底层的问题

  系统的有些底层逻辑是在UI功能测试中不太容易触发的,那么这些逻辑可能会存在问题。接口测试可以更容易更全面的测试到这些底层的逻辑。

4 检查服务器的异常处理能力

  我们通常把前端的验证称为弱验证,因为它很容易被绕过,这个时候如果只站在功能的层面进行测试,很难发现一些安全的问题。接口测试就会很容易验证这些异常情况。

 Web接口

前后端分离是近年来Web应用开发的发展趋势。这种模式有如下优势:

1、 后端可以不用必须精通前端技术(HTML/JavaScript/CSS) , 只专注于数据的处理, 对外提供 API 接口。
2、 前端的专业性越来越高, 通过 API 接口获取数据, 从而专注于页面的设计。
3、 前后端分离增加接口的应用范围, 开发的接口可以应用到 Web 页面上, 也可以应用到移动 APP 上。 
在这种前后端分离的开发模式下,接口测试的工作就会变得尤为重要。

HTTP协议与JSON

在正确开发 Web 接口之前先来简单介绍一下 HTTP 协议和 Json 数据格式。 在当前 Web 接口开发中应用
最普遍的就是 HTTP 协议, 而 Json 是目前非常流行接口数据传输格式之一。
HTTP协议

  超文本传输协议是互联网上应用最为广泛的一种网络协议。

  HTTP协议的主要特点概况如下:

  1、支持客户/服务器模式

     简单快速:客户向服务器请求服务时,只需传送请求方法和路径。请求方法常用的有GET、POST。每种方法规定客户与服务器联系的类型不同。由于HTTP协议简单,使得HTTP服务器的程序规模小,因而通信速度非常快。

  2、灵活    : HTTP允许传输任意类型的数据对象,正在传输的类型有Content-Type加以标记。

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

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

HTTP请求类型

  请求行以一个方法符号开头,以空格分开,后面跟着请求的URL和协议的版本,格式如下:MethodRequest-URL HTTP-Version CRLF ,其中Method表示请求方法:Request-URL是一个统一资源标识符:HTTP-Version表示请求的HTTP协议版本:CRLF表示回车和换行(除了作为结尾的CRLF外,不允许出现单独的CR或LF字符)

 请求方法,各种方法的解释如下:

软件的接口架构 软件接口类型有哪些_服务器_04

响应状态码:

状态代码有三位数字组成,第一个数字定义了响应的类别,且有五种可能取值:

1xx   :    表示请求已接收,继续处理 ;

2xx  :   成功--表示请求已被成功接收、理解、接受 ;

3xx   :   重定向--要完成请求必须进行更进一步的操作;

4xx   :  客户端错误--请求有语错误或请求无法实现    ;

5xx   :  服务器端错误--服务器未能实现合法的请求    ;

常见状态代码、状态说明:

200   OK                         // 客户端请求成功

400   Bad Request       //  客户端请求有语法错误,不能被服务器理解

401   Unauthorized        //   请求未经授权,这个状态代码必须和WWW-Authenticate报头域一起使用

403   Forbidden            //    服务器收到的请求,但是拒绝提供服务

404   Not Found          // 请求资源不存在,输入错误的URL

500   Internal Server Error //服务器发生不可预期的错误

503   Server Unavailable   // 服务器当前不能出来客户端的请求,一段时间后可能恢复正常

请求头信息与相应头信息:

软件的接口架构 软件接口类型有哪些_服务器_05

 请求头信息

   请求报头允许客户端向服务器端传递请求的附加信息以及客户端自身的信息。

常用的请求报头:
Accept: 请求报头域用于指定客户端接受哪些类型的信息:image/gif:*/*, 表明客户端希望接GIF图像格式的资源;Accept:text/html,表示客户端希望接口html文本。

Accept-Encoding: 请求报头域类似于 Accept, 但是它是用于指定可接受的内容编码。

Accept-Language: 请求报头域类似于 Accept, 但是它是用于指定一种自然语言。 

Connection: 允许发送指定连接的选项。 例如指定连接是连续, 或者指定“close” 选项, 通知服务器,在响应完成后, 关闭连接。 从 HTTP/1.1 起, 默认都开启了 Keep-Alive, 保持连接特性。

Host(发送请求时, 该报头域是必需的) , Host 请求报头域主要用于指定被请求资源的 Internet 主机和端口号, 它通常从 HTTP URL 中提取出来的 。

User-Agent: 请求报头域允许客户端将它的操作系统、 浏览器和其它属性告诉服务器。 不过, 这个报头域不是必需的, 如果我们自己编写一个浏览器, 不使用 User-Agent 请求报头域, 那么服务器端就无法得知我们的信息了 。

响应头信息

  响应报头允许服务器传递不能放在状态行中的附加响应信息, 以及关于服务器的信息和对 Request-URI所标识的资源进行下一步访问的信息。

常用的响应报头

Location: 响应报头域用于重定向接受者到一个新的位置。 Location 响应报头域常用在更换域名的时候。

Server: 响应报头域包含了服务器用来处理请求的软件信息。 与 User-Agent 请求报头域是相对应的。 

WWW-Authenticate: 响应报头域必须被包含在 401(未授权的) 响应消息中, 客户端收到 401 响应消息时候, 并发送 Authorization 报头域请求服务器对其进行验证时, 服务端响应报头就包含该报头域。

X-Frame-Options: 有三个值: DENY 表示该页面不允许在 frame 中展示, 即便是在相同域名的页面中嵌套也不允许。 SAMEORIGIN 表示该页面可以在相同域名页面的 frame 中展示。

ALLOW-FROM uri 表示该页面可以在指定来源的 frame 中展示。

json

 JSON(JavaScript Object Notation) 是一种轻量级的数据交换格式,易于人阅读和编写。

{"Success":0,"Msg":"","Obj":{"AgentVerify":true,"BuildVerify":true,"ShHouseVerify":true,"RHouseVerify":true},"ExtendObj":null}

什么是Web接口

 接口只关心数据,它的输入和输出是具有一定格式的数据,接口并不关心数据展示在哪里,要以什么样式去展示。而HTML、CSS、JavaScript等关心的是数据展示在哪里,如何展示。

Web接口:https://cnodejs.org/api/v1/topics

返回json数据

软件的接口架构 软件接口类型有哪些_服务器_06