官方文档:https://docs.python.org/3/library/difflib.html

difflib模块的作用是比对文本之间的差异,且支持输出可读性比较强的HTML文档,与Linux下的vimdiff命令相似。

vimdiff效果如下:

在接口测试时,常常需要对不同版本的同一个接口的response进行比对,来验证新版本的功能可靠性。接口数量多,加之vimdiff命令输出的结果读起来不是很友好,这时python自带的difflib模块就可以发挥作用了。

difflib.Differ

import difflib
text1 = ''' yi hang
er hang
'''.splitlines(keepends=True) text2 = ''' yi hang
er han
san hang
'''.splitlines(keepends=True) d = difflib.Differ() # 创建Differ 对象
result = list(d.compare(text1, text2))
result = "".join(result)
print(result)

结果:

注释:

difflib.HtmlDiff

import difflib
import sys
import argparse # 读取要比较的文件
def read_file(file_name):
try:
file_desc = open(file_name, 'r')
# 读取后按行分割
text = file_desc.read().splitlines()
file_desc.close()
return text
except IOError as error:
print('Read input file Error: {0}'.format(error))
sys.exit() # 比较两个文件并把结果生成一个html文件
def compare_file(file_1, file_2):
if file_1 == "" or file_2 == "":
print('文件路径不能为空:第一个文件的路径:{0}, 第二个文件的路径:{1} .'.format(file_1, file_2))
sys.exit()
else:
print("正在比较文件{0} 和 {1}".format(file_1, file_2))
text1_lines = read_file(file_1)
text2_lines = read_file(file_2)
diff = difflib.HtmlDiff() # 创建HtmlDiff 对象
result = diff.make_file(text1_lines, text2_lines) # 通过make_file 方法输出 html 格式的对比结果
# 将结果写入到result_compare.html文件中
try:
with open('result_compare.html', 'w') as result_file:
result_file.write(result)
print("比较完成")
except IOError as error:
print('写入html文件错误:{0}'.format(error)) if __name__ == "__main__":
# To define two arguments should be passed in, and usage: -f1 f_name1 -f2 f_name2
my_parser = argparse.ArgumentParser(description="传入两个文件参数")
my_parser.add_argument('-f1', action='store', dest='f_name1', required=True)
my_parser.add_argument('-f2', action='store', dest='f_name2', required=True)
# retrieve all input arguments
given_args = my_parser.parse_args()
file1 = given_args.f_name1
file2 = given_args.f_name2
compare_file(file1, file2)

result_compare.html效果:

注意:当接口response返回的行数很多,difflib可能会发生比对错行,导致比对结果不准确,不妨去试一试xmldiff和json-diff

Python自带difflib模块的更多相关文章

  1. 使用Python自带difflib模块进行文件内容差异对比

    difflib_text.py #!/usr/bin/python import difflib import sys try: textfile1=sys.argv[1] textfile2=sys ...

  2. Python自动化测试 (二) ConfigParser模块读写配置文件

    ConfigParser 是Python自带的模块, 用来读写配置文件, 用法及其简单. 直接上代码,不解释,不多说. 配置文件的格式是: []包含的叫section,    section 下有op ...

  3. Python day 7(1) 模块

    一:模块 1 在Python中,一个.py文件就称之为一个模块(Module) 2 Python的好处,优点: a  提高了代码的可维护性 b  当一个模块编写完毕,就可以被其他地方引用.我们在编写程 ...

  4. Python面向对象编程和模块

    在面向对象编程中,你编写表示现实世界中的事物和情景的类,并基于这些类来创建对象. 编写类时,你定义一大类对象都有的通用行为.基于类创建对象时,每个对象都自动具备这种通用行为,然后根据需要赋予每个对象独 ...

  5. python之旅:模块与包

    一.模块介绍 前言:引用廖雪峰大神的,说的很好!!! 在计算机程序的开发过程中,随着程序代码越写越多,在一个文件里代码就会越来越长,越来越不容易维护. 为了编写可维护的代码,我们把很多函数分组,分别放 ...

  6. python学习笔记:模块——自定义模块的3种导入方式

    一.定义 模块就是用一堆的代码实现了一些功能的代码的集合,通常一个或者多个函数写在一个.py文件里,而如果有些功能实现起来很复杂,那么就需要创建n个.py文件,这n个.py文件的集合就是模块.如果不懂 ...

  7. python之生成器与模块

    目录 生成器对象 自定义range方法 生成器表达式 模块 简介 模块的导入方式 第一种:import ... 第二种:from ... import ... 补充 生成器对象 生成器对象其实本质还是 ...

  8. Python自带的hmac模块

    Python自带的hmac模块实现了标准的Hmac算法 我们首先需要准备待计算的原始消息message,随机key,哈希算法,这里采用MD5,使用hmac的代码如下: import hmac mess ...

  9. Python安装包或模块的多种方式汇总

    windows下安装python第三方包.模块汇总如下(部分方式同样适用于其他平台): 1. windows下最常见的*.exe,*msi文件,直接运行安装即可: 2. 安装easy_install, ...

  10. python基础知识9——模块2——常见内置模块

    内置模块 内置模块是Python自带的功能,在使用内置模块相应的功能时,需要[先导入]再[使用] 1.sys 用于提供对Python解释器相关的操作: sys.argv 命令行参数List,第一个元素 ...

随机推荐

  1. 朋友吐槽我为什么这么傻不在源生成器中用string.GetHashCode, 而要用一个不够优化的hash方法

    明明有更好的hash方法 有位朋友对我吐槽前几天我列举的在源生成器的生成db映射实体的优化点 提前生成部分 hashcode 进行比较 所示代码 public static void Generate ...

  2. LeetCode216.组合总和lll

    4.组合总和lll(LeetCode216) 题目叙述: 找出所有相加之和为 n 的 k 个数的组合,且满足下列条件: 只使用数字1到9 每个数字 最多使用一次 返回 所有可能的有效组合的列表 .该列 ...

  3. RabbitMq高级特性之延迟队列 通俗易懂 超详细 【内含案例】

    RabbitMq高级特性之延迟队列 介绍 消息进入队列后不能立即被消费,到达指定时间后才可被消费 实现 结合以下两种即可达到延迟队列 RabbitMq高级特性之TTL过期时间 RabbitMq高级特性 ...

  4. Kruskal和Prim模板

    例题:P3366 [模板]最小生成树 - 洛谷 | 计算机科学教育新生态 (luogu.com.cn) Kruskal #include <bits/stdc++.h> #define d ...

  5. Adobe Photoshop cc2018 Mac中文破解版下载

    下载地址在文章最末,下载之前,先看下安装教程. 前面有说过,2015年以前的老Mac电脑可以安装PS2018的版本,Adobe Photoshop cc2018最低系统需求:10.13以上就可以了,但 ...

  6. 【GaussDB】应用报错 socket is not closed; Urgent packet sent to backend successfully; An I/O error occured while sending to the backend.detail:EOF Exception;

    数据库原理差异 会话空闲时间超过sesseion_time后,数据库主动断开,客户端再发起请求,就会报此类错误: 当一个会话连接长时间没有执行SQL或者活动时,会将该会话释放,可以释放缓存避免出现例如 ...

  7. C#自定义控件—转换开关

    C#用户控件之转换开关 如何自定义一个转换键(Toggle)? 三步绘制一个精美控件: 定义属性: 画布重绘: 添加事件: 主要技能: 如何自定义属性: 画布重绘的一般格式: 控件的事件触发过程: 技 ...

  8. AWS Cloud Practioner 官方课程笔记 - Part 3

    AWS Security 方案和功能 Amazon Inspector AWS Shield Price and Support Free Tier: Always Free, 12-month fr ...

  9. jQuery父子页面之间元素、方法获取、调用

    资源来自:https://www.cnblogs.com/it-xcn/p/5896231.html 一.jquery 父.子页面之间页面元素的获取,方法的调用: 1. 父页面获取子页面元素: 格式: ...

  10. CSS 学习路线图

    一.基础入门阶段 学习内容: 理解 CSS 的作用和基本概念,包括样式表如何与 HTML 结合来美化网页. 掌握 CSS 的语法结构,如选择器.属性和值的组合方式. 学习常见的文本样式属性,如字体大小 ...