Robot Framework如何校验JSON响应数据:全面指南
在API自动化测试中,JSON是最常见的数据交换格式,Robot Framework作为主流的自动化测试框架,提供了多种方式校验JSON响应的结构、数据类型和内容准确性,本文将详细介绍Robot Framework校验JSON的多种方法,从基础到进阶,结合实例代码,帮助你不同场景下的JSON校验技巧。
使用BuiltIn库的Should Be Equal As JSON和Should Not Be Equal As JSON
Robot Framework的BuiltIn库提供了专门用于JSON校验的关键字,Should Be Equal As JSON和Should Not Be Equal As JSON,适合校验JSON响应是否符合预期结构(即“期望的JSON模板”与实际响应是否一致)。
核心逻辑
这两个关键字会将“期望的JSON”和“实际的JSON字符串”解析为Python字典,然后递归比较两个字典的键、值及数据类型是否完全匹配。注意:期望的JSON不需要包含实际响应中的所有字段,只需校验关心的字段即可。
示例代码
假设API返回的JSON响应如下:
{
"code": 0,
"message": "success",
"data": {
"userId": 1001,
"username": "test_user",
"isActive": true,
"roles": ["admin", "user"]
}
}
校验部分字段(推荐)
*** Settings ***
Library BuiltIn
*** Test Cases ***
校验JSON响应的部分字段
${expected_json}= Set Variable {"code": 0, "data": {"userId": 1001, "isActive": true}}
${actual_response}= Set Variable {"code": 0, "message": "success", "data": {"userId": 1001, "username": "test_user", "isActive": true, "roles": ["admin", "user"]}}
Should Be Equal As JSON ${expected_json} ${actual_response}
Log JSON校验通过:响应包含期望的字段和数据类型
校验全部字段(严格模式)
如果需要校验响应的所有字段(包括不关心的字段),需提供完整的期望JSON:
*** Test Cases ***
校验JSON响应的全部字段
${expected_json}= Set Variable {"code": 0, "message": "success", "data": {"userId": 1001, "username": "test_user", "isActive": true, "roles": ["admin", "user"]}}
${actual_response}= Set Variable {"code": 0, "message": "success", "data": {"userId": 1001, "username": "test_user", "isActive": true, "roles": ["admin", "user"]}}
Should Be Equal As JSON ${expected_json} ${actual_response}
注意事项
- 期望JSON中的字段顺序无需与实际响应一致(JSON本质是无序的)。
- 如果实际响应中缺少期望JSON的字段,或字段值类型不匹配(如期望
"userId": 1001(数字),实际"userId": "1001"(字符串)),校验会失败。
使用BuiltIn库的Should Contain和Should Contain Any/All
如果只需要校验JSON响应中是否包含某个键、值或子结构(而非完全匹配),可以使用BuiltIn库的通用校验关键字,结合JSON解析实现。
核心逻辑
- 先用
Evaluate关键字结合json库将JSON字符串解析为Python字典或列表。 - 再用
Should Contain(校验是否包含)、Should Be Equal(校验值是否相等)等关键字进行断言。
示例代码
校验JSON是否包含某个键
*** Test Cases ***
校验JSON是否包含指定键
${response}= Set Variable {"code": 0, "data": {"userId": 1001}}
# 解析JSON并校验"data"键是否存在
${parsed_json}= Evaluate json.loads('${response}') json
Should Contain ${parsed_json} data
Log JSON包含"data"键
校验JSON中某个键的值
*** Test Cases ***
校验JSON中某个键的值
${response}= Set Variable {"code": 0, "data": {"username": "test_user"}}
${parsed_json}= Evaluate json.loads('${response}') json
Should Be Equal ${parsed_json['data']['username']} test_user
Log 用户名校验通过
校验JSON是否包含某个子结构
*** Test Cases ***
校验JSON是否包含子结构
${response}= Set Variable {"data": {"roles": ["admin", "user"]}}
${expected_sub_json}= Set Variable {"roles": ["admin", "user"]}
${parsed_json}= Evaluate json.loads('${response}') json
${parsed_sub_json}= Evaluate json.loads('${expected_sub_json}') json
Should Be Equal As Dictionaries ${parsed_json['data']} ${parsed_sub_json}
Log JSON包含期望的子结构
使用JSONLibrary进行更灵活的JSON校验
Robot Framework的JSONLibrary(需安装:pip install robotframework-jsonlibrary)提供了更丰富的JSON操作关键字,适合复杂场景的校验,如提取、修改、断言JSON数据。
核心关键字
From JSON:将JSON字符串转换为Python对象(字典/列表)。Get Value From JSON:提取JSON中的某个值(支持JSONPath语法)。Get Length Of Json:获取JSON数组或字典的长度。Should Be Equal(结合JSON对象):校验JSON值或结构。
示例代码
安装JSONLibrary
pip install robotframework-jsonlibrary
基本校验示例
*** Settings ***
Library JSONLibrary
*** Test Cases ***
使用JSONLibrary校验JSON
${response}= Set Variable {"code": 0, "data": [{"userId": 1001, "username": "user1"}, {"userId": 1002, "username": "user2"}]}
# 转换JSON为Python对象
${parsed_json}= From JSON ${response}
# 校验根字段"code"的值
Should Be Equal ${parsed_json['code']} 0
# 校验"data"是列表且长度为2
${data_length}= Get Length Of Json ${parsed_json['data']}
Should Be Equal ${data_length} 2
# 校验第一个用户的userId
${first_user}= Get Value From JSON ${response} $[0].userId
Should Be Equal ${first_user[0]} 1001
JSONPath高级校验
JSONPath是用于提取JSON数据的查询语言(类似XPath),支持复杂查询:
*** Test Cases ***
使用JSONPath校验JSON
${response}= Set Variable {"data": {"users": [{"id": 1, "name": "Alice", "age": 25}, {"id": 2, "name": "Bob", "age": 30}]}}
# 提取所有用户的年龄
${ages}= Get Value From JSON ${response} $.data.users[*].age
Should Be Equal ${ages[0]} 25
Should Be Equal ${ages[1]} 30
# 提取name为"Bob"的用户ID
${bob_id}= Get Value From JSON ${response} $.data.users[?(@.name == 'Bob')].id
Should Be Equal ${bob_id[0]} 2
使用Collections库校验JSON数组或字典
如果JSON响应是数组或字典,且需要校验其长度、元素是否包含特定值等,可以使用Robot Framework的Collections库。
核心关键字
Should Be True:结合Python表达式校验JSON结构。Should Contain:校验列表/字典是否包含某个元素。Get Length:获取列表/字典的长度。
示例代码
校验JSON数组长度和元素
*** Settings ***
Library Collections
Library BuiltIn
*** Test Cases ***
校验JSON数组
${response}= Set Variable {"data": ["apple", "banana", "orange"]}
# 解析JSON
${parsed_json}= Evaluate json.loads('${response}') json
# 校验"data"是长度为3的列表
${data_length}= Get Length ${parsed_json['data']}
Should Be Equal ${data_length} 3
# 校验列表包含"banana"
Should Contain ${parsed_json['data']} banana
校验字典键是否存在
*** Test Cases ***
校验字典键是否存在
${response}= 


还没有评论,来说两句吧...