背景:上篇說了怎麼對比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