Katalon利用java-diff-utils库,写一个Groovy脚本:自动比较两个文件夹下的大数据量同名文件,并将比较结果以HTML表格的形式输出成html文件。要求当文件只在其中一个文件夹中存在时 ,将该信息输出;当文件在两个文件夹中都存在时,将两个文件夹中的差异行数及差异内容都出力到HTML中,差异字段以黄色背景高亮显示出来,要求能识别隔行数据
时间: 2024-04-12 09:26:38 浏览: 190
你可以使用以下Groovy脚本来实现该需求:
```groovy
@Grab(group='com.googlecode.java-diff-utils', module='diffutils', version='1.3.0')
import difflib.DiffUtils
import difflib.Patch
import difflib.DiffRowGenerator
// 定义两个文件夹的路径
def folder1Path = "path/to/folder1"
def folder2Path = "path/to/folder2"
// 获取两个文件夹下的所有文件
def folder1Files = new File(folder1Path).listFiles()
def folder2Files = new File(folder2Path).listFiles()
// 创建HTML表格的头部
def htmlTable = "<table>\n<tr><th>文件名</th><th>差异行数</th><th>差异内容</th></tr>\n"
// 遍历folder1中的文件
folder1Files.each { file1 ->
def fileName = file1.name
def file2 = new File(folder2Path, fileName)
// 文件只在folder1中存在
if (!file2.exists()) {
htmlTable += "<tr><td>${fileName}</td><td>只存在于folder1</td><td></td></tr>\n"
} else {
// 文件在两个文件夹中都存在
def diffRows = compareFiles(file1, file2)
if (diffRows.size() > 0) {
def diffContent = generateDiffContent(diffRows)
htmlTable += "<tr><td>${fileName}</td><td>${diffRows.size()}</td><td>${diffContent}</td></tr>\n"
}
}
}
// 遍历folder2中只存在的文件
folder2Files.each { file2 ->
def fileName = file2.name
def file1 = new File(folder1Path, fileName)
// 文件只在folder2中存在
if (!file1.exists()) {
htmlTable += "<tr><td>${fileName}</td><td>只存在于folder2</td><td></td></tr>\n"
}
}
// 创建HTML表格的尾部
htmlTable += "</table>"
// 将HTML表格写入文件
def outputFilePath = "path/to/output.html"
new File(outputFilePath).write(htmlTable)
// 比较两个文件的差异行并返回
def compareFiles(file1, file2) {
def lines1 = file1.readLines()
def lines2 = file2.readLines()
def patch = DiffUtils.diff(lines1, lines2)
patch.getDeltas().collect { delta ->
def diffRows = DiffUtils.generateUnifiedDiff(delta)
diffRows - diffRows[0] // 去除diffRows的第一行,因为它是文件头信息
}
}
// 生成差异内容的HTML代码
def generateDiffContent(diffRows) {
def diffContent = ""
diffRows.each { row ->
def line = row.substring(1) // 去除行首的"-"或"+"
if (line.startsWith("@@")) {
diffContent += "<br>" // 添加换行符,用于识别隔行数据
} else if (line.startsWith("-")) {
diffContent += "<span style='background-color: yellow;'>${line}</span><br>"
} else if (line.startsWith("+")) {
diffContent += "<span style='background-color: yellow;'>${line}</span><br>"
} else {
diffContent += "${line}<br>"
}
}
diffContent
}
```
请将 `path/to/folder1` 和 `path/to/folder2` 替换为实际的文件夹路径,并将 `path/to/output.html` 替换为输出的HTML文件路径。这个脚本会比较两个文件夹中的同名文件,并以HTML表格的形式输出差异信息。当文件只在其中一个文件夹中存在时,将该信息输出;当文件在两个文件夹中都存在时,将两个文件夹中的差异行数及差异内容都以黄色背景高亮显示出来,并识别隔行数据。生成的HTML文件将保存在指定路径下。
阅读全文