katalon写一个Groovy脚本,利用java-diff-util库来实现两个文件夹的自动比较,并将结果以html形式输出。当文件在两个文件夹中都存在,但内容不一致,则将差异数据的行数及内容出力到html中;当文件只在一个文件夹中存在,将信息输出到html中。要求能识别隔行数据,每个文件生成一个结果html
时间: 2024-02-28 09:53:45 浏览: 34
好的,以下是一个修改后的解决方案,能够识别隔行数据,每个文件生成一个结果HTML:
```
import java.nio.file.Files
import java.nio.file.Paths
import difflib.DiffUtils
import difflib.Patch
import com.kms.katalon.core.util.KeywordUtil
// 定义比较结果的HTML模板
def htmlTemplate = """
<html>
<head>
<meta http-equiv='Content-Type' content='text/html; charset=utf-8'/>
<style>
.insert {
background-color: #ccffcc;
}
.delete {
background-color: #ffcccc;
}
.diff {
background-color: #ffffcc;
}
</style>
</head>
<body>
<table>
%s
</table>
</body>
</html>
"""
// 定义比较的两个文件夹
def folder1 = "path/to/folder1"
def folder2 = "path/to/folder2"
// 获取两个文件夹中的所有文件
def files1 = new File(folder1).listFiles()
def files2 = new File(folder2).listFiles()
// 遍历folder1中的文件
files1.each { file1 ->
// 获取相应的文件名
def filename = file1.getName()
// 获取folder2中对应的文件
def file2 = new File(folder2, filename)
// 如果文件在folder2中不存在
if (!file2.exists()) {
// 输出信息到HTML文件
def html = String.format(htmlTemplate, """
<tr>
<td>${filename}</td>
<td>Only exists in ${folder1}</td>
</tr>
""")
Files.write(Paths.get(file1.getParent(), "${filename}.html"), html.toString().getBytes())
} else {
// 比较两个文件的内容
def lines1 = Files.readAllLines(Paths.get(file1.getAbsolutePath()))
def lines2 = Files.readAllLines(Paths.get(file2.getAbsolutePath()))
def patch = DiffUtils.diff(lines1, lines2)
// 如果两个文件的内容不同
if (!patch.getDeltas().isEmpty()) {
// 输出差异信息到HTML文件
def deltaHtml = ""
patch.getDeltas().each { delta ->
def lines = delta.getRevised().getLines()
def start = delta.getRevised().getPosition()
def end = start + lines.size() - 1
def type = delta.getType().name().toLowerCase()
deltaHtml += """
<tr class='${type}'>
<td>${start} - ${end}</td>
<td>${lines.join("<br/>")}</td>
</tr>
"""
}
def html = String.format(htmlTemplate, """
<tr>
<td>${filename}</td>
<td>
<table>
${deltaHtml}
</table>
</td>
</tr>
""")
Files.write(Paths.get(file1.getParent(), "${filename}.html"), html.toString().getBytes())
}
}
}
// 遍历folder2中的文件
files2.each { file2 ->
// 获取相应的文件名
def filename = file2.getName()
// 获取folder1中对应的文件
def file1 = new File(folder1, filename)
// 如果文件在folder1中不存在
if (!file1.exists()) {
// 输出信息到HTML文件
def html = String.format(htmlTemplate, """
<tr>
<td>${filename}</td>
<td>Only exists in ${folder2}</td>
</tr>
""")
Files.write(Paths.get(file2.getParent(), "${filename}.html"), html.toString().getBytes())
}
}
```
在这个解决方案中,使用了一个 HTML 模板来生成比较结果的 HTML 文件,可以更灵活地控制输出的格式。同时,使用了 `delta.getRevised().getLines()` 方法来获取差异数据的行内容,可以识别隔行数据。每个文件生成一个结果 HTML 文件,文件名为原始文件名加上 ".html" 后缀。
阅读全文