如何检查字典的值作为响应

时间:2018-04-06 06:54:06

标签: python api testing pytest assert

我正试图找到检查字典值的更好方法。

我做了一个pytest测试,在其中我向API发送了一个带有一些负载的请求,响应看起来像这样:

{'user': '1', 'objects': [{'id': '1', 'event': [{'type': 'something', 'timestamp': '1522991335319'}]}], 'reached': True}

到达的键值user,id,typeи应该与我在请求中发送的值相同,而且我不关心timestamp键的值。

当我直接断言时,它不是很方便,例如,键“type”的断言看起来不紧凑:

assert response["objects"][0]["event"][0]["type"] == "something"

那么,检查值并使代码更紧凑的更好方法是什么?

1 个答案:

答案 0 :(得分:0)

如果这是测试套件中的一种测试,那么我会按照以下方式做一些事情:

obj = response['objects'][0]
event = obj['event'][0]

assert reponse['user']     == '1'
assert response['reached'] is True
assert obj['id']           == '1'
assert event['type']       == 'something'

但是如果你有很多这些测试,我建议将响应JSON映射到一个对象,并为这个对象定义 eq 方法,只考虑相关的属性,这样你就可以使用==运算符使用assert