【发布时间】:2017-09-15 02:19:58
【问题描述】:
我正在使用一个 API,该 API 需要在创建资源时对 json 键值对进行排序。 API 提供了一种方法(称为 new),允许您发出将返回对象模型的 GET 请求。我想用我的 RobotFramework 测试用例中的值更新模型。 Robot Framework 中是否有一种本地方式来发出 GET 请求并保留服务器发送的 json 对象顺序?以下是对 GET 新方法的 JSON 响应示例:
{
"account": {
"@id": "",
"@uri": "",
"@oldID": "",
"person": {
"@id": "",
"@uri": ""
},
"accountType": {
"@id": "",
"@uri": "",
"name": null
},
"accountName": "",
"createdDate": null,
"createdByPerson": {
"@id": "",
"@uri": ""
},
"lastUpdatedDate": null,
"lastUpdatedByPerson": {
"@id": "",
"@uri": ""
}
}
}
如果我使用以下内容,键值会自动排序:
${r}= GET Request MySession /accounts/new
【问题讨论】:
-
你,不能依赖字典中键的任何顺序。在这种结构中甚至没有指定顺序 - 即没有任何命令。从这个角度来看,json 只不过是字典和列表的嵌套结构。参见例如这个:stackoverflow.com/questions/4515676/…
-
@JanKovařík 一般来说你是对的,但 RF 是一个特例——那里的字典基于OrderedDict,所以插入顺序被保留。
-
@pgtips - 您正在使用 RequestsLibrary,对吗?我看不到任何内容,这会重新排序响应键...您确定不是服务器将它们按意外顺序排列吗?手动触发相同的请求会生成与 RF 中不同的结构?
-
@Todor 感谢您的解释。
-
好吧,我没有库,也没有合适的测试系统来检查自己,但是,这一切都来自底层请求库 - see here, please。您可能想尝试的答案中有一个解决方案 - 例如
${r}.json(object_pairs_hook=OrderedDict),但我自己不知道它是否会正确传播到请求库(通过快速浏览 ExtendedRequestsLibrary,它应该......)
标签: json robotframework