Diff概念介绍Diff是Unix系统一个非常重要的工具程序。它用于比较两个文本文件之间的差异,是代码版本管理的基石之一。InterfaceDifftestInterfaceDiff测试,简单来说,就是比较同一接口在不同版本、不同环境下的返回内容是否符合预期。对于日常迭代的界面,Diff测试是对我们界面基础功能测试的有效补充!当测试的接口响应中包含100+个需要校验的字段时,传统的逐个字段校验的方式效率低下。脱颖而出。在这种场景下,我们可以以某个版本(v1)接口的响应为基准,然后对比新版本(v2)的响应,直接通过工具或者写代码检查响应的异同,然后快速定位到接口的响应信息。方法有很多,包括:linux系统中的diff命令,windows中可以使用的工具notepad++等等。这里我将重点介绍如何通过代码实现diff操作。我们以python为例。DifflibDifflib作为python的标准库,不需要安装。它的作用是比较文本之间的差异,支持输出更具可读性的HTML文档。代码写起来也很简单,例子如下:importdifflibimportsys#Readfiledefread_file(filename):try:withopen(filename,'r')asf:returnf.readlines()exceptIOError:print("ERROR:Nofile找到:%s或读取文件失败!"%filename)sys.exit(1)defcompare_file(file1,file2,out_file):file1_content=read_file(file1)file2_content=read_file(file2)d=difflib.HtmlDiff()#compareresult=inhtmld.make_file(file1_content,file2_content)#Generatehtmltextwithopen(out_file,'w')asf:#Writehtmltextintohtmlfilef.writelines(result)if__name__=='__main__':compare_file(r'D:\logs\log1.log',r'D:\logs\log2.log',r'D:\logs\result.html')打开html报告,我们可以清楚的看到两个文件的区别,如下图:其中,左边是文件log1.log,右边是log2.log。红色表示log1.log的内容已经被删除。绿色表示添加了log2.log的内容。黄色表示log1.log和log2.log的内容发生了变化。Difflib改进上面的例子是从两个文件中读取数据,然后进行比较。代码如下:file1_content=read_file(file1)file2_content=read_file(file2)那么在真正的测试中,我们需要的是接口响应的对比。怎么做呢?也很简单,我们只需要将read_file替换成,发送接口请求(使用requests模块)并获得响应即可。response1=requests.get(req)response2=requests.get(req)这里还是有问题。我们在做接口测试的时候,对每一个请求,都一一验证。在批量验证多个请求的时候,我们是否有必要在每次请求时都生成一个比较错误的html报告?显然,这是没有必要的。最理想的情况是当两个请求响应都出错时产生错误报告!那么接下来要思考的就是如何判断html报告是否有错误?这里我介绍一个比较简单的方法。在diff生成的html报告中,我们可以通过报告中的颜色标识来判断diff结果(红绿红),如下图所示:查看生成的html文件的源代码,发现文件底部有颜色的Add、Changed、Deleted对应的脚本在html文件中搜索关键词class="diff_sub",发现:2018,对应可见,删除一个词会出现一个。所以我们可以通过以下实现ifresult.count('
