Katalon写一个Groovy脚本,实现自动化比较两个文件夹下的文件,并将比较结果以文件为单位输出成HTML。当文件在两个文件夹中都存在但内容不同时,将两个文件中的差异数据都出力到HTML中,并将有差异的字段高亮显示出来;当文件只在一个文件夹中存在时,将这个信息输出到HTML中
时间: 2024-03-04 16:49:03 浏览: 8
可以使用Groovy的FileSystem API和Apache Commons IO库来实现这个脚本,以下是一个示例代码:
```groovy
@Grab('commons-io:commons-io:2.8.0')
import org.apache.commons.io.FileUtils
def compareFolders(folder1, folder2, outputHtml) {
def report = new StringBuilder()
report << "<html><head><title>Folder Comparison Report</title></head><body>"
report << "<h1>Folder Comparison Report</h1>"
def files1 = FileUtils.listFiles(folder1, null, true).toList()
def files2 = FileUtils.listFiles(folder2, null, true).toList()
def commonFiles = files1.intersect(files2)
def uniqueFiles1 = files1.minus(commonFiles)
def uniqueFiles2 = files2.minus(commonFiles)
report << "<h2>Common Files</h2>"
commonFiles.each { file ->
def relativePath = file.relativeTo(folder1).path
def file1Content = FileUtils.readFileToString(file)
def file2 = new File(folder2, relativePath)
def file2Content = FileUtils.readFileToString(file2)
if (file1Content != file2Content) {
report << "<h3>$relativePath</h3>"
report << "<table>"
report << "<tr><th>Field</th><th>File 1</th><th>File 2</th></tr>"
def lines1 = file1Content.split('\n')
def lines2 = file2Content.split('\n')
(0..Math.max(lines1.size(), lines2.size()) - 1).each { lineNumber ->
def line1 = lineNumber < lines1.size() ? lines1[lineNumber] : ""
def line2 = lineNumber < lines2.size() ? lines2[lineNumber] : ""
if (line1 != line2) {
report << "<tr><td>$lineNumber</td><td>${highlightDiff(line1, line2)}</td><td>${highlightDiff(line2, line1)}</td></tr>"
}
}
report << "</table>"
}
}
report << "<h2>Unique Files</h2>"
report << "<h3>Only in Folder 1:</h3>"
uniqueFiles1.each { file ->
report << "<p>${file.relativeTo(folder1)}</p>"
}
report << "<h3>Only in Folder 2:</h3>"
uniqueFiles2.each { file ->
report << "<p>${file.relativeTo(folder2)}</p>"
}
report << "</body></html>"
FileUtils.writeStringToFile(outputHtml, report.toString(), 'UTF-8')
}
def highlightDiff(str1, str2) {
def diffIndex = str1.indices.find { i -> str1[i] != str2[i] }
if (diffIndex == null) {
return str1
}
def prefix = str1.substring(0, diffIndex)
def suffix = str1.substring(diffIndex + 1)
return "${prefix}<span style='background-color: yellow'>${str1[diffIndex]}</span>${suffix}"
}
// Example usage:
compareFolders(new File('folder1'), new File('folder2'), new File('report.html'))
```
这个脚本首先获取两个文件夹中的文件列表,并分别找出共同的文件和独立的文件。对于共同的文件,它比较每个文件的内容,如果有差异则将差异数据输出到HTML中。对于独立的文件,它只需要将文件名输出到HTML中即可。`highlightDiff`函数用于将有差异的字段高亮显示。