一、接口定义:
模块与模块之间的连接。用于数据的传输与接收。
二、接口分类:
内外来分:
系统对外的接口:B需要A的数据,A提供一个写好的方法来获取数据,B引用这个接口就能使用A写好的方法,获取数据。
程序内部的接口:方法与方法之间、模块与模块之间的交互。
原理来分:
1、webservice接口:soap协议,通过http传输,请求报文和返回报文都是xml格式。测试时需通过工具才能调用。
2、http api接口:http协议,通过路径区分调用的方法,请求报文都是key-value形式,返回报文一般都是json串,最常用的是GET、POST方法。
三、接口测试
对接口协议的一种测试。协议指的是,为了让这个接口实现某种需要的功能而设计的一种要求。测试系统组件间接口的一种测试,主要用于检测外部系统与系统之间任意内部各个子系统之间的交互点。
接口测试作为集成测试的一部分,通过直接控制API来判断系统的功能性,可靠性,性能与安全性。API测试是没有界面的,执行在通讯层。API 测试在自动化测试中有着重要的地位,因为API一般是应用逻辑的主要接口,而GUI测试在敏捷开发和DevOps的快速迭代和频繁变更中很难维护。
四、接口测试的必要性:
1、提高测试效率;
2、更早发现问题;
3、站在调用接口用户的角度对接口进行全面持续的检测;
4、自动化并且持续集成的;
五、接口测试测试流程
需求讨论、需求评审、场景设计、编写用例、准备数据、执行测试
六、接口测试标准
功能测试:功能实现、符合接口文档要求(如:关键字定义)
逻辑业务:逻辑业务依赖关系(如:非登录状态下,提交订单成功。通过修改Cookies测试)
异常测试:
1、参数异常:关键字参数、参数为空、参数多少、参数错误。
2、数据异常:关键字数据、数据长度、数据为空、数据错误。
七、接口测试设计测试用例
原理:模拟客户端向服务器发送请求报文,服务器接收请求报文并进行处理,然后向客户端返回应答,客户端接收应答的过程。
重点:接口功能符合用户需求。参数输入和输出,数据库修改,并发,幂等。
核心:持续集成是接口测试的核心。
优点:提高测试效率,提升用户体验,降低研发成本。
流程:拿到Http请求 -> 获取请求方法 -> 添加请求头、请求体 -> 发送请求 -> 接收响应 -> 查看响应结果
1、输入:
必填项校验
参数默认值校验
参数长度校验
参数值的有效性校验
参数组合校验
遍历枚举值参数
根据生成规则设计用例
2、接口逻辑:
分支覆盖 -> 路径覆盖 -> 场景覆盖,结合实际用户场景。
3、输出:
正常输出、异常输出
4、结合实际业务场景,去掉冗余的用例。
5、如果业务流程涉及到状态转换,需要单独设计测试用例
6、正交实验法
7、异常数据处理流程
八、接口测试需要掌握的知识
了解系统和内部各个组件之间的业务逻辑交互
了解接口的输入和输出
了解协议的基本内容:通信原理、三次握手、常用协议类型、报文构成、数据传输方式、状态码、URL构成
了解接口测试工具:Jmeter、Loadrunner、Postman、soapUI
了解数据库基基本操作 ,如:检查数据入库、提取测试数据等
了解常见的字符类型,比如:char、varchar、text、datatime等
九、其他
1、Http状态码:
200:请求发送成功
300:重定向。302:临时性重定向(访问一个Url时,被重定向到另一个url上,常用于页面跳转。)301:永久重定向。
400:客户端问题。401:表示发送的请求需要有通过 HTTP 认证的认证信息;403:表示对请求资源的访问被服务器拒绝;404:没有这个页面
500:服务端问题。500:服务器内部异常,503:由于临时的服务器维护或者过载,服务器当前无法处理请求。504:服务端超时。
常见:https://www.cnblogs.com/purewhite/p/10871851.html
2、Cookie和Session区别:
Cookie:客户端,不安全,单个Cookie保存的数据不能超过4k,很多浏览器限制一个站点保存20Cookies。
Session:服务器,安全,访问量多时,占用服务端性能。
3、GET和POST区别:
GET:获取数据,明文传输,参数跟在URL后面,不安全。提交参数有字符限制,可以被当作书签保存。
POST:提交数据,参数放在表单,安全。不存在字符限制。
4、App端、接口测试区别:
App端性能测试:手机cpu、内存、流量、fps
接口性能测试:接口响应时间、并发、服务端资源使用情况。
5、HTTP请求结构:
常见的响应头字段含义:
Allow:服务器支持哪些请求方法(如GET、POST等)。
Content-Encoding:文档的编码(Encode)方法。
Content-Length:表示内容长度。
Content- Type:表示后面的文档属于什么MIME类型。HttpServletResponse提供了一个专用的方法setContentType。
Date:当前的GMT时间,例如,Date:Mon,31Dec200104:25:57GMT。
Expires:告诉浏览器把回送的资源缓存多长时间,-1或0则是不缓存。
Last-Modified:文档的最后改动时间。
Location:这个头配合302状态码使用,用于重定向接收者到一个新URI地址。
Refresh:告诉浏览器隔多久刷新一次,以秒计。
Server:服务器通过这个头告诉浏览器服务器的类型。
Set-Cookie:设置和页面关联的Cookie。
Transfer-Encoding:告诉浏览器数据的传送格式。
WWW-Authenticate:实现登录验证。
HttpServletResponse还提供了许多设置
setContentType:设置Content-Type头。大多数Servlet都要用到这个方法。
setContentLength:设置Content-Length头。对于支持持久HTTP连接的浏览器来说,这个函数是很有用的。
addCookie:设置一个Cookie(Servlet API中没有setCookie方法,因为应答往往包含多个Set-Cookie头)。
常见通用头含义:
Cache-Control:指定请求和响应遵循的缓存机制。在请求消息或响应消息中设置 Cache-Control并不会修改另一个消息处理过程中的缓存处理过程。请求时的缓存指令包括no-cache、no-store、max-age、 max-stale、min-fresh、only-if-cached,响应消息中的指令包括public、private、no-cache、no- store、no-transform、must-revalidate、proxy-revalidate、max-age。各个消息中的指令含义如下:
Public指示响应可被任何缓存区缓存。 Private指示对于单个用户的整个或部分响应消息,不能被共享缓存处理。这允许服务器仅仅描述当用户的部分响应消息,此响应消息对于其他用户的请求无效。 no-cache指示请求或响应消息不能缓存 no-store用于防止重要的信息被无意的发布。在请求消息中发送将使得请求和响应消息都不使用缓存。 max-age指示客户机可以接收生存期不大于指定时间(以秒为单位)的响应。 min-fresh指示客户机可以接收响应时间小于当前时间加上指定时间的响应。 max-stale指示客户机可以接收超出超时期间的响应消息。如果指定max-stale消息的值,那么客户机可以接收超出超时期指定值之内的响应消息。
Date:表示消息发送的时间,时间的描述格式由rfc822定义。例如,Date:Mon,31Dec200104:25:57GMT。Date描述的时间表示世界标准时,换算成本地时间,需要知道用户所在的时区。
Pragma:用来包含实现特定的指令,最常用的是Pragma:no-cache。在HTTP/1.1协议中,它的含义和Cache-Control:no-cache相同。
(2)实体头域
请求消息和响应消息都可以包含实体信息,实体信息一般由实体头域和实体组成。实体头域包含关于实体的原信息,实体头包括Allow、Content- Base、Content-Encoding、Content-Language、 Content-Length、Content-Location、Content-MD5、Content-Range、Content-Type、 Etag、Expires、Last-Modified、extension-header。extension-header允许客户端定义新的实体头,但是这些域可能无法未接受方识别。实体可以是一个经过编码的字节流,它的编码方式由Content-Encoding或Content-Type定义,它的长度由Content-Length或Content-Range定义。
常见实体头含义:
Content-Encoding: 服务器通过这个头告诉浏览器数据的压缩格式。
Content-Length: 服务器通过这个头告诉浏览器回送数据的长度。
Content-Disposition:告诉浏览器以下载方式打开数据。
Content-Type:服务器通过这个头告诉浏览器回送数据的类型。Content-Type实体头用于向接收方指示实体的介质类型,指定HEAD方法送到接收方的实体介质类型,或GET方法发送的请求介质类型。
Content-Range:用于指定整个实体中的一部分的插入位置,他也指示了整个实体的长度。在服务器向客户返回一个部分响应,它必须描述响应覆盖的范围和整个实体长度。一般格式:
Content-Range:bytes-unitSPfirst-byte-pos-last-byte-pos/entity-legth
例如,传送头500个字节次字段的形式:Content-Range:bytes0- 499/1234,如果一个http消息包含此节(例如,对范围请求的响应或对一系列范围的重叠请求),Content-Range表示传送的范围, Content-Length表示实际传送的字节数。
Last-Modified:指定服务器上保存内容的最后修订时间。
ETag:缓存相关的头
Expires:告诉浏览器把回送的资源缓存多长时间 -1或0则是不缓存
其中三种禁止浏览器缓存的头字段:
Expires:-1或0
Cache-Control:no-cache
Pragma:no-cache
注:
1、JSON:通用的数据类型,经过稍稍加工就可以转换成其他语言的数据类型。
2、xml:指可扩展标记语言,被设计用来传输和存储数据。
参考链接:
https://blog.csdn.net/nikita1995/article/details/82494416