

Q1:接口具体分为哪两种?各自的作用是什么?
接口主要分为「程序内部接口」和「系统对外接口」,两者的核心作用的是实现"数据交互",但应用场景不同:
- 程序内部接口:是程序内部方法与方法、模块与模块之间的交互通道。
比如贴吧系统,有登录模块、发帖模块,要发帖必须先登录,这两个模块之间的交互,就需要内部接口来实现,供系统内部调用。
- 系统对外接口:是不同系统之间共享数据的通道。别人不会直接共享数据库给你,只会提供一个写好的方法(接口),你通过调用这个接口,就能获取所需数据。比如我们常用的APP、网站,加载数据时,都是通过调用对外接口来实现的。
补充:接口类型有很多,比如HTTP API接口、RPC接口等,我们日常测试中最常用的就是HTTP API接口,后续内容也围绕它展开。
Q2:什么是接口测试?它和功能测试有什么区别?
接口测试是测试系统组件间接口的一种测试,核心是检测外部系统与系统之间、内部子系统之间的交互点,重点检查数据的交换、传递、控制管理过程,以及系统间的逻辑依赖关系。
简单说,接口测试就是通过验证"入参"和"出参",判断接口是否符合功能性、安全性要求。
和功能测试的核心区别的:
-
功能测试:有前端页面,需要从页面输入值,点击按钮/链接传值给后端,还要测试UI、前端交互等;
-
接口测试:没有前端页面,只需根据接口文档,拼接请求地址、请求参数,发送请求后检查返回结果,只关注入参和出参,相对更简单。
Q3:一个完整的接口,由哪些部分组成?
A:参考微信小程序的接口文档,一个完整的接口至少包含3个核心部分,部分接口会额外包含请求头(header):
-
调用URL:接口的请求地址,相当于接口的"门牌号";
-
请求方法:最常用的是GET和POST
-
请求参数:包括入参(传给服务器的参数)和出参(服务器返回的参数),还要明确参数类型、参数说明;
-
可选部分-请求头(header):服务器接收请求前的"校验凭证",一般存放cookie、token等信息,用于验证请求是否有权限。
Q4:请求头(header)和入参都是传送给服务器的参数,两者有什么区别?
两者虽然都是发送到服务器的参数,但作用和执行顺序不同,核心区别在于"校验优先级":
1. 作用不同:
header存放的是「校验信息」(如cookie、token),用于验证请求是否有权限访问服务器;
入参存放的是「业务数据」(如商品ID、用户名),用于服务器处理具体业务逻辑。
2. 执行顺序不同:
服务器会先接收header信息,判断请求是否有权限;只有验证通过后,才会接收请求地址和入参,再根据入参处理业务,返回出参。
Q5:功能测试已经覆盖了业务场景,为什么还要额外做接口测试?
核心原因是「前端校验可被绕过」,只做功能测试会留下安全隐患,举个案例:
比如用户注册功能,规定用户名为6~18个字符(含字母、数字、下划线),功能测试时会测试"输入20个字符""输入特殊字符"等场景,但这些校验可能只在前端做了限制。如果有人通过抓包绕过前端校验,直接向后端发送不符合规则的用户名,而后端没有做校验,就会导致用户名随意设置,甚至可能通过SQL注入获取管理员权限,风险极大。
所以接口测试的必要性主要体现在4点:
-
发现页面操作无法发现的bug(比如后端未做参数校验);
-
检查系统的异常处理能力(比如参数错误时的报错是否合理);
-
保障系统的安全性、稳定性(防止绕过校验、权限越权等问题);
-
降低维护成本:前端页面可随意修改,只要接口测试通过,后端无需同步修改。
Q6:最常用的GET和POST请求,有什么核心区别?怎么快速区分?
两者都是HTTP协议中常用的请求方法,核心区别在于"请求方式"和"使用场景":
-
GET请求:请求参数会直接拼接在URL后面,可直接在浏览器中输入URL访问(比如:https://gateway.acgo.cn/acgoAccount/openapi/user/detail?uid=36482),适合获取数据(无需修改数据)。
-
POST请求:请求参数不会显示在URL中,需要借助测试工具(如Postman)发送,适合提交、修改、删除数据(比如注册、下单、删除商品)。
快速区分:浏览器能直接访问的,就是GET请求;不能直接访问,需要工具辅助的,大概率是POST请求。
Q7:HTTP状态码是什么?常用的状态码有哪些,分别代表什么意思?
HTTP状态码是服务器对请求的"响应标识",每发送一个HTTP请求,服务器都会返回一个状态码,用于判断请求是否成功,常用状态码分为4类,记好这几个就够日常测试用:
-
2xx(成功):最常用200,表示请求成功,服务器正常返回数据;
-
3xx(重定向):最常用302,表示请求被重定向到其他地址;
-
4xx(客户端错误):400(请求有语法错误)、401(未授权访问)、403(无权限访问)、404(请求地址不存在);
-
5xx(服务器错误):500(服务器内部异常)、504(服务器超时,未返回结果)。
Q8:用Python做接口测试,需要掌握哪些模块和框架?
新手入门,掌握「5大模块+1个框架」就足够,后续可根据需求拓展:
- 5大核心模块:
-
requests模块:核心模块,用于发送HTTP请求(GET、POST等);
-
YAML:用于管理测试数据(比如存储接口参数、配置信息);
-
JSON Schema:用于校验接口返回结果的格式是否符合预期;
-
logging日志模块:用于记录测试过程中的日志,方便定位问题;
-
allure测试报告模块:用于生成美观、详细的测试报告,直观展示测试结果。
- 1个核心框架:pytest,用于组织测试用例、执行测试、生成测试结果,比Python自带的unittest更简洁、易用。
Q9:接口测试的核心步骤是什么?
接口测试核心就两步,简单好记:
-
设计接口测试用例:根据接口文档和业务逻辑,设计覆盖所有场景的测试用例(重点是入参的各种情况);
-
执行测试用例:借助工具(Postman)或代码(Python+requests)发送请求,检查返回结果(状态码、出参)是否符合预期,记录测试结果。
Q10:接口测试用例怎么设计?有哪些核心场景?
设计用例的核心是「覆盖所有可能的入参场景」,主要分为4类,每类都有具体示例,直接套用即可:
- 通过性验证(最基础):按照接口文档的要求,传入正确的必填参数,验证接口能否正常返回正确结果。
示例用例:接口正常调用测试,前置条件是接口服务正常运行,步骤是传入所有必填参数、调用接口,预期结果是返回状态码200,返回数据完整。
- 参数组合验证:针对有多个参数、不同参数值对应不同业务逻辑的接口,测试不同参数组合的场景。
示例用例:商品操作接口,type=1(修改商品)时,商品ID、名称、价格至少传一个;type=2(删除商品)时,商品ID必传,分别测试"type=1只传商品名称""type=1传所有参数""type=2传商品ID"等场景。
- 接口安全验证(重点):防止接口被恶意调用,核心测试4个场景:
-
绕过参数验证(比如修改商品价格为负数、低价);
-
绕过身份授权(比如普通用户调用卖家专属的修改商品接口);
-
参数加密验证(比如登录接口的用户名、密码是否加密,加密规则是否安全);
-
密码安全校验(比如密码是否符合复杂度要求)。
- 异常验证(必测):不按照接口文档要求传入参数,验证接口的异常处理能力,主要3类场景:
-
必填参数缺失(比如删除商品时,不传商品ID);
-
参数类型错误(比如需要传入整数,却传入字符串);
-
参数长度超限(比如用户名限制10个字符,传入11个)。
Q11:结合业务逻辑设计用例,是什么意思?怎么操作?
结合业务逻辑设计用例,就是根据系统的具体业务规则,设计贴合实际使用场景的用例,和功能测试的用例设计思路一致,不同公司业务不同,用例也不同。
举个贴吧系统的例子,结合业务规则设计用例:
-
业务规则1:登录失败5次,需等待15分钟再登录 → 用例:连续登录失败5次,第6次登录,验证是否提示"需等待15分钟";
-
业务规则2:新注册用户需过实习期才能发帖 → 用例:新注册用户直接调用发帖接口,验证是否提示"未过实习期,无法发帖";
-
业务规则3:删除帖子扣除积分 → 用例:调用删除帖子接口,验证帖子删除成功,且用户积分对应扣除。
建议从"工具实操"入手,先熟悉流程,再学代码,步骤如下:
-
先熟悉接口文档:看懂URL、请求方法、参数、header等核心信息;
-
用Postman实操:手动输入URL、请求方法、参数,发送请求,查看返回结果和状态码,熟悉常用场景;
-
学习Python+requests:用代码发送请求,实现简单的接口自动化(比如批量执行用例);
-
学习pytest+allure:组织用例、生成测试报告,提升测试效率。