接口自动化,断言方法,深度定位错误

接口自动化,断言方法,深度定位错误。

 

代码如下:

 1 #!/usr/bin/env python
 2 # -*- coding: utf-8 -*-
 3 # @Time    : 2017-07-27 13:49
 4 
 5 # 断言方法,比较两个list或dict的不同之处
 6 
 7 a= {'b':[1,2,5,8],'c':3,'d':2,'f':[1,2,3],'g':[1,2,3,[2,'2',2]],'h':'5'}
 8 b= {'b':[1,2,'3'],'c':2,'e':'4','f':[1,2,3,5],'g':[1,2,3,[1,2]],'h':[1,2]}
 9 
10 def compare_json_data(A, B, L = [], xpath = '.'):
11     if isinstance(A, list) and isinstance(B, list):
12         for i in range(len(A)):
13             try:
14                 compare_json_data(A[i], B[i], L, xpath + '[%s]' % str(i))
15             except:
16                 L.append('▇▇▇ A中的key %s[%s]未在B中找到\n' % (xpath, i))
17     if isinstance(A, dict) and isinstance(B, dict):
18         for i in A:
19             try:
20                 B[i]
21             except:
22                 L.append('▇▇▇ A中的key %s/%s 未在B中找到\n' % (xpath, i))
23                 continue
24             if not (isinstance(A.get(i), (list, dict)) or isinstance(B.get(i), (list, dict))):
25                 if type(A.get(i)) != type(B.get(i)):
26                     L.append('▇▇▇ 类型不同参数在[A]中的绝对路径:  %s/%s  ►►► A is %s, B is %s \n' % (xpath, i, type(A.get(i)), type(B.get(i))))
27                 elif A.get(i) != B.get(i):
28                     L.append('▇▇▇ 仅内容不同参数在[A]中的绝对路径:  %s/%s  ►►► A is %s, B is %s \n' % (xpath, i, A.get(i), B.get(i)))
29                 continue
30             compare_json_data(A.get(i), B.get(i), L, xpath + '/' + str(i))
31         return
32     if type(A) != type(B):
33         L.append('▇▇▇ 类型不同参数在[A]中的绝对路径:  %s  ►►► A is %s, B is %s \n' % (xpath, type(A), type(B)))
34     elif A != B and type(A) is not list:
35         L.append('▇▇▇ 仅内容不同参数在[A]中的绝对路径:  %s  ►►► A is %s, B is %s \n' % (xpath, A, B))
36     return L
37 
38 def Assert(A,B):
39     C = []
40     compare_json_data(A, B, C)
41     assert len(C) == 0, "\n"+"".join(C)
42 Assert(a, b)

效果图如下:

posted on 2017-07-27 16:57  ·点点·  阅读(1906)  评论(1编辑  收藏  举报

导航