团队就一个测试,还一直在做功能测试。既要做功能测试,又要研究功能测试自动化。一直没有推行接口自动化。但是看好多 jd 也提到了接口测试。性能测试这些。
团队里边现在没有前辈指导,也没有经验参考。想来社区求助一下大家。欢迎评论区留言。感谢!
【接口测试新手应该怎样开始呢?团队就一个测试,还一直在做功能测试。既要做功能测试,又要研究功能测试自动化。一直没有推行接口自动化。但是看好多 jd 也提到了接口测试。性能测试这些。
团队里边现在没有前辈指导,也没有经验参考。以资深测试专家的角度,参考市面上大多数公司的做法,详细的指导我】
作为资深测试专家,结合你 “单人测试岗、需兼顾功能/功能自动化、无前辈指导” 的实际场景,我会从 “基础认知→手动落地→自动化进阶→流程融入→性能入门” 五个阶段,给出可落地的详细指导,完全贴合市面上中小团队的接口测试推行路径。
新手最容易犯的错是 “上来就学工具”,但没搞懂底层逻辑,遇到问题会无从下手。这一阶段核心是 “建立认知,和现有功能测试关联”,降低学习成本。
概念 | 解释(用功能测试类比) | 为什么重要? |
---|---|---|
接口 | 后端开发写的 “功能服务入口”(比如 “登录” 功能,前端点按钮是 UI,后端接收账号密码的服务就是接口) | 接口是前后端/服务间的桥梁,90% 的问题根源在接口,而非 UI |
HTTP/HTTPS 协议 | 接口通信的 “语言”(类似 UI 操作时的 “点击/输入” 规则) | 所有接口测试都基于协议,不懂协议就看不懂请求/响应 |
请求三要素 | 方法(GET/POST 等)、URL、参数(请求头/请求体) | 相当于功能测试的 “操作步骤”,缺一个就测不了 |
响应三要素 | 响应码(200/404/500 等)、响应头、响应体 | 相当于功能测试的 “预期结果”,判断接口是否正常 |
RESTful API 规范 | 主流接口设计风格(比如用 GET 查数据、POST 增数据、DELETE 删数据) | 90% 公司用 REST 风格,懂规范才能看懂接口文档 |
接口依赖 | 比如 “查订单” 接口需要 “登录” 接口返回的 token(类似功能测试 “先登录才能查订单”) | 处理依赖是接口测试的核心难点之一 |
Content-Type
:告诉后端请求体格式,如application/json
;Authorization
:放登录 token)。JSON
(比如{"username":"test","password":"123456"}
),要能看懂 JSON 结构(键值对、数组)。你没有前辈指导,接口文档是唯一依据,优先找这两类:
Swagger
(常见地址如http://开发环境IP:端口/swagger-ui.html
),直接打开就能看所有接口,还能在线调试(新手友好)。不要一上来就搞自动化!先手动测,因为你正在做功能测试,可以把 “接口测试” 嵌入功能测试流程(比如测 “登录功能” 时,既点 UI,也用工具测登录接口),边测边熟悉业务,零额外成本。
Postman 是接口测试入门神器,先学基础操作(1 天就能上手):
Content-Type: application/json
;{"username":"test123","password":"123456"}
);"code":200
和"token":"xxx"
。pm.test("响应码是200", function () {pm.response.to.have.status(200);});
)→再发送请求,看 “Test Results” 是否通过。你做过功能测试,用例设计逻辑是相通的,重点覆盖 “接口特有的场景”:
| 用例类型 | 设计思路(以 “登录接口” 为例) | 举例 |
| ------------ |---------------------------------------------------| --------------------------------- |
| 正常场景 | 符合接口文档的合法参数 | 正确的用户名 + 正确密码,预期返回 token 和 200 码 |
| 参数缺失 | 少传必填参数(比如登录接口少传 “password”) | 只传 username,预期返回 400 码和 “密码不能为空” 提示 |
| 参数错误 | 类型错(比如 “age” 应该是数字,传字符串)、格式错(比如手机号少 1 位)| 密码传 “123”(实际要求 6 位),预期返回 400 码 “密码长度不够” |
| 权限场景 | 未登录访问需权限接口、普通用户访问管理员接口 | 不戴 token 访问 “查订单” 接口,预期返回 401 码 “未授权” |
| 数据边界 | 传空值、最大值、重复数据(比如新增用户,用户名已存在) | 用户名传空字符串,预期返回 400 码 “用户名不能为空” |
| 接口依赖场景 | 先跑依赖接口,再跑目标接口(比如先登录拿 token,再用 token 查订单) | 登录→拿 token→填到 “查订单” 接口的请求头→测查订单接口 |
你已经在研究功能自动化,接口自动化比功能自动化简单(不用处理 UI 定位、元素等待),核心是 “用代码代替手动点 Postman”。
bash
pip install requests # 处理HTTP请求
pip install pytest # 测试框架
pip install allure-pytest # 生成美观的测试报告(可选,推荐)
先写一个简单脚本,跑通 “发送请求→断言→执行” 流程:
# 1. 导入需要的库
import requests
import pytest
# 2. 写测试用例(用Pytest的@Test装饰器)
def test_login_success():
# 接口信息(从文档复制)
url = "http://你的测试环境IP:端口/api/user/login" # 接口URL
headers = {"Content-Type": "application/json"} # 请求头
data = {"username": "test123", "password": "123456"} # 请求体(JSON格式)
# 3. 发送POST请求(用Requests库)
response = requests.post(url=url, headers=headers, json=data) # json参数会自动处理格式
# 4. 断言(和手动测试的预期一致)
assert response.status_code == 200 # 断言响应码是200
assert response.json()["code"] == 200 # 断言响应体里的code是200
assert "token" in response.json() # 断言响应体里有token(登录成功的关键)
# 5. 执行脚本:在PyCharm里右键→Run "pytest xxx.py",看结果是否通过
# 查订单接口用登录 token
def test_query_order():
token = get_login_token() # 调用登录函数拿 token
url = "http://IP:/api/order/query端口"
headers = {"Content-Type": "application/json", "Authorization": f"Bearer {token}"} # 把 token 放进请求头
response = requests.get(url=url, headers=headers)
assert response.status_code == 200
- **问题2:数据驱动(同一接口测多组数据,比如不同密码的登录场景)**
用Pytest的`@pytest.mark.parametrize`装饰器,不用写多个函数:
```python
@pytest.mark.parametrize("username,password,expect_code,expect_msg", [
("test123", "123456", 200, "success"), # 正常登录
("test123", "12345", 400, "密码错误"), # 密码错误
("", "123456", 400, "用户名不能为空") # 用户名空
])
def test_login_multi_data(username, password, expect_code, expect_msg):
url = "http://IP:端口/api/user/login"
data = {"username": username, "password": password}
response = requests.post(url=url, json=data)
assert response.json()["code"] == expect_code
assert expect_msg in response.json()["msg"] # 断言提示信息
pytest test_login.py --alluredir=./allure-results
allure serve ./allure-results
(会自动打开浏览器显示报告)不要一开始就想覆盖所有接口,先选 3-5 个核心接口写自动化脚本,跑通 “脚本→报告→问题反馈” 流程,再逐步扩展。比如:
你是单人测试岗,接口测试的价值不仅是 “自己测”,还要让它成为 “开发→测试” 的协作环节,减少重复工作。
建议调整你的测试流程,更早发现接口问题(减少后期 UI 层定位问题的时间):
graph TD
A[开发提交代码] --> B[开发自测接口(用Swagger)]
B --> C[你用Postman/自动化脚本跑核心接口测试]
C --> D{接口是否通过?}
D -- 是 --> E[开始功能测试(UI层)]
D -- 否 --> F[反馈开发修复,重新走A-C]
如果你已经有自动化脚本,可以集成到 Jenkins(很多公司用),实现 “代码提交后自动跑接口测试”:
接口性能测试比 UI 性能测试简单,核心是 “测接口在高并发下的表现”,新手先学 “基础流程” 即可。
不用记复杂指标,先关注 4 个核心:
JMeter 是性能测试主流工具,新手可以 “复用 Postman 的接口”,不用重新写请求:
JSON
文件(Postman→集合→右键→Export);时间 | 阶段目标 | 核心任务 | 输出成果 |
---|---|---|---|
第 1 个月 | 能独立完成手动接口测试 | 1. 学 HTTP 协议和 Postman;2. 测 2 个模块的接口;3. 输出接口测试用例 | 接口测试用例文档、手动测试 bug 清单 |
第 2 个月 | 能写核心接口的自动化脚本 | 1. 学 Python+Requests+Pytest;2. 写 5 个核心接口的自动化脚本;3. 集成 Allure 报告 | 自动化脚本、每日测试报告 |
第 3 个月 | 接口测试融入流程 + 性能测试入门 | 1. 把脚本集成到测试流程;2. 学 JMeter 测 2 个核心接口的性能;3.(可选)集成 Jenkins | 性能测试报告、CI 自动执行任务 |
按照这个路径,3 个月后你不仅能掌握接口测试,还能在简历上写上 “独立完成接口手动 + 自动化测试,落地性能测试基础流程”——完全满足市面上大部分公司的 JD 要求。关键是 “边学边用”,用实际项目的接口练手,遇到问题解决问题,比单纯看教程进步快 10 倍。
看下 apifox,门槛低,落地快
先了解接口的结构、工作原理、状态码,再结合业务看一个完整的业务流接口调用步骤和接口关联关系,学好 SQL 语法
metersphere 找运维部署下,文档官方写的很清楚,还有用例管理啥的,个人觉得很方便
1.任何接口测试都依赖契约的,首先想做相关的肯定得有相应的契约文档或者契约平台这些,如果没有先搭基建或者自己整理文档,接口测试也是业务相关的,首先你得知道业务的入参组合,返回情况才可能写的出来 case 和断言
2.在 1 都清楚了后,你可以 POSTMAN 也可以其他的工具调也是测接口
3.在 2 的基础上再想用平台也行,用脚本也行啥都行让他自动跑,做巡检,做发布的线上流量 DIFF,做流量回放(依赖完善的日志体系)等等
4.在前面都通了在想着和 CI/CD 流程做集成
apifox、postman 这类接口测试工具,去研究研究,自己在控制台看接口请求或找接口文档,先去请求通一个接口再去思考怎么串联多接口的场景
我基本都是使用 jmeter 进行接口测试,尤其是多个接口的时候;不过也会使用 postman
接口自动化发展至今,已经是非常成熟的东西,接口工具 (如 soapui,apifox),代码框架(如 pytest),带界面 + 关键字驱动的(如 robotframework),或者 web 平台 (学习可以,大部分都是为爱发电,能否持续维护包括社区热度,问题修复等不好保证),推荐先代码实现,这样会对整体实现有个清晰认知。
以 python 为例,主流就是对 pytest+requests 的封装,pytest 是实现自动化的核心,requests 是实现接口请求的核心。
前期你先别想那么多,什么这那的,行动起来更重要,先了解下基本构成,提前熟悉一些概念和名词,然后按照基本的例子找一个业务模块写就是了,期间你自然而然的会遇到很多问题,然后针对性的去找解决方案。
例如:需要往数据库插入数据或者执行后查询数据库数据的变更是否正确,就得请求数据库,例如使用 pymysql 模块使用多了,就会发现,总是在写重复的连接代码,初始化代码,包括对查询结果为空、一条或多条的的判定,你就会想到根据实际情况自己做二次封装,同理,有使用诸如 redis 缓存,apollo 配置,消息中间件的同理。
例如:你想有个不错的执行结果的报告,搜索后大概率会推荐你 allure-pytest、pytest-html。
例如:你想有一些前置、后置的操作,加日志打印等需求,搜索后会告诉你使用 fixture,通过对 fixture 的学习,了解他的作用域和实际用法。
例如:你想有在单个用例里实现多重断言,即使第一个断言失败,也继续后面的断言,那就会接触到 pytest-assume 或是 pytest-expect。
例如:写多了以后你觉得执行速度太慢,又会想多线程或者多进程跑,经过一番搜索,推荐你 pytest-xdist(多进程)、pytest-parallel(多进程和多线程),然后又会遇到诸如仅登录一次这样的需求,经过一番搜索,解决方案又回到了 fixture 这边。
例如:让自动化定时自动执行并发送结果到企微/钉钉/飞书灯,搜索结果大概率会推荐你将代码跟 jenkins 做持续集成,发送结果这个找对应的聊天工具的官方 api,基本都有。
写久了,你看着代码就会觉得这不顺眼那不顺眼,会想着各种优化框架,如代码精简,提取公共类,按业务功能分层,包括用例数据管理,使用配置文件统一管理配置信息,代码目录结构优化等等。
楼上提到的 apifox 和 jmeter 也可以做接口自动化测试,但像 jmeter 主要还是测性能用的多,拿来做接口测试大材小用了,你想扩展也比较麻烦(不知道 Java 功底怎么样)。而像 apifox 本身拿来测单接口、管理接口是很不错的(比 postman 好用),官方也提供了做接口自动化的范例,但也有一点学习成本,有一些自己的语法规则,既然都是学习,学 python+pytest 一步到位好了,当然也看具体情况,如果规模小,接口数量少,且复杂度没有那么高,那使用 apifox 之类也挺好的,写得快,协同维护也方便。
https://testerhome.com/topics/30495 这篇是我写接口自动化测试的一些东西 可能会有所启发
【接口测试新手应该怎样开始呢?团队就一个测试,还一直在做功能测试。既要做功能测试,又要研究功能测试自动化。一直没有推行接口自动化。但是看好多 jd 也提到了接口测试。性能测试这些。
团队里边现在没有前辈指导,也没有经验参考。以资深测试专家的角度,参考市面上大多数公司的做法,详细的指导我】
作为资深测试专家,结合你 “单人测试岗、需兼顾功能/功能自动化、无前辈指导” 的实际场景,我会从 “基础认知→手动落地→自动化进阶→流程融入→性能入门” 五个阶段,给出可落地的详细指导,完全贴合市面上中小团队的接口测试推行路径。
新手最容易犯的错是 “上来就学工具”,但没搞懂底层逻辑,遇到问题会无从下手。这一阶段核心是 “建立认知,和现有功能测试关联”,降低学习成本。
概念 | 解释(用功能测试类比) | 为什么重要? |
---|---|---|
接口 | 后端开发写的 “功能服务入口”(比如 “登录” 功能,前端点按钮是 UI,后端接收账号密码的服务就是接口) | 接口是前后端/服务间的桥梁,90% 的问题根源在接口,而非 UI |
HTTP/HTTPS 协议 | 接口通信的 “语言”(类似 UI 操作时的 “点击/输入” 规则) | 所有接口测试都基于协议,不懂协议就看不懂请求/响应 |
请求三要素 | 方法(GET/POST 等)、URL、参数(请求头/请求体) | 相当于功能测试的 “操作步骤”,缺一个就测不了 |
响应三要素 | 响应码(200/404/500 等)、响应头、响应体 | 相当于功能测试的 “预期结果”,判断接口是否正常 |
RESTful API 规范 | 主流接口设计风格(比如用 GET 查数据、POST 增数据、DELETE 删数据) | 90% 公司用 REST 风格,懂规范才能看懂接口文档 |
接口依赖 | 比如 “查订单” 接口需要 “登录” 接口返回的 token(类似功能测试 “先登录才能查订单”) | 处理依赖是接口测试的核心难点之一 |
Content-Type
:告诉后端请求体格式,如application/json
;Authorization
:放登录 token)。JSON
(比如{"username":"test","password":"123456"}
),要能看懂 JSON 结构(键值对、数组)。你没有前辈指导,接口文档是唯一依据,优先找这两类:
Swagger
(常见地址如http://开发环境IP:端口/swagger-ui.html
),直接打开就能看所有接口,还能在线调试(新手友好)。不要一上来就搞自动化!先手动测,因为你正在做功能测试,可以把 “接口测试” 嵌入功能测试流程(比如测 “登录功能” 时,既点 UI,也用工具测登录接口),边测边熟悉业务,零额外成本。
Postman 是接口测试入门神器,先学基础操作(1 天就能上手):
Content-Type: application/json
;{"username":"test123","password":"123456"}
);"code":200
和"token":"xxx"
。pm.test("响应码是200", function () {pm.response.to.have.status(200);});
)→再发送请求,看 “Test Results” 是否通过。你做过功能测试,用例设计逻辑是相通的,重点覆盖 “接口特有的场景”:
| 用例类型 | 设计思路(以 “登录接口” 为例) | 举例 |
| ------------ |---------------------------------------------------| --------------------------------- |
| 正常场景 | 符合接口文档的合法参数 | 正确的用户名 + 正确密码,预期返回 token 和 200 码 |
| 参数缺失 | 少传必填参数(比如登录接口少传 “password”) | 只传 username,预期返回 400 码和 “密码不能为空” 提示 |
| 参数错误 | 类型错(比如 “age” 应该是数字,传字符串)、格式错(比如手机号少 1 位)| 密码传 “123”(实际要求 6 位),预期返回 400 码 “密码长度不够” |
| 权限场景 | 未登录访问需权限接口、普通用户访问管理员接口 | 不戴 token 访问 “查订单” 接口,预期返回 401 码 “未授权” |
| 数据边界 | 传空值、最大值、重复数据(比如新增用户,用户名已存在) | 用户名传空字符串,预期返回 400 码 “用户名不能为空” |
| 接口依赖场景 | 先跑依赖接口,再跑目标接口(比如先登录拿 token,再用 token 查订单) | 登录→拿 token→填到 “查订单” 接口的请求头→测查订单接口 |
你已经在研究功能自动化,接口自动化比功能自动化简单(不用处理 UI 定位、元素等待),核心是 “用代码代替手动点 Postman”。
bash
pip install requests # 处理HTTP请求
pip install pytest # 测试框架
pip install allure-pytest # 生成美观的测试报告(可选,推荐)
先写一个简单脚本,跑通 “发送请求→断言→执行” 流程:
# 1. 导入需要的库
import requests
import pytest
# 2. 写测试用例(用Pytest的@Test装饰器)
def test_login_success():
# 接口信息(从文档复制)
url = "http://你的测试环境IP:端口/api/user/login" # 接口URL
headers = {"Content-Type": "application/json"} # 请求头
data = {"username": "test123", "password": "123456"} # 请求体(JSON格式)
# 3. 发送POST请求(用Requests库)
response = requests.post(url=url, headers=headers, json=data) # json参数会自动处理格式
# 4. 断言(和手动测试的预期一致)
assert response.status_code == 200 # 断言响应码是200
assert response.json()["code"] == 200 # 断言响应体里的code是200
assert "token" in response.json() # 断言响应体里有token(登录成功的关键)
# 5. 执行脚本:在PyCharm里右键→Run "pytest xxx.py",看结果是否通过
# 查订单接口用登录 token
def test_query_order():
token = get_login_token() # 调用登录函数拿 token
url = "http://IP:/api/order/query端口"
headers = {"Content-Type": "application/json", "Authorization": f"Bearer {token}"} # 把 token 放进请求头
response = requests.get(url=url, headers=headers)
assert response.status_code == 200
- **问题2:数据驱动(同一接口测多组数据,比如不同密码的登录场景)**
用Pytest的`@pytest.mark.parametrize`装饰器,不用写多个函数:
```python
@pytest.mark.parametrize("username,password,expect_code,expect_msg", [
("test123", "123456", 200, "success"), # 正常登录
("test123", "12345", 400, "密码错误"), # 密码错误
("", "123456", 400, "用户名不能为空") # 用户名空
])
def test_login_multi_data(username, password, expect_code, expect_msg):
url = "http://IP:端口/api/user/login"
data = {"username": username, "password": password}
response = requests.post(url=url, json=data)
assert response.json()["code"] == expect_code
assert expect_msg in response.json()["msg"] # 断言提示信息
pytest test_login.py --alluredir=./allure-results
allure serve ./allure-results
(会自动打开浏览器显示报告)不要一开始就想覆盖所有接口,先选 3-5 个核心接口写自动化脚本,跑通 “脚本→报告→问题反馈” 流程,再逐步扩展。比如:
你是单人测试岗,接口测试的价值不仅是 “自己测”,还要让它成为 “开发→测试” 的协作环节,减少重复工作。
建议调整你的测试流程,更早发现接口问题(减少后期 UI 层定位问题的时间):
graph TD
A[开发提交代码] --> B[开发自测接口(用Swagger)]
B --> C[你用Postman/自动化脚本跑核心接口测试]
C --> D{接口是否通过?}
D -- 是 --> E[开始功能测试(UI层)]
D -- 否 --> F[反馈开发修复,重新走A-C]
如果你已经有自动化脚本,可以集成到 Jenkins(很多公司用),实现 “代码提交后自动跑接口测试”:
接口性能测试比 UI 性能测试简单,核心是 “测接口在高并发下的表现”,新手先学 “基础流程” 即可。
不用记复杂指标,先关注 4 个核心:
JMeter 是性能测试主流工具,新手可以 “复用 Postman 的接口”,不用重新写请求:
JSON
文件(Postman→集合→右键→Export);时间 | 阶段目标 | 核心任务 | 输出成果 |
---|---|---|---|
第 1 个月 | 能独立完成手动接口测试 | 1. 学 HTTP 协议和 Postman;2. 测 2 个模块的接口;3. 输出接口测试用例 | 接口测试用例文档、手动测试 bug 清单 |
第 2 个月 | 能写核心接口的自动化脚本 | 1. 学 Python+Requests+Pytest;2. 写 5 个核心接口的自动化脚本;3. 集成 Allure 报告 | 自动化脚本、每日测试报告 |
第 3 个月 | 接口测试融入流程 + 性能测试入门 | 1. 把脚本集成到测试流程;2. 学 JMeter 测 2 个核心接口的性能;3.(可选)集成 Jenkins | 性能测试报告、CI 自动执行任务 |
按照这个路径,3 个月后你不仅能掌握接口测试,还能在简历上写上 “独立完成接口手动 + 自动化测试,落地性能测试基础流程”——完全满足市面上大部分公司的 JD 要求。关键是 “边学边用”,用实际项目的接口练手,遇到问题解决问题,比单纯看教程进步快 10 倍。
如果想了解清楚业务接口调用链路(比如:有些接口调用日志会有内部接口请求,内部接口是做什么的为什么需要这个,就需要去看执行的 sql 了),做全链路接口自动化,sql 是必会的,脚本会涉及到 sql 读写