Python開發json格式的文本文件比對腳本

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

 

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章