第一次搞接口自动化,想问一下大家在工作中设计断言思路是怎样的?我现在对于增删改查接口都是验证状态码 +body 的重要字段,这样设计会不会不完善呀?需不需要再去做一下数据库断言?
接口自动化测试的断言设计是确保接口功能正确性的核心环节,主要围绕 响应数据、业务逻辑、性能和安全 进行验证。以下是常见断言设计方法和实践:
# 示例(Python + requests)
response = requests.get(url)
assert response.status_code == 200 # 验证状态码
python
data = response.json()
assert "user_id" in data, "user_id字段缺失"
python
assert isinstance(data["price"], float), "price字段类型错误"
python
assert data["status"] == "success", "接口状态异常"
使用 JSON Schema 验证响应体的完整结构:
from jsonschema import validate
schema = {
"type": "object",
"properties": {
"id": {"type": "number"},
"name": {"type": "string"},
"is_active": {"type": "boolean"}
},
"required": ["id", "name"]
}
validate(instance=data, schema=schema) # 自动抛出异常
接口操作后,验证数据库数据是否正确更新:
# 示例:验证用户创建后数据库存在记录
db_result = sql_query("SELECT * FROM users WHERE id=1001")
assert len(db_result) == 1, "数据库写入失败"
验证接口是否满足业务规则,例如:
python
response = requests.post(url, data={"amount": -100})
assert response.json()["code"] == 400 # 验证错误码
python
assert response.elapsed.total_seconds() < 0.5
使用正则表达式或忽略动态字段:
# 示例:忽略时间戳差异
expected = {"id": 1001, "create_time": "ignore"}
actual = {"id": 1001, "create_time": "2023-10-01 12:00:00"}
assert expected["id"] == actual["id"]
上一个接口的响应作为下一个接口的输入:
# 创建用户后获取user_id,用于后续查询
user_id = create_user_response.json()["user_id"]
query_response = requests.get(f"/users/{user_id}")
assert query_response.status_code == 200
pytest
(assert
关键字)、unittest
(self.assertEqual()
)pm.test()
+ Chai.js 语法data.items[0].name
){{timestamp}}
)或正则表达式匹配动态值。def test_create_order():
# 1. 发起请求
payload = {"product_id": 100, "quantity": 2}
response = requests.post("/orders", json=payload)
# 2. 基础断言
assert response.status_code == 201
data = response.json()
assert "order_id" in data
# 3. 数据库验证
order_id = data["order_id"]
db_data = sql_query(f"SELECT * FROM orders WHERE id={order_id}")
assert db_data["status"] == "created"
# 4. 业务逻辑验证
assert db_data["total_price"] == 200 * 2 # 单价200,数量2
通过合理设计断言,可以精准定位接口问题,确保自动化测试的可靠性和可维护性。
ds 回复是这样的,不过我们都是基础断言
你接口手工测试关注哪些,自动化测试断言就是哪些啊。
200 就完啦,想那么多干啥
比如用最简单的一个新建查询场景:
1、创建一个订单
2、查询订单
用例设计:
1、创建订单
1.1 提取:返回的订单号字段
1.2 提取:创建时填写的订单名称(假如创建订单有一个必填且可以作为唯一标识的字段 order_name)
1.3 断言:成功的状态码(比如 200)
2、根据提取的 order_id 作为查询的入参,去查询
2.1 断言:状态码
2.1 断言:查询结果中包含 order_name
绝大部分场景下验证返回就够了,如果这个场景下的数据库结果很重要那就加上数据库数据验证。
如无必要,勿增实体。
前置步骤省略,基础步骤 200,重点步骤 200+ 条件
始终没想到测试怎么用 AI 提效,用来写用例跟傻子一样,最多的就是拿来写代码或者给个大概方向细化一下测试代码
感觉提问的是思路, 不是技术, 那就从思路方面给一些参考意见哈, 希望能抛砖引玉 :
一般接口会有独立的 code 响应,
比如成功是 200 / OK / Success 啥的,
失败就是 501(502,500 等) / DATA_CHECK_FAIL / FAILURE 啥的,
所有接口肯定都需要进行基础断言, 比如你们公司的接口, 数据处理成功, code 给你响应一个 OK, 你就每个接口都断言这个 code 为 OK ( PS : 这个并不绝对, 大多数项目会在相应状态码基础上, 在响应体的 Json 中给出更加详细的 code 区分 )
甚至可以将这个断言直接写入 requests 的封装中, 毕竟每个接口都需要, 这样你最起码能保证每个通过的用例, 内部的接口都调用通过了
然后就是帖子中提到的各种断言方式, 看你接口需要哪一种, 这里就结合业务和实际流程
数据敏感, 下游接口需要使用某数据, 那你就可以考虑详细断言, 毕竟业务相关就需要结合实际项目来考量
可以是从基础到详细, 考虑细化
或者从详细到基础, 考虑简化
最终找到适合自己项目的断言标准