背景:上篇说了怎么对比excel表格的文件,那么如何来比较json格式的数据文件呢?swagger也好还是httprunner框架也好,总之对json对象是十分友好的,前面做足了一堆准备工作,除了对比excel之外,那么对比json是更快捷的方式,然后去修改excel接口测试用例即可。
公司目前项目流程还在慢慢摸索适应中,有很多功能或者沟通工作没有做到位,其中也对开发提过一点需求,但是久而久之也没有得到回应,所以才有了上面一系列的测试工作,有一天领导看到我在搞这个,说到文件的对比该怎么做?于是乎我就想到了md5,文件的md5计算是内容,而不是文件!因为文件的时间可能随时发生变化。于是就有了这篇代码:
#!/usr/bin/env python
# -*- coding: utf-8 -*-
# @desc : 对比接口excel, json更新
import difflib
import sys
import os
from hashlib import md5
from utils.HandleLogging import log
import config
# 创建打开文件函数,并按换行符分割内容
def read_json(filename):
'''
读取json格式的数据
'''
try:
with open(filename, 'r',encoding='utf-8') as fileHandle:
text = fileHandle.read().splitlines()
return text
except IOError as e:
log.error("Read file Error:" + e)
sys.exit()
def md5_file(filename):
'''
比较两个文件内容的md5值
'''
m = md5()
try:
with open(filename, 'rb') as a_file: # 需要使用二进制格式读取文件内容
m.update(a_file.read())
except Exception as e:
log.error("文件读取失败:%s"%e)
return m.hexdigest()
def diff_json(filename1, filename2, name):
'''
比较两个json格式的数据文件,不同之处输出到html文件中
'''
file1Md5=md5_file(filename1)
file2Md5=md5_file(filename2)
if file1Md5!=file2Md5:
text1_lines = read_json(filename1)
text2_lines = read_json(filename2)
d = difflib.HtmlDiff()
# context=True时只显示差异的上下文,默认显示5行,由numlines参数控制,context=False显示全文,差异部分颜色高亮,默认为显示全文
result = d.make_file(text1_lines, text2_lines, filename1, filename2, context=True)
# 内容保存到result.html文件中
log.info('json数据比对结果写入html中.')
with open(os.path.join(config.report_path, '{}_diff.html'.format(name)), 'w',encoding='utf-8') as result_file:
result_file.write(result)
if __name__ == '__main__':
diff_json(config.case_path+"基础接口/关于我们.json", config.case_path+"基础接口/获取图片.json", "让我看看哪里不一样")
pass