Python自带difflib模块
官方文档: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模块的更多相关文章
- 使用Python自带difflib模块进行文件内容差异对比
difflib_text.py #!/usr/bin/python import difflib import sys try: textfile1=sys.argv[1] textfile2=sys ...
- Python自动化测试 (二) ConfigParser模块读写配置文件
ConfigParser 是Python自带的模块, 用来读写配置文件, 用法及其简单. 直接上代码,不解释,不多说. 配置文件的格式是: []包含的叫section, section 下有op ...
- Python day 7(1) 模块
一:模块 1 在Python中,一个.py文件就称之为一个模块(Module) 2 Python的好处,优点: a 提高了代码的可维护性 b 当一个模块编写完毕,就可以被其他地方引用.我们在编写程 ...
- Python面向对象编程和模块
在面向对象编程中,你编写表示现实世界中的事物和情景的类,并基于这些类来创建对象. 编写类时,你定义一大类对象都有的通用行为.基于类创建对象时,每个对象都自动具备这种通用行为,然后根据需要赋予每个对象独 ...
- python之旅:模块与包
一.模块介绍 前言:引用廖雪峰大神的,说的很好!!! 在计算机程序的开发过程中,随着程序代码越写越多,在一个文件里代码就会越来越长,越来越不容易维护. 为了编写可维护的代码,我们把很多函数分组,分别放 ...
- python学习笔记:模块——自定义模块的3种导入方式
一.定义 模块就是用一堆的代码实现了一些功能的代码的集合,通常一个或者多个函数写在一个.py文件里,而如果有些功能实现起来很复杂,那么就需要创建n个.py文件,这n个.py文件的集合就是模块.如果不懂 ...
- python之生成器与模块
目录 生成器对象 自定义range方法 生成器表达式 模块 简介 模块的导入方式 第一种:import ... 第二种:from ... import ... 补充 生成器对象 生成器对象其实本质还是 ...
- Python自带的hmac模块
Python自带的hmac模块实现了标准的Hmac算法 我们首先需要准备待计算的原始消息message,随机key,哈希算法,这里采用MD5,使用hmac的代码如下: import hmac mess ...
- Python安装包或模块的多种方式汇总
windows下安装python第三方包.模块汇总如下(部分方式同样适用于其他平台): 1. windows下最常见的*.exe,*msi文件,直接运行安装即可: 2. 安装easy_install, ...
- python基础知识9——模块2——常见内置模块
内置模块 内置模块是Python自带的功能,在使用内置模块相应的功能时,需要[先导入]再[使用] 1.sys 用于提供对Python解释器相关的操作: sys.argv 命令行参数List,第一个元素 ...
随机推荐
- blender-十大基本操作
- RabbitMQ 基础概念与架构设计及工作机制学习总结
什么是RabbitMQ MQ全称为Message Queue,即消息队列. 它也是一个队列,遵循FIFO原则 .RabbitMQ则是一个开源的消息中间件,由erlang语言开发,基于AMQP协议实现的 ...
- macOS 扫描局域网设备
arp-scan: arp-scan 是一个直接用于扫描本地网络中的设备的 UNIX 工具.这不是 macOS 自带的,但可以使用 Homebrew 安装.首先安装 Homebrew(如果尚未安装), ...
- 最简!手把手带你完美删除Vmware虚拟机!
Vmware虚拟机最简完美删除教程 你还在苦于无法完美删除Vmware虚拟机吗?你还在为自己千疮百孔的系统而烦恼吗?你还在为想要重做Vmware但没删干净各种报错而烦操吗?但今天之后这些问题都将不是问 ...
- chrome.tabs.sendMessage和chrome.runtime.sendMessage的用法及区别
在 Chrome 扩展开发中,chrome.tabs.sendMessage 和 chrome.runtime.sendMessage 是用于不同目的的消息发送 API,它们的主要区别在于消息的目标对 ...
- JVM笔记八-堆参数调优
JVM垃圾收集器(Java Garbage Collection).本教程均在JDK1.8+HotSpot为例来讲解的. 先来看看Java7的: 编辑 再来看看Jva8的 编辑 从上图中我们可 ...
- VUE-局部使用
目录 VUE-局部使用 快速入门 常用指令 v-for v-bind v-if & v-show v-on v-model vue生命周期 Axios Vue案例 VUE-局部使用 Vue 是 ...
- 查看tensorflow pb模型文件
""" @Author: Qiangz @Date: 2019/7/5 @Description: """ import tensorflo ...
- migration to end point routing
花了几个小时,记入一下吧. 1. odata https://devblogs.microsoft.com/odata/enabling-endpoint-routing-in-odata/ 找着弄就 ...
- ASP.NET Core Library – Excel 读写
前言 以前写过 EPPlus 的笔记, 但后来 EPPlus 开始收费了.... (这好像是 .NET 生态的宿命) 在找替代方案中看中了微软的 Open XML SDK. 但经过一番折腾, 它确实太 ...