首页 > 代码库 > 接口自动化,断言方法,深度定位错误

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

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

 

代码如下:

 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)

效果图如下:

技术分享

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