关于json的无序断言比对问题

关于json的无序断言比对问题

问题的提出

有些时候,在做接口自动化的过程中,有很多进行断言的方法。今天来说说,服务器返回的json字符串无序,断言的expected_data写入的Excel,读出来也是字符串进行比对,那就会遇到一个问题,返回的json字符串是无序的,不可控(或许还有些字段的value值以"\u"开头)可能请求很多次,返回的顺序都不相同,那无序的json字符串,和写死的expeted_data进行assertequal断言,那就会返回False。

怎么办

现在就会用到json的loads和dumps方法。
1.什么是loads和dumps方法,等我去copy一下
 Encode过程,是把python对象转换成json对象的一个过程,常用的两个函数是dumps和dump函数。两个函数的唯一区别就是dump把python对象转换成json对象生成一个fp的文件流,而dumps则是生成了一个字符串:
 Decode过程,是把json对象转换成python对象的一个过程,常用的两个函数是loads和load函数。区别跟dump和dumps是一样的。
2.了解了之后就很简单了,我们先把返回的response.text先把他用json.loads()处理成字典,这个过程是decode,那么所有的\u都会转换成正常的中文,然后再将其encode,即json.dumps()排序输出成有序的json字符串,把excepted_data也做相同的操作,先loads,再dumps,两个都有序了,就可以进行正常匹配了。
代码
返回的数据对象:res
res_to_dict = json.loads(res.text)
dict_to_json = json.dumps(res_to_dict, sort_keys=True, indent=4, separators=(’,’, ': '), ensure_ascii=False)

sort_keys就是按字母排序, ensure_ascii=False就是将json字符串中有\u这个样子的转成正常显示的中文。

其实,你也可以直接把返回的数据直接转成字典,expected_data也整成字典形式,字典里面只关注key对应 的value是都匹配,只要是一样这么多数量的key,key 又相同,对应的value又相同,无序可以assert相等的。

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值