第一次搞接口自动化,想问一下大家在工作中设计断言思路是怎样的?我现在对于增删改查接口都是验证状态码 +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+ 条件