Katalon写一个Groovy脚本,java8利用java-diff-util实现两个文件夹对比,并将比较结果出力为HTML文件。要求:当文件在两个文件夹中都存在时,能识别隔行数据,将两个文件的差异数据都出力到HTML中,解析差异数据并将有差异的字段高亮显示出来;当文件只在一个文件夹中存在的文件,将结果出力到HTML中
时间: 2024-03-02 17:47:59 浏览: 51
以下是一个使用Katalon Studio与java-diff-util库进行文件夹对比并输出HTML报告的Groovy脚本示例:
```groovy
import java.io.File
import java.util.List
import difflib.DiffUtils
import difflib.Delta
import difflib.Patch
// 定义要比较的文件夹路径
def folder1Path = "C:\\folder1"
def folder2Path = "C:\\folder2"
// 定义输出HTML报告的路径
def reportPath = "C:\\diff.html"
// 定义HTML报告的样式
def style = "<style> .added {background-color: #aaffaa;} .deleted {background-color: #ffaaaa;} </style>"
// 获取文件夹内所有文件的路径列表
def folder1Files = new File(folder1Path).listFiles().toList()
def folder2Files = new File(folder2Path).listFiles().toList()
// 定义Patch对象,用于存储比较结果
def patch = DiffUtils.diff(folder1Files, folder2Files)
// 创建HTML报告文件并写入样式
def reportFile = new File(reportPath)
reportFile.write(style)
// 遍历每个Delta对象,将差异数据输出到HTML报告中
patch.getDeltas().each { Delta delta ->
def deltaType = delta.getType().name()
def deltaHtml = "<div class='${deltaType.toLowerCase()}'>\n"
delta.getOriginal().forEachWithIndex { Object line, int index ->
if(deltaType == "CHANGE" && line != delta.getRevised().get(index)){
deltaHtml += "<span class='deleted'>${line}</span>\n"
deltaHtml += "<span class='added'>${delta.getRevised().get(index)}</span>\n"
}
else{
deltaHtml += "<span>${line}</span>\n"
}
}
deltaHtml += "</div>\n"
reportFile.append(deltaHtml)
}
// 输出结果
println "文件夹比较完成,结果已输出到${reportPath}"
```
该脚本将两个文件夹中的文件路径列表传递给`DiffUtils.diff()`方法,使用java-diff-util库进行比较,并返回一个`Patch`对象,该对象包含了所有差异数据。脚本遍历每个`Delta`对象,将差异数据输出到HTML报告中,并使用CSS样式将添加和删除的内容进行高亮显示。在遍历每个原始文件的行时,脚本将每个行的文本与相应的修改行的文本进行比较,如果不同,则将删除和修改的内容显示为红色,添加的内容显示为绿色。如果两个文件的行相同,则将其显示为黑色。最后,脚本将HTML报告写入指定路径的文件中。
请注意,该脚本仅比较文件夹中的文件名,而不比较文件内容。如果需要比较文件内容,请使用`DiffUtils.diff()`方法的重载版本,该版本接受两个文件的路径作为参数,而不是两个文件夹的路径列表。
阅读全文