调一个转账接口,口测传过去金额 100,口测返回成功。口测再传 -100,口测还是口测成功。这不是口测段子,是口测我去年在一家小公司代码里翻出来的真事。他们的口测测试用例只覆盖了"正常金额",负数、口测零、口测超大数压根没试过。口测上线三个月,口测有人用负数把余额刷到了八位数。口测
接口测试干的口测就是这种事——在别人动手之前,先把系统往死里折腾一遍。口测
很多人把接口测试和功能测试混为一谈。不一样。功能测试点的是页面上的按钮,接口测试绕过 UI,直接对着 HTTP 请求发数据。页面可能骗你,接口不会。
举个具体的。登录接口 POST /api/login,参数是 username 和 password。功能测试看到的是"输错密码提示错误",接口测试看到的是:
' OR 1=1--,SQL 注入有没有防住?这些问题在浏览器里点不出来,只能靠工具直接怼接口。
Postman 是最常用的,图形界面,写断言也方便。但它的 Collection 一旦超过几百个请求,跑起来卡得让人想砸键盘。我现在的习惯是:调试阶段用 Postman,正式跑回归用代码。
Python 的 requests 库加 pytest,二十行代码就能搭一个测试框架。比如验证一个创建订单的接口:
def test_create_order(): resp = requests.post(url, json={ "sku": "A001", "qty": 2}) assert resp.status_code == 200 assert resp.json()["order_id"] is not None assert resp.json()["total"] == 199.00 简单,直接,出问题的时候报错信息比 Postman 清楚得多。
发请求谁都会。难的是设计用例。
我见过一个支付回调接口,开发拍胸脯说"没问题"。我列了张表:金额为 0、金额带小数、订单号重复、签名错误、签名正确但时间戳过期、回调两次、回调时订单已关闭。八种情况,挂了五种。开发当场脸就绿了。
接口测试的核心是边界和异常。正常流程开发自己就测过了,轮不到你。你要找的是他没想过的情况。
还有一个容易忽略的点:接口之间的依赖。A 接口返回的 token 给 B 接口用,B 接口创建的资源 ID 给 C 接口用。单独测每个接口都通过,串起来就崩。这种问题在微服务架构里特别常见,必须做链路级的接口测试。
测查询接口,数据库里得有数据。测删除接口,得先有东西可删。很多团队用一套固定的测试数据,跑上几个月,数据被改得面目全非,用例开始随机失败。
我的做法是每个用例自己造数据,用完自己清理。麻烦,但稳定。用 fixture 在 setup 阶段插入数据,teardown 阶段删掉。跑一百遍结果都一样。
接口测试覆盖率这个指标,看看就行。一个查询接口有二十个可选参数,组合起来上千种情况,全测完要跑到明年。挑核心参数、高频组合、已知出过问题的场景覆盖就够了。
把精力花在:资金相关的接口、权限相关的接口、对外暴露的接口。这三类出问题,代价最大。
接口测试不是走形式。它是上线前最后一道能自动拦住 bug 的防线。页面可以慢慢改,接口一旦错了,数据就脏了,脏数据比 bug 难修十倍。