接口测试指南
1. 接口测试的目的
l 相较手工测试的方式,提升测试效率和质量,缩短测试周期
l 更早的发现问题 ,减少终端问题
l 能发现前端无法测试到的更底层的问题
2. 接口测试类型
l 功能测试:对功能性的业务逻辑检查和参数检查
l 异常处理测试:对异常输入/逻辑的检查
l 兼容性测试:对输入条件的各种组合和制约的关系进行检查
l 接口文档测试:对接口文档规范的检查,通常接口文档应该包含以下几个部分的信息:请求方式、请求参数、返回参数以及描述信息等
例1:前端各个列表页,统一使get接口,分页展示,不满足规范的接口就 需要整改
中台获取角色列表的接口/roles/getRoleList构造是合理的,但需要对name 参数做解释:
请求网址:
http://192.168.2.11:8086/api/v1/api/roles/getRoleList?pageNum=4 &pageSize=20&name=
反之业务端接口获取新品开发接口/pdDeve/query构造就是不合理的
请求网址:
http://192.168.2.11:8084/api/v1/pdDeve/query
请求方法:
POST

例2:新品开发-采购组长审批接口/pddvlp/pddvlp/purchaserApprove,接 口同时支持审批通过和不通过,所需要的参数各不相同。
不通过参数:
dvlpId: 63
reason: "XXXXXX"
state: 0
在参数描述中则需要对所有参数都做说明:

l 安全测试:满足OWASP TOP10的安全要求,列如失效的对象级别授权、失效的用户身份验证、SQL注入等
l 性能测试:1.关注于接口指标的测试,如响应时间、吞吐量等 2.压力测试
3. 接口测试用例设计方法
可以从输入、接口处理和输出三方面考虑:
针对输入,可根据参数类型进行测试用例设计;
常见的参数类型有:数字、字符串、数组、布尔值等。
针对数字:
等价类
取值范围内、取值范围外
边界值
取值范围边界:边界值最大、最小、最大+1、最小-1
数据类型边界:数据类型的最大值、最小值等
特殊值
0、负数、空
遍历法
对取值范围内的所有值进行遍历
针对字符串类型:
长度
等价类:取值范围内、取值范围外
边界值:规定范围边界
特殊值:空格、空字符串
内容
特定类型:中文、英文、大小写等
特殊字符:!@#¥%?&等
敏感字:英语法西斯等
针对数组:
数组成员个数
等价类:取值范围内、取值范围外
边界值:规定范围边界
数组成员内容
等价类:合法和非法成员
重复值:重复的成员
例:新品详情-详情回显(采购发起)的接口 /pddvlp/pddvlppurchaser/queryDvlpDetailsByPurchaser
参数只需要一个ID

则首先参数类型应该为int型更佳
其次考虑测试参数值:
对应token账号的ID
其他账号的ID
被删除账号的ID
0值,空,负数值,超大值,字符串类型值等
异常值不能统一报错:

针对接口处理,可按照逻辑进行测试用例设计;
针对业务逻辑:
约束条件:数值限制、状态限制、权限限制等
操作对象:检查是否能获取、编辑其他用户的数据
状态转换:检查对象状态的转换,状态改变后是否还可以继续之前的操 作
时序分析:业务包含了多个接口,而这一系列接口通常需要按照指定的 顺序来进行
针对输出,可根据结果进行测试用例设计;
例:新品开发获取产品类型的get接口/newProduct/list返回:

很明显json的结构并不统一,且字段children意义不明
接口用例设计多考虑以下几点:
1. 是否满足前提条件:有的接口需要首先满足一定条件,才可成功获取数据,例如需要token
2. 是否携带默认值参数:存在默认值的参数都不填写、不传参,必填参数都填写正确并且存在正确的常规值。
3. 业务逻辑、功能需求:根据具体的业务需求设计用例
4. 参数是否必填:针对每个必填参数设计用例
5. 参数之间是否存在关联
6. 参数数据类型限制
7. 参数自身的数据范围值限制校验
4. 接口测试流程
① 确定测试目标和范围:
确定要测试的接口和功能。
确定测试的重点和优先级。
确定测试环境和配置项。
② 收集接口信息:
获取接口文档、API规范或Swagger文档等。
确定接口的请求方式、请求参数、返回参数以及描述信息。
确定接口的身份验证和授权方式。
③ 设计测试用例:
根据接口规范和功能需求编写测试用例。
参照用例设计方法,确保测试用例全面覆盖接口的正常、异常输入和边界条件。
④ 配置测试环境:
配置测试环境,包括服务器、数据库和必要的测试数据。
确保测试环境的稳定性和一致性。
⑤ 执行接口测试:
使用接口测试工具或通过编程语言编写测试脚本执行接口用例并记录测试结果。
⑥ 处理测试结果:
对失败的测试用例进行分析,提交缺陷报告并跟踪。
⑦ 接口缺陷验证:
针对修复的缺陷重新执行相关测试用例,确保修复不引入新的问题。
⑧ 回归测试:
在接口或系统更新后,执行回归测试以确保接口功能稳定。
根据需求或接口变更,同步更新接口测试用例。
⑨ 文档编写和总结:
撰写接口测试报告,记录测试内容、结果和缺陷统计。
总结接口测试经验和教训,提出改进建议,以便在将来的项目中应用。
5. 接口性能测试流程
① 确定性能测试目标和范围:
确定要测试的接口和功能。
定义性能测试的关注点和指标,如响应时间、吞吐量、并发用户数等。
确定性能测试的环境和配置项。
② 收集接口性能信息:
获取接口文档、API规范或Swagger文档等。
确定接口的预期性能指标,如响应时间的阈值。
确定接口的并发限制和性能约束。
③ 设计性能测试方案:
确定负载模型,包括并发用户数、事务数和持续时间。
确定性能测试工具或框架,如JMeter、LoadRunner等。
创建性能测试脚本,模拟真实的用户行为和流量模式。
确定性能测试的数据量和数据生成方式。
④ 配置性能测试环境:
配置性能测试环境,包括服务器、网络和数据库等。
确保性能测试环境的稳定性和一致性。
⑤ 执行性能测试:
配置性能测试工具,包括线程数、并发数和监控指标。
执行性能测试并监控系统性能和指标。
收集性能数据,包括响应时间、吞吐量、错误率等。
⑥ 提交性能问题,分析和优化性能:
生成性能测试报告,包括测试概述、结果摘要和性能指标,提交性能问 题。
配合开发分析性能测试结果,优化接口性能,如代码调优、数据库优化 等。
⑦ 回归测试:
在接口或系统更新后,执行回归测试以确保接口性能稳定。
更新性能测试方案和负载模型。
⑧ 性能监控和警报(运维):
配置性能监控工具,设置性能警报和阈值,实时监测服务的性能指标, 及时发现并解决性能问题。
6. 接口自动化测试流程
① 确定自动化测试目标和范围:
自动化测试用例来自于功能测试用例,从用例中选择需要转换成自动化 脚本的功能用例。
② 选择适当的测试工具和框架:
选择适合项目的自动化测试工具,如Python、SoapUI、Apifox 等。
根据项目需求选择适当的测试框架,如pytest、JUnit、TestNG等。
③ 编写测试脚本:
使用选定的测试工具和框架编写自动化测试脚本,实现测试脚本中的测 试步骤并配置测试数据、断言和预期结果。
④ 执行自动化测试:
运行自动化测试脚本并记录测试结果,针对异常收集测试日志和错误报 告以便排查问题。
⑤ 处理测试结果:
分析和记录自动化测试结果,对失败的测试用例进行缺陷跟踪和报告, 缺陷修复后重新执行测试。
⑥ 持续集成:
将自动化测试脚本集成到持续集成(CI)工具中,如Jenkins,在每次 代码提交后执行自动化测试或定期执行自动化测试。
⑦ 维护与更新:
定期审查功能测试用例,同步更新对应自动化测试脚本,跟随接口和功 能的变化进行相应的调整和改进,以确保自动化测试的可维护性和可持 续性。
7. 接口测试用例设计实例
例1:
针对新品开发,新品审批详情查看接口GET /pddvlp/pddvlppurchaser/queryDvlpDetailsByPurchaser
只有一个参数

首先从接口文档测试角度出发,
1. 没有对接口参数做说明
2. 没有对返回响应做设置和说明
其次接口功能测试,我们可以通过下面几种情况进行验证:

例2:
转运中心,查看某条转运操作详情接口GET
/pdTransfer/getInfoBySerialNumber
定义有3个参数

我们需要对各个参数分别做单独的测试以及交集测试,下面列举一些用例:

例3:
转运中心,审批转运信息接口PUT
/pdTransfer/checkFee
Body参数是个JSON

我们可以从2块来考虑
1. 参数
列举一些用例:

2. 业务逻辑(对同一个id不能反复修改参数多次通过审批)
经过测试本例接口可以反复执行成功,就有问题
例4:
转运中心,查询转运列表接口POST(实际可以直接用GET)
/pdTransfer/getPage
Body参数是个JSON

首先一点,从线上测试环境可以发现,很明显前端在接口对接过程中并不清楚sort正确的取值

下面列举一些用例:

例5:
业务端转运中心,接口串联测试,从产品列表选择第一件产品发起1件的转运,并在转运列表检查生成的转运单详情是否一致

首先在APIfox自动化测试中新建一个发起转运的场景

添加需要串联测试的几条用例,其中登录接口用于获取token

细节:
在获取产品列表后,添加后置条件获取第一个商品的PDSKU存为临时变量


在确认转运接口将json数据中对应参数改成变量,如果是字符串类型就在两头加上””

在转运列表获取最新的一条数据的serialNumber,并通过get接口获取转运详情


添加后置断言,对应的PDSKU是否一致,发货数量是否是1

8. 接口测试计划
1. 接口文档在Apifox上持续维护,需要保证接口内容与develop环境中一致,否则测试即视为缺陷处理。
2. 单接口功能测试,在Apifox上进行用例创建与维护,保证所有情况都有用例覆盖,例:

3. 串联接口功能测试,在Apifox上通过添加不同的测试场景,关联多条测试用例来实现。
4. 接口自动化测试,计划使用开源框架:基于 Python + pytest + allure + log + yaml + mysql + redis + 企业微信通知 + Jenkins 实现的接口自动化框架。
可以通过将接口用例按规定格式稍作转换成yaml文件,即可自动生成脚 本并执行。例:
编写Ymal文件

Yaml文件生成对应的test_的py文件,包含对应条数的测试用例

点击执行,会遍历执行所有用例,生成对应的测试报告并发送结果通知。

9. tips
连接开发本地环境进行接口测试,暂时无法正常注册登录,拿不到token时
找到密码模式获取token的接口,执行

"token_type": "Bearer",
"access_token": "cc523de4-ff74-4a3c-8711-c0a155031101"
获得上面2个字段的信息
将其拼接后赋值给Authorization即可


