Katalon写一个Groovy脚本,java8利用java-diff-util实现两个文件夹对比,并将比较结果出力为HTML文件。要求:当文件在两个文件夹中都存在时,能识别隔行数据,将两个文件的差异数据都出力到HTML中,并且将有差异的字段高亮显示出来
时间: 2024-03-03 12:53:32 浏览: 76
比较两个文件的差别的工具
以下是一个示例 Groovy 脚本,它使用 `java-diff-utils` 库实现了两个文件夹的对比,并将比较结果输出为 HTML 文件:
```groovy
@Grab('com.googlecode.java-diff-utils:diffutils:1.3.0')
import difflib.*
import java.nio.file.*
import groovy.xml.*
// 定义文件夹路径
def folder1 = Paths.get("path/to/folder1")
def folder2 = Paths.get("path/to/folder2")
// 遍历文件夹中的所有文件
def files1 = Files.walk(folder1).filter { Files.isRegularFile(it) }.toList()
def files2 = Files.walk(folder2).filter { Files.isRegularFile(it) }.toList()
// 定义比较结果
def results = []
files1.each { file1 ->
// 在文件夹2中查找同名文件
def file2 = files2.find { it.fileName == file1.fileName }
if (file2) {
// 两个文件都存在,进行比较
def lines1 = Files.readAllLines(file1)
def lines2 = Files.readAllLines(file2)
def patch = DiffUtils.diff(lines1, lines2)
if (!patch.getDeltas().isEmpty()) {
// 有差异,记录比较结果
results << [
file1: file1,
file2: file2,
patch: patch
]
}
} else {
// 文件2中不存在,记录比较结果
results << [
file1: file1,
file2: null,
patch: null
]
}
}
files2.each { file2 ->
// 在文件夹1中查找同名文件
def file1 = files1.find { it.fileName == file2.fileName }
if (!file1) {
// 文件1中不存在,记录比较结果
results << [
file1: null,
file2: file2,
patch: null
]
}
}
// 生成 HTML 报告
def writer = new StringWriter()
def builder = new MarkupBuilder(writer)
builder.html {
head {
title("Folder Comparison Report")
}
body {
table(border: 1) {
tr {
th("File 1")
th("File 2")
th("Difference")
}
results.each { result ->
tr {
def file1 = result.file1?.toString() ?: ""
def file2 = result.file2?.toString() ?: ""
td(file1)
td(file2)
td {
if (result.patch) {
ul {
result.patch.getDeltas().each { delta ->
li {
def diff = delta.getRevised().getLines().join("\n")
diff = diff.replaceAll("<", "<")
diff = diff.replaceAll(">", ">")
diff = diff.replaceAll("\n", "<br/>")
span(style: "background-color: yellow") {
"${delta.getType()} (lines ${delta.getRevised().getPosition() + 1}-${delta.getRevised().last() + 1}):"
}
br()
span {
diff
}
}
}
}
}
}
}
}
}
}
}
// 输出 HTML 文件
def html = writer.toString()
Files.write(Paths.get("comparison.html"), html.getBytes())
```
这个脚本会遍历文件夹1和文件夹2中的所有文件,并将同名文件进行比较。如果两个文件都存在且有差异,就将比较结果记录下来。如果一个文件在其中一个文件夹中存在而在另一个文件夹中不存在,也会记录比较结果。最后,脚本会生成一个 HTML 报告,其中列出了所有比较结果,并将有差异的部分高亮显示。
阅读全文