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

zhangjg0919 · 发布于 2017年11月11日 · 最后由 zhangjg0919 回复于 2017年11月13日 · 362 次阅读
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 条回复
15124

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

765f22
15124wuxixuxiaodong 回复
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] 里的预期结果做对比,感觉还可以

96

我来试试:

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}
6109
605chenhengjie123 回复

漂亮!

6504
765f22zhangjg0919 回复

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

765f22
605chenhengjie123 回复

学习了,感谢!

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

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

765f22
6504lose 回复

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

1439

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

sure github

765f22
1439xie_0723 回复

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

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