Katalon写一个Groovy脚本,java8利用java-diff-util实现两个文件夹对比,并将比较结果以文件为单位出力成各自的HTML文件。要求:当文件在两个文件夹中都存在时,能识别隔行数据,将两个文件有差异的数据都出力到HTML中,解析两个文件的差异数据并将有差异的字段高亮显示出来;当文件只在一个文件夹中存在的文件,将这个信息出力到HTML中
时间: 2024-03-02 17:54:00 浏览: 21
以下是一个实现了你要求的 Groovy 脚本,其中使用了 java-diff-utils 库:
```groovy
@Grab('com.googlecode.java-diff-utils:diffutils:1.3.0')
import difflib.*
import java.nio.file.*
import java.util.*
// 要比较的文件夹路径
def folder1 = Paths.get("path/to/folder/1")
def folder2 = Paths.get("path/to/folder/2")
// 递归遍历文件夹,获取所有文件
def getAllFiles(folder) {
Files.walk(folder).filter{ Files.isRegularFile(it) }.toList()
}
// 获取两个文件的差异信息
def getDiff(file1, file2) {
def content1 = Files.readAllLines(file1)
def content2 = Files.readAllLines(file2)
// 使用 diffutils 库计算差异
def patch = DiffUtils.diff(content1, content2)
// 将差异信息转换成 HTML 格式
def html = new StringBuilder()
def table = html.append("<table>\n")
patch.getDeltas().each { delta ->
def lines1 = delta.getOriginal().getLines()
def lines2 = delta.getRevised().getLines()
def diffTable = DiffUtils.diff(lines1, lines2)
def rows = diffTable.getDeltas().collect { subDelta ->
def type = subDelta.getType().toString().toLowerCase()
def lines = subDelta.getLines().collect { "<span class='${type}'>${it}</span>" }
"<tr><td>${type}</td><td>${lines.join("<br>")}</td></tr>"
}.join("\n")
table.append("<tr><td>${delta.getOriginal().getPosition()}</td><td>${delta.getRevised().getPosition()}</td></tr>")
table.append(rows)
}
table.append("</table>")
html.toString()
}
// 对比所有文件夹中的文件
def files1 = getAllFiles(folder1)
def files2 = getAllFiles(folder2)
def allFiles = (files1 + files2).unique()
allFiles.each { file ->
def path1 = folder1.relativize(file).toString()
def path2 = folder2.relativize(file).toString()
def file1 = folder1.resolve(path1)
def file2 = folder2.resolve(path2)
if (Files.exists(file1) && Files.exists(file2)) {
// 两个文件都存在,比较它们的内容
def diff = getDiff(file1, file2)
if (diff.trim().length() > 0) {
// 有差异,将差异信息写入 HTML 文件
def html = """
<html>
<head>
<style>
.insert {
background-color: #ccffcc;
}
.delete {
background-color: #ffcccc;
}
</style>
</head>
<body>
<h1>${path1}</h1>
${diff}
</body>
</html>
"""
def outputFile = file1.withSuffix(".html")
Files.write(outputFile, html.getBytes())
}
} else {
// 只有一个文件存在,将这个信息写入 HTML 文件
def path = Files.exists(file1) ? path1 : path2
def html = """
<html>
<body>
<h1>${path}</h1>
<p>Only exists in ${Files.exists(file1) ? "Folder 1" : "Folder 2"}</p>
</body>
</html>
"""
def outputFile = file1.withSuffix(".html")
Files.write(outputFile, html.getBytes())
}
}
```
这个脚本会递归遍历指定的两个文件夹中的所有文件,对比它们的内容,并将比较结果以 HTML 文件的形式输出到各自的文件夹中。对于两个文件夹中都存在的文件,它会识别隔行数据,并将两个文件有差异的数据都输出到 HTML 中,并将有差异的字段高亮显示出来。对于只在一个文件夹中存在的文件,它会将这个信息输出到 HTML 中。