Katalon写一个Groovy脚本,java8利用java-diff-util实现两个文件夹对比,并将比较结果出力为HTML文件。要求:当文件在两个文件夹中都存在时,能识别隔行数据,将两个文件的差异数据都出力到HTML中,解析差异数据并将有差异的字段高亮显示出来;当文件只在一个文件夹中存在的文件,将结果出力到HTML中
时间: 2024-03-02 15:48:09 浏览: 23
以下是实现该功能的 Groovy 脚本,需要使用 `java-diff-utils` 库。
```groovy
import difflib.*
import java.nio.file.*
// 定义文件夹路径
def folder1 = Paths.get("path/to/folder1")
def folder2 = Paths.get("path/to/folder2")
// 定义输出文件路径
def output = Paths.get("path/to/output.html")
// 定义输出 HTML 文件的头部
def header = """
<!DOCTYPE html>
<html>
<head>
<style>
.added { background-color: #ddffdd; }
.removed { background-color: #ffdddd; }
.changed { background-color: #ffffcc; }
.bold { font-weight: bold; }
</style>
</head>
<body>
"""
// 定义输出 HTML 文件的尾部
def footer = """
</body>
</html>
"""
// 获取文件夹中的所有文件
def files1 = Files.walk(folder1)
.filter { Files.isRegularFile(it) }
.map { folder1.relativize(it).toString() }
.collect()
def files2 = Files.walk(folder2)
.filter { Files.isRegularFile(it) }
.map { folder2.relativize(it).toString() }
.collect()
// 获取两个文件夹中共同存在的文件
def commonFiles = files1.intersect(files2)
// 获取只在一个文件夹中存在的文件
def uniqueFiles = (files1 - commonFiles) + (files2 - commonFiles)
// 定义输出 HTML 文件的内容
def content = ""
// 处理共同存在的文件
commonFiles.each { file ->
def lines1 = Files.readAllLines(folder1.resolve(file))
def lines2 = Files.readAllLines(folder2.resolve(file))
// 使用 DiffUtils 获取文件差异
def patch = DiffUtils.diff(lines1, lines2)
// 处理差异数据并将有差异的字段高亮显示
def result = patch.getDeltas().inject("") { str, delta ->
def type = delta.getType().name().toLowerCase()
def lines = delta.getRevised().getLines().collect { line ->
if (type == "change") {
"<span class=\"$type\">$line</span>"
} else {
line
}
}
str + "<p class=\"$type bold\">$type: ${delta.getOriginal().getPosition()}, ${delta.getRevised().getPosition()}</p><pre>${lines.join('\n')}</pre>"
}
// 将处理后的差异数据添加到 HTML 内容中
content += "<h2>$file</h2>$result"
}
// 处理只在一个文件夹中存在的文件
uniqueFiles.each { file ->
def folder = if (files1.contains(file)) folder1 else folder2
def lines = Files.readAllLines(folder.resolve(file))
content += "<h2>$file</h2><pre>${lines.join('\n')}</pre>"
}
// 将输出 HTML 文件的头部、内容和尾部拼接起来
def html = header + content + footer
// 将 HTML 写入输出文件
Files.write(output, html.getBytes())
```
该脚本首先获取两个文件夹中的所有文件,然后分别处理共同存在的文件和只在一个文件夹中存在的文件。对于共同存在的文件,使用 `DiffUtils` 获取文件差异,并对差异数据进行处理,将有差异的字段高亮显示。对于只在一个文件夹中存在的文件,直接输出文件内容。最后将输出的头部、内容和尾部拼接起来,写入输出文件中。