katalon写一个Groovy脚本,利用java-diff-util库实现两个文件夹的自动比较,并利用ReportGenerator类将比较结果生成HTML。当文件在两个文件夹中都存在,但内容不一致,则将差异数据的行数及内容输出,将字段之间以逗号隔开,再将差异字段以高亮显示;当文件只在一个文件夹中存在,将信息输出到html中。要求能识别隔行数据,按文件名生成结果html,html里显示两个文件夹的差异内容
时间: 2024-02-28 19:57:31 浏览: 157
folder-diff:比较两个文件夹的工具
下面是一个简单的Groovy脚本,用于比较两个文件夹中的文件并生成HTML报告。该脚本使用了Java-Diff-Utils库来计算文件差异,并使用ReportGenerator类来生成HTML报告。
```groovy
import difflib.*
import java.nio.file.*
import java.util.stream.*
// 定义比较结果输出路径和文件名
def outputPath = 'results/'
def fileName = 'comparison_report.html'
// 定义要比较的两个文件夹
def folder1 = Paths.get('D:/FileComp/folder1')
def folder2 = Paths.get('D:/FileComp/folder2')
// 定义报告生成器
def reportGenerator = new ReportGenerator()
// 获取文件夹中的文件列表
def files1 = folder1.toFile().listFiles()
def files2 = folder2.toFile().listFiles()
// 定义结果集
def results = []
// 比较两个文件夹中的文件
for (def file1 : files1) {
def file2 = new File(folder2.toFile(), file1.getName())
if (file2.exists()) {
// 如果文件在两个文件夹中都存在,比较文件差异并输出结果
def lines1 = Files.readAllLines(file1.toPath())
def lines2 = Files.readAllLines(file2.toPath())
def patch = DiffUtils.diff(lines1, lines2)
def deltas = patch.getDeltas()
if (!deltas.isEmpty()) {
def deltaLines = []
for (def delta : deltas) {
def lines = delta.getRevised().getLines()
deltaLines.add((delta.getRevised().getPosition() + 1) + ',' + lines.join(',').replaceAll(/(?<=,|^)[\r\n]+|[\r\n]+(?=,|$)/, ' ').replaceAll(/"/, '\\\\"'))
}
results.add([file1.getName(), deltaLines.join(';')])
}
} else {
// 如果文件只在一个文件夹中存在,输出信息
results.add([file1.getName(), file1.getAbsolutePath() + ' only exists in ' + folder1.toString()])
}
}
// 输出文件夹2中的新增文件信息
for (def file2 : files2) {
def file1 = new File(folder1.toFile(), file2.getName())
if (!file1.exists()) {
results.add([file2.getName(), file2.getAbsolutePath() + ' only exists in ' + folder2.toString()])
}
}
// 生成HTML报告
reportGenerator.generateHtmlReport(outputPath + fileName, results)
// 定义报告生成器类
class ReportGenerator {
def generateHtmlReport(String filePath, List<List<String>> results) {
def html = '''
<html>
<head>
<title>Comparison Report</title>
<style>
table {
font-family: arial, sans-serif;
border-collapse: collapse;
width: 100%;
}
td, th {
border: 1px solid #dddddd;
text-align: left;
padding: 8px;
}
tr:nth-child(even) {
background-color: #dddddd;
}
.highlight {
background-color: yellow;
}
</style>
</head>
<body>
<h2>Comparison Report</h2>
<table>
<tr>
<th>File Name</th>
<th>Diff Lines</th>
</tr>
'''
for (def result : results) {
html += '<tr><td>' + result[0] + '</td><td>'
if (result[1].contains('only exists in')) {
html += result[1]
} else {
html += '<table>'
html += '<tr><th>Line Number</th><th>Diff Content</th></tr>'
for (def delta : result[1].split(';')) {
def lineInfo = delta.split(',')
def lineNumber = lineInfo[0]
def content = lineInfo[1]
if (content.contains(',')) {
content = content.split(',').collect { it.contains('"') ? "<span class='highlight'>$it</span>" : it }.join(',')
}
html += '<tr><td>' + lineNumber + '</td><td>' + content + '</td></tr>'
}
html += '</table>'
}
html += '</td></tr>'
}
html += '''
</table>
</body>
</html>
'''
new File(filePath).write(html)
}
}
```
需要注意的是,该脚本使用了Java 8的stream函数进行文件列表的操作。如果你的Katalon Studio版本不支持Java 8,请改用传统的循环方式。此外,需要将Java-Diff-Utils库添加到你的Katalon Studio项目中。
阅读全文