katalon写一个Groovy脚本,利用java-diff-util库来实现两个文件夹的自动比较,并利用ReportGenerator将比较结果生成HTML。当文件在两个文件夹中都存在,但内容不一致,则将差异数据的行数及内容出力到html中,将具体哪个字段有差异高亮显示出来;当文件只在一个文件夹中存在,将信息输出到html中。要求能识别隔行数据,按文件名生成结果html,html里显示两个文件夹的差异内容
时间: 2024-02-28 14:55:39 浏览: 115
以下是一个Katalon Studio中的Groovy脚本,用于比较两个文件夹并生成HTML报告:
```groovy
import difflib.DiffUtils
import difflib.Patch
import difflib.Delta
import java.nio.file.Files
import java.nio.file.Path
import java.nio.file.Paths
import java.util.stream.Collectors
// 定义需要比较的文件夹
def folder1 = "C:/folder1"
def folder2 = "C:/folder2"
// 定义报告文件夹和文件名
def reportFolder = "C:/reports"
def reportName = "diff_report.html"
// 比较文件夹中的所有文件
def compareFolders = { Path path1, Path path2 ->
def files1 = Files.list(path1).collect(Collectors.toList())
def files2 = Files.list(path2).collect(Collectors.toList())
def patch = DiffUtils.diff(files1, files2)
// 生成差异报告
def deltas = patch.getDeltas()
deltas.each { Delta delta ->
def type = delta.getType()
def sourceLines = delta.getSource().getLines()
def targetLines = delta.getTarget().getLines()
// 如果是文件存在于两个文件夹中但内容不一致
if (type == Delta.TYPE.CHANGE) {
def file1 = delta.getSource().toString()
def file2 = delta.getTarget().toString()
def diffReport = generateDiffReport(file1, file2)
appendReport(diffReport)
}
// 如果是文件只存在于一个文件夹中
else if (type == Delta.TYPE.INSERT) {
def file2 = delta.getTarget().toString()
def msg = "File '${file2}' only exists in '${path2}'"
appendReport(msg)
}
else if (type == Delta.TYPE.DELETE) {
def file1 = delta.getSource().toString()
def msg = "File '${file1}' only exists in '${path1}'"
appendReport(msg)
}
}
}
// 比较两个文件的内容并生成差异报告
def generateDiffReport = { String file1, String file2 ->
def lines1 = Files.readAllLines(Paths.get(file1))
def lines2 = Files.readAllLines(Paths.get(file2))
def patch = DiffUtils.diff(lines1, lines2)
def deltas = patch.getDeltas()
def report = "<h2>Comparison result for file '${file1}' and '${file2}'</h2>"
deltas.each { Delta delta ->
def type = delta.getType()
def sourceLines = delta.getSource().getLines()
def targetLines = delta.getTarget().getLines()
def msg = ""
if (type == Delta.TYPE.CHANGE) {
msg = "<p><strong>Line numbers ${sourceLines} changed to ${targetLines}</strong></p>"
msg += "<pre>"
sourceLines.each { line ->
if (line) {
msg += "<del>${line}</del>"
}
}
targetLines.each { line ->
if (line) {
msg += "<ins>${line}</ins>"
}
}
msg += "</pre>"
}
report += msg
}
return report
}
// 将报告输出到文件
def appendReport = { String report ->
def reportFile = new File(reportFolder, reportName)
if (!reportFile.exists()) {
reportFile.createNewFile()
}
// 将报告写入文件
reportFile << report
}
// 比较两个文件夹
compareFolders(Paths.get(folder1), Paths.get(folder2))
```
该脚本会比较两个文件夹中的文件,并将差异输出到HTML报告中。如果文件存在于一个文件夹中但不存在于另一个文件夹中,则会将该信息输出到报告中。此外,该脚本还会识别隔行数据,并将差异高亮显示出来。
要使用该脚本,您需要将Java-diff-utils库添加到Katalon Studio的build path中。在Katalon Studio中,您可以通过单击项目资源管理器中的“External Libraries”并选择“Build Path”>“Add External Libraries”来添加该库。将库文件添加到项目中后,您可以将以上脚本复制并粘贴到Katalon Studio的Groovy脚本中,并根据需要修改路径和文件名。
阅读全文