
一接口测试1.1 初步认识接口接口一般分为两种一种是程序内部的接口一种是系统对外的接口程序内部的接口程序内部的接口是指方法与方法之间、模块与模块之间的交互。比如贴吧系统有登录模块、发帖模块等等那你要发帖就必须先登录要发帖就得登录那么这两个模块就得有交互它就会抛出一个接口供内部系统进行调用。这种接口通常不对外暴露只服务于系统内部各组件之间的协作。系统对外的接口系统对外的接口是指从别的网站或服务器上获取资源或信息时对方不会把数据库直接共享给你而是提供一个他们写好的方法来获取数据你引用他提供的接口就能使用他写好的方法从而达到数据共享的目的。比如咱们用的 app、网址这些它在进行数据处理的时候都是通过接口来进行调用的。接口类型有很多如 HTTP API 接口、RPC 等等接下来我们基于 HTTP API 接口继续讲解。1.2 详解接口测试接口测试是测试系统组件间接口的一种测试。接口测试主要用于检测外部系统与系统之间以及内部各个子系统之间的交互点。测试重点为数据的交换传递和控制管理过程以及系统间的逻辑依赖的关系。简单来说接口测试就是通过测试不同情况下的入参与之对应的出参信息来判断接口是否符合或满足相应的功能性安全性要求。一个完整的接口文档应该包含以下内容接口说明调用 URL请求方法get/post请求参数、参数类型、请求参数说明返回参数说明由接口文档可知接口至少应有请求地址、请求方法、请求参数入参和出参组成部分接口还有请求头 header。标头header是服务器以 HTTP 协议传 HTML 资料到浏览器前所送出的字符串在标头与 HTML 文件之间尚需空一行分隔一般存放 cookie、token 等信息。header 和入参有什么关系它们不都是发送到服务器的参数吗它们确实都是发送到服务器里的参数但它们是有区别的。header 里存放的参数一般是一些校验信息比如 cookie它是为了校验这个请求是否有权限请求服务器如果有它才能请求服务器然后把请求地址连同入参一起发送到服务器然后服务器会根据地址和入参来返回出参。也就是说服务器是先接受 header 信息进行判断该请求是否有权限请求判断有权限后才会接受请求地址和入参的。1.3 如何执行接口测试接口其实就是前端页面或 APP 等调用与后端做交互用的有人会问功能测试都测好了为什么还要测接口呢先举个栗子比如测试用户注册功能规定用户名为 6~18 个字符包含字母区分大小写、数字、下划线。首先功能测试时肯定会对用户名规则进行测试比如输入 20 个字符、输入特殊字符等但这些可能只是在前端做了校验后端可能没做校验如果有人通过抓包绕过前端校验直接发送到后端怎么办呢试想一下如果用户名和密码未在后端做校验而有人又绕过前端校验的话那用户名和密码不就可以随便输了吗如果是登录可能会通过 SQL 注入等手段来随意登录甚至可以获取管理员权限那这样不是很恐怖所以接口测试的必要性就体现出来了可以发现很多在页面上操作发现不了的 bug检查系统的异常处理能力检查系统的安全性、稳定性前端随便变接口测好了后端不用变在进行接口测试前还需要了解以下内容1. get 和 post 请求get 和 post 是常见的请求方法。如果是 get 请求的话直接在浏览器里输入就行了只要在浏览器里面直接能请求到的都是 get 请求如果是 post 请求的话就不行了就得借助工具来发送。2. http 状态码每发出一个 http 请求之后都会有一个响应http 本身就会有一个状态码来标示这个请求是否成功常见的有以下几种2002 开头表示这个请求发送成功最常见的就为 200 代表这个请求是正确的且服务器也返回了3003 开头的代表重定向最常见的是 302表示把这个请求重定向到别的地方了400400 代表客户端发送的请求有语法错误401 代表访问的页面没有权限了403 表示没有权限访问这个页面404 代表没有这个页面5005 开头代表服务器有异常500 代表服务器内部异常504 代表服务器端超时没返回结果接口测试可分为两部分去完善通过接口设计用例 结合业务逻辑来设计用例1.4 接口用例编写1.4.1 接口用例的编写通过性验证首先要保证这个接口功能是好使的也就是正常的通过测试按照接口文档上的参数正常传入是否可以返回正确的结果。这是最基础的一步只有接口能正常跑通后续的各类验证才有意义。1.4.2 参数组合现在有一个操作商品的接口有个字段 type传 1 的时候代表修改商品商品 id、商品名称、价格有一个是必传的type 传 2 的时候是删除商品商品 id 是必传的这样的就要测参数组合了type 传 1 的时候只传商品名称能不能修改成功id、名称、价格都传的时候能不能修改成功。参数组合测试的核心思路是同一个接口在不同参数搭配下后端能否正确处理每一种合法组合同时也能识别出非法组合。1.4.3 接口安全接口安全测试主要关注接口在异常或恶意场景下的防护能力常见的有以下几类绕过验证比如购买了一个商品它的价格是 300 元那我在提交订单的时候把这个商品的价格改成 3 元后端有没有做验证更极端一点把价格改成 -3是不是我的余额反而会增加这类问题往往隐藏在后端对关键字段的校验逻辑中。绕过身份授权比如修改商品信息的接口必须得是卖家才能修改那我传一个普通用户能不能修改成功我传一个其他的卖家能不能修改成功这考验的是接口对操作者身份的校验是否严格。参数是否加密比如登录接口用户名和密码是不是加密传输的如果不加密别人拦截到你的请求就能直接获取到你的账号信息同时还要看加密规则是否容易被破解。密码安全规则密码的复杂程度校验是否到位比如是否强制要求包含字母、数字和特殊字符长度是否有限制等。1.4.4 异常验证所谓异常验证也就是不按照接口文档上的要求输入参数来验证接口对异常情况的校验能力。比如必填的参数不填输入整数类型的地方传入字符串类型长度限制为 10 的传入 11总之就是文档说怎么来我就不怎么来。归纳起来其实就三种情况必传非必传、参数类型、入参长度。通过这类测试可以很好地暴露后端在参数校验上的漏洞。1.4.5 结合业务逻辑来设计用例根据业务逻辑来设计用例就是结合自己系统的实际业务场景来设计测试用例这一点每个公司的业务不同需要具体问题具体分析其实这也和功能测试设计用例的思路是一致的。举个例子拿贴吧来说贴吧的需求可能是这样的登录失败 5 次就需要等待 15 分钟之后再登录新注册的用户需要过了实习期才能发帖删除帖子会扣除积分连续签到会有额外的积分奖励像这样需要把这些业务规则梳理成测试点然后再去构造对应的测试数据逐一验证每个测试点是否符合预期。业务逻辑测试往往能发现单纯从接口文档出发发现不了的问题因为很多规则是隐藏在业务背后的。二小结hello啊老铁们消失人口回归了。其实每天上班也没有特别累但是回来就是因为这样那样的事情没有学习。后面不会这样了(希望吧)。一篇文章不想写的太长想把内容细化一点所以大概率等会还会在更新一篇哦