Katalon利用java-diff-utils库,写一个Groovy脚本:自动比较两个文件夹下的大数据量d的同名文件,并将比较结果以HTML表格的形式输出成html文件。 要求当文件只在其中一个文件夹中存在时 ,将该信息输出到html文件中;当文件在两个文件夹中都存在时,将两个文件夹中的差异行数及差异内容都出力到html文件中,将两边有差异的字段以黄色背景高亮显示出来,要求能识别隔行数据
时间: 2024-04-12 13:27:25 浏览: 221
你可以使用以下Groovy脚本来实现你的要求:
```groovy
@Grab('com.googlecode.java-diff-utils:diffutils:1.3.0')
import difflib.DiffUtils
import difflib.Patch
import groovy.xml.MarkupBuilder
def compareFolders(String folder1Path, String folder2Path, String outputFilePath) {
def folder1 = new File(folder1Path)
def folder2 = new File(folder2Path)
def output = new File(outputFilePath)
def htmlBuilder = new MarkupBuilder(output.newWriter())
htmlBuilder.html {
body {
table {
tr {
th("File Name")
th("Diff Lines")
th("Diff Content")
}
folder1.eachFileMatch(~/.*$/) { file1 ->
def file2 = new File(folder2, file1.name)
if (file2.exists()) {
def patch = DiffUtils.diff(file1.readLines(), file2.readLines())
if (patch.deltas.size() > 0) {
tr {
td(file1.name)
td(patch.deltas.size().toString())
td {
ul {
patch.deltas.each { delta ->
li {
span(style: 'background-color: yellow;') {
delta.source.lines.subList(delta.source.position, delta.source.last()).join('\n')
}
}
}
}
}
}
}
} else {
tr {
td(file1.name)
td(colspan: 2, style: 'background-color: yellow;') {
"Only exists in folder 1"
}
}
}
}
folder2.eachFileMatch(~/.*$/) { file2 ->
def file1 = new File(folder1, file2.name)
if (!file1.exists()) {
tr {
td(file2.name)
td(colspan: 2, style: 'background-color: yellow;') {
"Only exists in folder 2"
}
}
}
}
}
}
}
}
// Example usage
compareFolders('path/to/folder1', 'path/to/folder2', 'path/to/output.html')
```
你可以将上述代码保存为一个Groovy脚本文件,并在`compareFolders`方法中传入两个文件夹的路径以及输出的HTML文件路径。脚本将会遍历两个文件夹中的同名文件,并使用`java-diff-utils`库来比较它们的差异。根据比较结果,生成一个HTML表格并将结果写入到指定的输出文件中。
请确保你已经在项目中包含了`java-diff-utils`库的依赖。你可以使用`@Grab`注解来自动下载该库,或者手动将其添加到你的构建工具(如Gradle或Maven)的依赖项中。
阅读全文