Katalon写一个Groovy脚本,java8利用java-diff-util实现两个文件夹对比,并将比较结果以文件为单位出力成各自的HTML文件。要求:当文件在两个文件夹中都存在时,能识别隔行数据,将两个文件有差异的数据都出力到HTML中,解析两个文件的差异数据并将有差异的字段高亮显示出来;当文件只在一个文件夹中存在的文件,将这个信息出力到HTML中
时间: 2024-03-02 17:54:36 浏览: 70
folder-diff:比较两个文件夹的工具
首先,需要在Katalon中引入java-diff-utils库,可以在项目的build.gradle文件中添加以下代码:
```
dependencies {
// other dependencies
implementation group: 'com.googlecode.java-diff-utils', name: 'diffutils', version: '1.3.0'
}
```
接下来,可以编写Groovy脚本实现文件夹对比。
```groovy
import java.nio.file.Files
import java.nio.file.Paths
import java.util.List
import difflib.DiffUtils
import difflib.Patch
import groovy.json.JsonOutput
// 定义文件夹路径
def folder1 = "path/to/folder1"
def folder2 = "path/to/folder2"
// 获取文件夹中的所有文件
def files1 = Files.list(Paths.get(folder1)).map { it.toString() }.collect()
def files2 = Files.list(Paths.get(folder2)).map { it.toString() }.collect()
// 找出只在一个文件夹中存在的文件
def onlyInFolder1 = files1.minus(files2)
def onlyInFolder2 = files2.minus(files1)
// 定义用于存储比较结果的列表
def diffResults = []
// 对于两个文件夹中都存在的文件,逐个比较并输出比较结果
(files1.intersect(files2)).each { file ->
def content1 = Files.readAllLines(Paths.get("${folder1}/${file}"))
def content2 = Files.readAllLines(Paths.get("${folder2}/${file}"))
// 使用java-diff-utils库进行比较
def patch = DiffUtils.diff(content1, content2)
if (patch.getDeltas().size() > 0) {
// 如果存在差异,则将差异信息存储到列表中
def diffInfo = [:]
diffInfo.put("file", file)
diffInfo.put("diffs", patch.getDeltas().collect { delta ->
def diff = [:]
def range = delta.getOriginal()
def lines = content1.subList(range.getStart(), range.getEnd())
def from = range.getStart() + 1
def to = range.getEnd() + 1
diff.put("from", from)
diff.put("to", to)
diff.put("lines", lines)
diff
})
diffResults.add(diffInfo)
}
}
// 输出比较结果到HTML文件
diffResults.each { result ->
def file = result.get("file")
def diffs = result.get("diffs")
def html = """
<html>
<head>
<meta charset="utf-8">
<title>Diff Report: ${file}</title>
<style>
.added { background-color: #aaffaa; }
.removed { background-color: #ffaaaa; }
</style>
</head>
<body>
<h1>Diff Report: ${file}</h1>
"""
diffs.each { diff ->
def from = diff.get("from")
def to = diff.get("to")
def lines = diff.get("lines")
html += """
<h2>Lines ${from} - ${to}</h2>
<pre>
"""
lines.eachWithIndex { line, index ->
// 高亮显示差异部分
def tag = ""
if (line.startsWith("-")) {
tag = "<span class=\"removed\">"
} else if (line.startsWith("+")) {
tag = "<span class=\"added\">"
}
if (tag != "") {
line = "${tag}${line.substring(1)}</span>"
}
html += "${line}\n"
}
html += """
</pre>
"""
}
html += """
</body>
</html>
"""
// 将HTML文件保存到磁盘
Files.write(Paths.get("${file}.html"), html.getBytes())
}
// 输出只在一个文件夹中存在的文件信息到控制台
println("Files only in ${folder1}:")
onlyInFolder1.each { println(it) }
println("Files only in ${folder2}:")
onlyInFolder2.each { println(it) }
```
这段脚本首先获取两个文件夹中的所有文件,然后找出只在一个文件夹中存在的文件。对于两个文件夹中都存在的文件,使用java-diff-utils库进行比较,将比较结果存储到一个列表中。最后,逐个输出比较结果到HTML文件,并将只在一个文件夹中存在的文件信息输出到控制台。
阅读全文