Katalon写一个Groovy脚本,java8利用java-diff-util实现两个文件夹对比,并将比较结果出力为HTML文件。要求:当文件在两个文件夹中都存在时,能识别隔行数据,将两个文件的差异数据都出力到HTML中,并且将有差异的字段高亮显示出来
时间: 2024-03-01 15:51:46 浏览: 46
以下是一个使用Katalon和java-diff-utils实现两个文件夹对比的Groovy脚本,并将比较结果输出为HTML文件:
```groovy
import com.github.difflib.DiffUtils
import com.github.difflib.algorithm.DiffException
import com.github.difflib.patch.Patch
import java.nio.file.Files
import java.nio.file.Paths
import groovy.xml.MarkupBuilder
// 定义两个文件夹路径
def folder1 = "path/to/folder1"
def folder2 = "path/to/folder2"
// 定义输出HTML文件路径
def output = "path/to/output.html"
// 获取两个文件夹中的所有文件
def files1 = new File(folder1).listFiles()
def files2 = new File(folder2).listFiles()
// 定义HTML输出格式
def html = new MarkupBuilder(new FileWriter(output))
html.html {
head {
title("Folder Comparison")
}
body {
table(border: "1") {
tr {
td("File Name")
td(folder1)
td(folder2)
}
files1.each { file1 ->
def file2 = new File(folder2, file1.name)
if (file2.exists()) {
def diff = compareFiles(file1, file2)
if (diff.size() > 0) {
tr {
td(file1.name)
td(diff[0])
td(diff[1])
}
}
}
}
}
}
}
// 定义文件比较函数
def compareFiles(file1, file2) {
def lines1 = Files.readAllLines(Paths.get(file1.path))
def lines2 = Files.readAllLines(Paths.get(file2.path))
def patch = DiffUtils.diff(lines1, lines2)
def diff = patch.getDeltas().collect { delta ->
def diffLines = delta.getOriginal().getLines().join("\n")
def highlightedLines = delta.getRevised().getLines().join("\n")
highlightDiff(diffLines, highlightedLines)
}
return diff
}
// 定义高亮差异函数
def highlightDiff(diffLines, highlightedLines) {
def diffHtml = new MarkupBuilder()
def highlightedHtml = new MarkupBuilder()
diffHtml.p {
diffLines.eachWithIndex { line, i ->
if (line == highlightedLines[i]) {
diffHtml.span(line)
highlightedHtml.span(line)
} else {
diffHtml.span(line, style: "background-color: yellow")
highlightedHtml.span(highlightedLines[i], style: "background-color: yellow")
}
}
}
return [diffHtml.toString(), highlightedHtml.toString()]
}
```
解释:
1. 导入java-diff-utils库以进行文件比较。
2. 定义两个文件夹路径和输出HTML文件路径。
3. 获取两个文件夹内的所有文件。
4. 定义HTML输出格式。
5. 对于两个文件夹中存在的相同文件,调用compareFiles函数进行比较。
6. compareFiles函数将两个文件中的行进行比较,并返回差异数据的HTML格式。
7. highlightDiff函数将差异数据中的不同行高亮显示。
8. 将比较结果输出为HTML文件。
注意:
1. 脚本中使用了java-diff-utils库,请确保你的Katalon项目中已经引入了该库。
2. 该脚本只能比较两个文件夹中存在的相同文件,无法比较只存在于一个文件夹中的文件。
阅读全文