Katalon利用java-diff-utils库,写一个Groovy脚本:自动比较两个文件夹下的大数据量的同名文件,并将比较结果以HTML表格的形式输出成html文件。() 具体要求:当文件只在其中一个文件夹中存在时,将该信息输出到html文件中; 当文件在两个文件夹中都存在时,将两边文件中的差异行数及差异内容都出力到html文件中,要求先比较整行是否一致,如果行不一致,再按位将不一致的位以黄色背景色高亮显示出来,并且能识别出隔行数据。
时间: 2024-04-13 12:28:13 浏览: 166
以下是一个使用Katalon Studio和java-diff-utils库编写的Groovy脚本,用于自动比较两个文件夹下的大数据量的同名文件,并将比较结果以HTML表格的形式输出成HTML文件。
```groovy
import difflib.Delta
import difflib.DiffUtils
import difflib.Patch
import com.kms.katalon.core.util.KeywordUtil
def compareFolders(String folderPath1, String folderPath2, String outputFilePath) {
def folder1 = new File(folderPath1)
def folder2 = new File(folderPath2)
// 获取两个文件夹中的所有同名文件
def files = folder1.listFiles({ file -> file.isFile() && folder2.listFiles({ file2 -> file2.isFile() && file2.name == file.name }) != null })
// 创建HTML表格
def htmlTable = "<table border='1'><tr><th>文件名</th><th>比较结果</th></tr>"
// 遍历文件
files.each { file ->
def fileName = file.name
def filePath1 = file.absolutePath
def filePath2 = folder2.absolutePath + File.separator + fileName
// 读取文件内容
def fileContent1 = new File(filePath1).text
def fileContent2 = new File(filePath2).text
// 比较文件内容
def patch = DiffUtils.diff(fileContent1.tokenize('\n'), fileContent2.tokenize('\n'))
// 生成HTML表格行
def tableRow = "<tr><td>$fileName</td><td>"
// 文件只在其中一个文件夹中存在的情况
if (patch.getDeltas().isEmpty()) {
tableRow += "文件只在一个文件夹中存在"
} else {
// 文件在两个文件夹中都存在的情况
tableRow += "<table border='1'><tr><th>差异行号</th><th>差异内容</th></tr>"
// 遍历差异
patch.getDeltas().each { delta ->
def originalLines = delta.getOriginal().getLines()
def revisedLines = delta.getRevised().getLines()
// 整行是否一致
if (originalLines == revisedLines) {
tableRow += "<tr><td colspan='2'>整行一致</td></tr>"
} else {
tableRow += "<tr><td>${delta.getOriginal().getPosition() + 1}-${delta.getOriginal().last() + 1}</td><td>"
// 遍历每个差异行
delta.getOriginal().getLines().eachWithIndex { line, index ->
// 比较每个字符
def diffChars = line.toList().withIndex().findAll { it.value != revisedLines[index][it.index] }
if (diffChars) {
// 按位将不一致的位以黄色背景色高亮显示出来
def highlightedLine = line.toList().collectWithIndex { ch, i -> diffChars.contains(i) ? "<span style='background-color: yellow'>$ch</span>" : ch }.join()
tableRow += highlightedLine
} else {
tableRow += line
}
if (index < delta.getOriginal().getLines().size() - 1) {
// 识别出隔行数据
tableRow += "<br>"
}
}
tableRow += "</td></tr>"
}
}
tableRow += "</table>"
}
tableRow += "</td></tr>"
htmlTable += tableRow
}
htmlTable += "</table>"
// 将HTML表格写入HTML文件
new File(outputFilePath).write(htmlTable)
KeywordUtil.logInfo("比较结果已输出到HTML文件:$outputFilePath")
}
// 调用函数进行比较
compareFolders("文件夹路径1", "文件夹路径2", "输出的HTML文件路径")
```
请将脚本中的`文件夹路径1`替换为第一个文件夹的路径,将`文件夹路径2`替换为第二个文件夹的路径,将`输出的HTML文件路径`替换为输出的HTML文件的路径。
这个脚本会比较两个文件夹中的同名文件,输出比较结果到指定的HTML文件中。如果文件只在其中一个文件夹中存在,将该信息输出到HTML文件中;如果文件在两个文件夹中都存在,将两边文件中的差异行数及差异内容都输出到HTML文件中。脚本会先比较整行是否一致,如果行不一致,再按位将不一致的位以黄色背景色高亮显示出来,并且能识别出隔行数据。
阅读全文