Python3脚本编程: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

评论 2
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

职说测试

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值