Katalon写一个Groovy脚本,java8利用java-diff-util实现两个文件夹对比,并将比较结果出力为HTML文件。要求:当文件在两个文件夹中都存在时,能识别隔行数据,将两个文件的差异数据都出力到HTML中看,将差异数据以逗号隔开,并且将有差异的自断高亮显示出来;当文件只在一个文件夹中存在的文件,将结果出力到HTML中
时间: 2024-03-02 12:47:48 浏览: 180
好的,以下是一个使用java-diff-utils实现两个文件夹对比的Groovy脚本,将差异结果输出到HTML文件中:
```groovy
@Grab(group='com.googlecode.java-diff-utils', module='diffutils', version='1.3.0')
import difflib.*
import java.nio.file.*
import java.nio.charset.*
import groovy.json.*
import groovy.xml.*
def compareFolders(String folder1, String folder2, String outputHtml) {
// 获取两个文件夹中的所有文件
def folder1Files = new File(folder1).listFiles()
def folder2Files = new File(folder2).listFiles()
// 定义差异结果数组
def diffs = []
// 遍历folder1中的文件
folder1Files.each { file1 ->
// 获取folder2中对应的文件
def file2 = new File(folder2, file1.name)
if (file2.exists()) {
// 如果文件在两个文件夹中都存在,执行比较
def diff = compareFiles(file1, file2)
if (diff) {
// 如果有差异,将差异结果加入数组中
diffs << [name: file1.getName(), diff: diff]
}
} else {
// 如果文件只在folder1中存在,将结果输出到HTML中
diffs << [name: file1.getName(), diff: [onlyInFolder1: true]]
}
}
// 遍历folder2中的文件,找到只在folder2中存在的文件
folder2Files.each { file2 ->
def file1 = new File(folder1, file2.name)
if (!file1.exists()) {
// 如果文件只在folder2中存在,将结果输出到HTML中
diffs << [name: file2.getName(), diff: [onlyInFolder2: true]]
}
}
// 将差异结果输出到HTML文件中
outputDiffs(diffs, outputHtml)
}
def compareFiles(File file1, File file2) {
// 读取文件内容
def content1 = file1.text
def content2 = file2.text
// 使用java-diff-utils比较文件内容
def patch = DiffUtils.diff(content1.tokenize("\n"), content2.tokenize("\n"))
if (patch.getDeltas().size() > 0) {
// 如果有差异,将差异结果输出为字符串
def diffText = patch.getDeltas().collect { delta ->
def text = delta.getOriginal().join(",")
"<span style='background-color: #ffcccc;'>${text}</span>"
}.join(",")
return diffText
} else {
// 如果没有差异,返回null
return null
}
}
def outputDiffs(List diffs, String outputHtml) {
// 将差异结果转换为HTML
def html = new StringWriter().with { writer ->
def builder = new MarkupBuilder(writer)
builder.html {
head {
title "Folder Comparison"
}
body {
table {
thead {
tr {
th "Filename"
th "Diff"
}
}
tbody {
diffs.each { diff ->
tr {
td diff.name
td {
if (diff.diff.onlyInFolder1) {
"Only in Folder 1"
} else if (diff.diff.onlyInFolder2) {
"Only in Folder 2"
} else {
"${diff.diff}"
}
}
}
}
}
}
}
}
writer.toString()
}
// 将HTML输出到文件中
new File(outputHtml).write(html)
}
// 调用函数进行对比
compareFolders("folder1", "folder2", "diff.html")
```
请注意,这个脚本是使用Groovy编写的,但是它可以轻松地转换为Java,并且可以在Katalon Studio中使用。如果您使用Katalon Studio,可以将此脚本保存为“Script Mode”中的Groovy脚本,并使用以下代码段来调用:
```groovy
import com.kms.katalon.core.util.KeywordUtil
KeywordUtil.logInfo("Comparing folders...")
compareFolders("folder1", "folder2", "diff.html")
KeywordUtil.logInfo("Comparison complete.")
```
阅读全文