Katalon写一个Groovy脚本,java8利用java-diff-util实现两个文件夹对比,并将比较结果以各文件名出力为HTML文件。要求:当文件在两个文件夹中都存在时,能识别隔行数据,将两个文件有差异的数据都出力到HTML中,解析两个文件的差异数据并将有差异的字段高亮显示出来;当文件只在一个文件夹中存在的文件,将结果出力到HTML中
时间: 2024-03-02 16:48:30 浏览: 21
以下是一个示例Groovy脚本,可以实现对两个文件夹的文件进行比较,并将比较结果以HTML文件的形式输出:
```
import java.nio.file.Files
import java.nio.file.Paths
import difflib.DiffUtils
import difflib.Delta
import difflib.Patch
import groovy.json.JsonOutput
def baseDir = "/path/to/base/directory"
def compareDir = "/path/to/compare/directory"
def outputDir = "/path/to/output/directory"
// 获取两个文件夹中的所有文件路径
def baseFiles = Files.walk(Paths.get(baseDir)).filter{Files.isRegularFile(it)}.collect{it.toString()}
def compareFiles = Files.walk(Paths.get(compareDir)).filter{Files.isRegularFile(it)}.collect{it.toString()}
// 获取只在一个文件夹中存在的文件路径
def onlyInBase = baseFiles.minus(compareFiles)
def onlyInCompare = compareFiles.minus(baseFiles)
// 获取在两个文件夹中都存在的文件路径
def commonFiles = baseFiles.intersect(compareFiles)
// 对于只在一个文件夹中存在的文件,将结果输出到HTML文件中
onlyInBase.each{ filePath ->
def fileName = Paths.get(filePath).getFileName().toString()
def diffResult = [:]
diffResult.put("Message", "File only exists in base directory")
diffResult.put("Path", fileName)
def diffJson = JsonOutput.toJson(diffResult)
Files.write(Paths.get("${outputDir}/${fileName}.html"), diffJson.getBytes())
}
onlyInCompare.each{ filePath ->
def fileName = Paths.get(filePath).getFileName().toString()
def diffResult = [:]
diffResult.put("Message", "File only exists in compare directory")
diffResult.put("Path", fileName)
def diffJson = JsonOutput.toJson(diffResult)
Files.write(Paths.get("${outputDir}/${fileName}.html"), diffJson.getBytes())
}
// 对于在两个文件夹中都存在的文件,进行比较,并将结果输出到HTML文件中
commonFiles.each{ filePath ->
def fileName = Paths.get(filePath).getFileName().toString()
def baseContent = Files.readAllLines(Paths.get("${baseDir}/${fileName}"))
def compareContent = Files.readAllLines(Paths.get("${compareDir}/${fileName}"))
// 使用java-diff-utils进行比较
def patch = DiffUtils.diff(baseContent, compareContent)
def deltas = patch.getDeltas()
if(deltas.size() > 0){
def diffResult = [:]
diffResult.put("Message", "File has differences in both directories")
diffResult.put("Path", fileName)
def diffLines = []
deltas.each{ delta ->
int origPos = delta.getOriginal().getPosition()
int revPos = delta.getRevised().getPosition()
int origEnd = origPos + delta.getOriginal().size()
int revEnd = revPos + delta.getRevised().size()
diffLines.addAll(baseContent.subList(origPos, origEnd))
diffLines.add("------------------------------")
diffLines.addAll(compareContent.subList(revPos, revEnd))
diffLines.add("")
}
diffResult.put("Diff", diffLines.join("\n"))
def diffJson = JsonOutput.toJson(diffResult)
Files.write(Paths.get("${outputDir}/${fileName}.html"), diffJson.getBytes())
}
}
```
此脚本会将比较结果以JSON格式输出,可以通过使用第三方库将JSON转换为HTML,比如使用mustache模板引擎或者Thymeleaf模板引擎。