katalon写一个Groovy脚本,利用java-diff-util库来实现两个文件夹的自动比较,并利用ReportGenerator类将比较结果生成HTML。当文件在两个文件夹中都存在,但内容不一致,则将差异数据的行数及内容出力到html中,将具体哪个字段有差异高亮显示出来;当文件只在一个文件夹中存在,将信息输出到html中。要求能识别隔行数据,按文件名生成结果html,html里显示两个文件夹的差异内容
时间: 2024-02-28 12:57:13 浏览: 43
好的,以下是您需要的Groovy脚本代码:
```groovy
@Grab(group='com.googlecode.java-diff-utils', module='diffutils', version='1.3.0')
import difflib.*
import java.nio.file.*
import com.kms.katalon.core.configuration.RunConfiguration
import com.kms.katalon.core.util.KeywordUtil
class FileDiffGenerator {
static final String REPORT_DIR = RunConfiguration.getProjectDir() + "/Reports/File
相关问题
katalon写一个Groovy脚本,利用java-diff-util库来实现两个文件夹的自动比较,并利用ReportGenerator将比较结果生成HTML。当文件在两个文件夹中都存在,但内容不一致,则将差异数据的行数及内容出力到html中,将具体哪个字段有差异高亮显示出来;当文件只在一个文件夹中存在,将信息输出到html中。要求能识别隔行数据,按文件名生成结果html,html里显示两个文件夹的差异内容
好的,以下是一个示例的Groovy脚本,实现了你的要求。请注意,需要在Katalon Studio中安装并引入java-diff-utils和ReportGenerator库。
```
import difflib.*
import com.kms.katalon.core.reporting.ReportUtil
import com.kms.katalon.core.util.KeywordUtil
// 定义对比文件夹的路径
def folder1 = new File("path/to/folder1")
def folder2 = new File("path/to/folder2")
// 定义ReportGenerator生成HTML报告的路径
def reportPath = "path/to/report.html"
// 定义保存比较结果的列表
def diffList = []
// 定义一个函数,用于比较两个文件并保存比较结果到diffList中
def compareFiles(file1, file2) {
def lines1 = file1.readLines()
def lines2 = file2.readLines()
def patch = DiffUtils.diff(lines1, lines2)
if (!patch.getDeltas().isEmpty()) {
def diffText = ""
patch.getDeltas().each { delta ->
def lines = delta.getRevised().getLines()
def lineNum = delta.getRevised().getPosition() + 1
lines.each { line ->
diffText += "Line ${lineNum}: ${line}\n"
lineNum++
}
}
diffList.add([file1.getName(), file2.getName(), diffText])
}
}
// 遍历文件夹1中的所有文件,并与文件夹2中同名文件比较
folder1.eachFile { file1 ->
def file2 = new File(folder2, file1.getName())
if (file2.exists()) {
compareFiles(file1, file2)
} else {
diffList.add([file1.getName(), "", "Only in folder1"])
}
}
// 遍历文件夹2中的所有文件,并查找文件夹1中不存在的文件
folder2.eachFile { file2 ->
def file1 = new File(folder1, file2.getName())
if (!file1.exists()) {
diffList.add(["", file2.getName(), "Only in folder2"])
}
}
// 生成HTML报告
def reportBuilder = new StringBuilder()
reportBuilder.append("<html><body>")
diffList.each { diff ->
reportBuilder.append("<h2>File: ${diff[0]} / ${diff[1]}</h2>")
if (diff[2].startsWith("Only")) {
reportBuilder.append("<p>${diff[2]}</p>")
} else {
reportBuilder.append("<pre>${diff[2]}</pre>")
}
}
reportBuilder.append("</body></html>")
ReportUtil.generateReport(reportBuilder.toString(), reportPath)
// 打印日志,告知报告生成的路径
KeywordUtil.logInfo("HTML report generated at: ${reportPath}")
```
在以上脚本中,我们首先定义了要比较的两个文件夹的路径,以及生成报告的路径。然后,我们定义了一个函数`compareFiles`,用于比较两个文件。该函数使用了java-diff-utils库中的`DiffUtils.diff()`函数来比较文件内容,并将差异数据保存到一个字符串中。最后,我们遍历文件夹中的所有文件,调用`compareFiles`函数比较同名文件,并将比较结果保存到`diffList`列表中。如果一个文件只在一个文件夹中存在,则直接将信息输出到`diffList`中。最后,我们使用ReportGenerator库来生成HTML报告,并将报告保存到指定路径中。
由于你没有提供具体的文件格式,以上脚本只能比较文本文件。如果你需要比较其他类型的文件,需要使用其他的库或工具来实现。
katalon写一个Groovy脚本,利用java-diff-util库实现两个文件夹的自动比较,并利用ReportGenerator类将比较结果生成HTML。当文件在两个文件夹中都存在,但内容不一致,则将差异数据的行数及内容输出,将字段之间以逗号隔开,再将差异字段以高亮显示;当文件只在一个文件夹中存在,将信息输出到html中。要求能识别隔行数据,按文件名生成结果html,html里显示两个文件夹的差异内容
下面是一个简单的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项目中。