已将系统相关的接口的接口测试用例完成,现增加比较同一接口、同一请求参数在线上和测试环境的返回值。
由于同一接口在不同环境间的返回值可能包含不固定的值(如 id、时间戳等),因此无法以返回值是否完全匹配作为对比结果。
因此选择获取返回值差值的 key 列表作为判断对比是否通过的标准。
分别传入正式环境的返回值数组和测试环境的返回值数组; 对比结果为一个新的数组,内容为两个数组不匹配的字段。
def symmetric_difference(oldobj,newobj):
oldobj=json.loads(oldobj)
newobj=json.loads(newobj)
print(oldobj)
print(newobj)
oldkeys = list(oldobj.keys())
newkeys = list(newobj.keys())
diff = {}
for _key in set(oldkeys + newkeys):
if newobj.get(_key,0) != oldobj.get(_key,0):
diff[_key] = "new:%s, old:%s" %(newobj.get(_key,0) , oldobj.get(_key,0))
return diff
执行效果:
两个返回值分别为:
response1 = {'userId': 414, 'msg': 'success', 'token': '4_A', 'platform': 'mobile', 'code': 200, 'isFirstLogin': 1}
response2 = {'userId': 415, 'msg': 'success', 'token': '4_B', 'platform': 'mobile', 'code': 200, 'isFirstLogin': 1}
对比获得两个数组的差值:
result = {'userId': 'new:414, old:415', 'token': 'new:4_A, old:4_B'}
# 测试 登录 接口差值
def test_compare_login(self):
user = new_user() # 生成同样的登录用户数据
response1 = login(user, url1)
response2 = login(user, url2) # 以同一 user 登录,分别获取url1、url2 的登录接口返回值。
result = symmetric_difference(response1,response2) # 获取两个返回值的差
list1 = list(result.keys()) # 获取差值数组的 key 列表(忽略里面具体的内容,只关心有哪些 key 不一致)
list1.sort() # 排序,确保最终对比结果不变
self.assertEqual(list1,['token', 'userId']) # 验证对比结果是否符合预期