接口测试 python 字典 x = {'a':'b'},y = {'a':'b', 'c':'d'},用什么方法可以实现断言接口自动化 y 字典包含 x 字典?

皆非 · 2017年11月11日 · 最后由 皆非 回复于 2017年11月13日 · 2249 次阅读
x = {'ret': 0, 'msg': '成功'}
y = {'ret': 0, 'msg': '成功','token':'123456789'}

z = len([i for i in x.items() if i in y.items()])

assert z == len(x), '不相等'

高人指点,遍历出 x 在 y 里面的键对值存在 z 里面,然后判断 x 和 z 的长度
但是有没有一种断言的方法 类似 self.assertIn(x,y),这里的 x,y 应该是 str,但是 str(x) != str(y),请问还有什么方法可以直接断言吗?

共收到 11 条回复 时间 点赞

可以先解析 x,然后用 y.get(key)的做法判断 y 中是否存在,然后再去做 value 的比较

徐晓东 回复
resp = base.get_response(self.url,'post',**DataAll)
respdict = {'ret':resp['ret'],'msg':resp['msg'],'user_id':resp['user_id'],'user_name':resp['user_name']}
self.assertEqual(eval(TestData[5]),respdict)

我现在写成这样了,感觉还好, respdict 是我从请求的返回结果里取值组成字典跟 TestData[5] 里的预期结果做对比,感觉还可以

我来试试:

for k, v in y.items():
    if k not in x:
       x[k] = v
assert x == y

或者

assert x == {k: v for k, v in y.items() if k in x}
陈恒捷 回复

漂亮!

皆非 回复

对的,字典和字典之间直接比较最简单。。。。。。。。

陈恒捷 回复

学习了,感谢!

wongidle 回复
z = len([i for i in x.items() if i in y.items()]) 

遍历对比,学习了,感谢!

暂时用这种方法,后续看看需求,如果需要对比的 key value 过多,在使用循环遍历。😉

看到这个问题,第一个想到了 sure,蛋疼的是,好像没有适合你这个场景的 assert API。不过推荐你可以看下哈。

sure github

皆非 #11 · 2017年11月13日 Author
0x7C00 回复

我现在实现了 取返回结果 组成新的 dict 和 预期结果对比。 暂时觉得这样好,新东西慢慢看。我先收藏,谢谢了😎

皆非 关闭了讨论 11月13日 14:53
需要 登录 后方可回复, 如果你还没有账号请点击这里 注册