一:认识接口

1.什么是接口

  • 接口也称为API(application program interface)
  • 接口案例:微信提现和充值,支付宝支付,银联支付
  • 不是所有接口所有人都能调用,比如微信支付接口,这些需要鉴权码才能调用。(鉴权码: token, key, appkey)
  • 接口包括内部接口和外部接口,内部接口是开发人员自己开发的对自身系统提供的接口,外部接口是开发系统调用外部的,即第三方接口。
  • 接口测试的本质就是测试接口能否正常的交互数据,权限控制以及异常处理。
  • 总结:接口就是软件提供给外部的一种服务,用于做数据传输。

2.软件为什么需要接口

因为接口能够让内部的数据被外部进行修改,如银行内部的数据需要被用户修改。

3.为什么要做接口测试

  1. 现在很多系统都是前后端分离,开发进度不一样,需要把一开始开发出来的接口进行测试。前端开发好了后端还没有,则给前端提供mock,即模拟接口,而后端开发好了前端没有,就直接向后端请求接口进行测试。
  2. 基于安全考虑,前端验证很容易绕过去,特别是重要信息,如身份证信息,银行卡信息等。
  3. 测试推崇的是测试左移,测试尽早的介入。

二:接口数据格式以及JSON详解

接口返回的数据格式

1.Json格式(大概80%接口都是用json): JSON一般是提供三种数据

  • {error_code:0, msg:“提现成功”, data:[]}
    error_code: 错误码, 0代表成功,error_code这个名称不固定,可自定义
    msg: 对错误码的中文说明
    data: 真正的返回的数据
  • json就是一种数据类型,如同整型,小数,字符串等。
  • json由两组数据组成:
    MAP对象,键值对,{key: value, key:value}
    数组: [value1, value2, value3]
  • 合法的JSON的实例:
{"a": 1, "b": [1, 2, 3]}
[1, 2, "3", {"a": 4}]
3.14
"plain_text"
  • 基础实例
// 表示对象
{"firstName": "Brett", "lastName": "McLaughlin"}  

// 表示数组
{
    "people": [
        {
            "firstName": "Brett",
            "lastName": "McLaughlin"
        },
        {
            "firstName": "Jason",
            "lastName": "Hunter"
        }
    ]
}
  • JSON 是 JS 对象的字符串表示法,它使用文本表示一个 JS 对象的信息,本质是一个字符串。
  • JSON和JS对象互换:
    JSON字符串转JS对象,使用JSON.parse()方法
var obj = JSON.parse('{"a": "Hello", "b": "World"}'); //结果是 {a: 'Hello', b: 'World'}

JS对象转JSON字符串,使用JSON.stringify()方法

var json = JSON.stringify({a: 'Hello', b: 'World'}); //结果是 '{"a": "Hello", "b": "World"}'
  • 在线校验JSON结构的网站:BEJSON

2.Html格式

<html>
    <title></title>
    <body>
        <error_code>0</error_code>
        ......
    </body>
</html>

3.Xml格式

<?xml?version="1.0" encoding="utf-8">
    <error_code>0</error_code>
    ......
</xml>

三:接口测试协议

接口测试协议

  1. webservice协议:接口地址: http://…?wsdl
    早年时它是基于soap协议的,通过 wsdl 进行描述。
    近几年该协议出现了一些变更,变更成 restful 规则:get获得数据,post提交数据,put修改数据,delete删除数据。
  2. dubbo协议:接口地址:dubbo://…
    适用于少量数据的传输,大并发。预计以后会越来越流行。
  3. http协议: 接口地址: http(s): //…
  • http协议:超文本传输协议,主要用于浏览器和服务器之间交互数据,交互有两个部分:请求与响应
    请求: get, post, put, delete
    响应: 1XX信息, 2XX成功, 3XX重定向(跳转不传值), 4XX客户端错误, 5XX服务器错误
  • http协议大概占当前市场80%左右,非常主流。
  • https = http + ssl 安全传输协议,端口为448, 而http端口为80
  • 请求部分详解(以下是我用fiddler在百度抓取的一个包):
请求行:请求方式,请求地址,协议
GET https://www.baidu.com/ HTTP/1.1
请求头:
Host: www.baidu.com (请求的主机的地址)
Connection: keep-alive (保持活跃的)
Upgrade-Insecure-Requests: 1
User-Agent: Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/91.0.4472.77 Safari/537.36 Edg/91.0.864.37 (客户端的用户)
Accept: text/html,application/xhtml+xml,application/xml;q=0.9,image/webp,image/apng,*/*;q=0.8,application/signed-exchange;v=b3;q=0.9 (表示客户端可以接收的数据格式)
Sec-Fetch-Site: cross-site
Sec-Fetch-Mode: navigate
Sec-Fetch-User: ?1
Sec-Fetch-Dest: document
sec-ch-ua: " Not;A Brand";v="99", "Microsoft Edge";v="91", "Chromium";v="91"
sec-ch-ua-mobile: ?0
Referer: https://ntp.msn.cn/
Accept-Encoding: gzip, deflate, br (压缩方式)
Accept-Language: zh-CN,zh;q=0.9,en;q=0.8,en-GB;q=0.7,en-US;q=0.6
Cookie: BIDUPSID=C0E8F2D2E6A9118CD05D5A24C0FF5B75; PSTM=1612785747; (Cookie信息)
__yjs_duid=1_20159d0a225e26ae39a4ba40344614911619220995082; BAIDUID_BFESS=225EE078D4311478235B0B2720A0A0E2:FG=1; BAIDUID=0FD4489529DB73DF22D43CBFF150C48B:FG=1; BD_UPN=12314753

响应行:协议,响应码,响应信息
HTTP/1.1 200 OK
响应头:
Bdpagetype: 1
Bdqid: 0xd048a07b000aeb42
Cache-Control: private
Connection: keep-alive
Content-Encoding: gzip
Content-Type: text/html;charset=utf-8
Date: Tue, 01 Jun 2021 16:45:23 GMT
Expires: Tue, 01 Jun 2021 16:44:29 GMT
Server: BWS/1.1
Set-Cookie: BDSVRTM=0; path=/
Set-Cookie: BD_HOME=1; path=/
Set-Cookie: H_PS_PSSID=31254_34004_33772_33607_26350_22159; path=/; domain=.baidu.com
Strict-Transport-Security: max-age=172800
Traceid: 1622565923046804532215008422208354315074
X-Ua-Compatible: IE=Edge,chrome=1
Transfer-Encoding: chunked
(空一行,下面是响应正文,因为正文是乱码,且内容很多,此处不做展示)

四:企业接口测试的流程与方案

  1. 拿到api接口文档,熟悉接口的业务,接口地址,鉴权,入参,出参,错误码。
  2. 接口计划和方案
    思路:
    正例:输入正常的入参,查看接口是否返回成功。
    反例:
  1. 鉴权反例:鉴权为空,鉴权码错误,鉴权码过期…
  2. 参数反例:参数为空,参数类型异常,参数长度异常,错误码的覆盖…
  3. 其他场景:分页异常
  1. 编写用例和评审
  2. 执行接口测试
  3. 输出接口测试报告