Katalon8.6.0中写一个Groovy脚本实现:利用java-diff-utils,实现自动化比较两个文件夹下的同名文件:如果文件只在一个文件夹中存在,将信息输出到result文件中;如果两个文件夹都存在,则将两个文件的比较结果和所有差异数据的行数及内容输出到result文件中。要求减少嵌套循环,且每次执行都重新生成result文件
时间: 2024-02-22 08:55:34 浏览: 70
好的,以下是一个修改后的 Groovy 脚本实现,满足您的要求。请确保在运行脚本之前将 `java-diff-utils` 库添加到 Katalon 项目的构建路径中。
```groovy
import difflib.*
import java.nio.file.*
// 定义要比较的两个文件夹路径
def dir1Path = Paths.get("path/to/directory1")
def dir2Path = Paths.get("path/to/directory2")
// 定义结果文件路径
def resultPath = Paths.get("path/to/result/file.txt")
// 定义结果列表
def results = []
// 获取两个文件夹中的所有同名文件
def files = []
Files.list(dir1Path).forEach { file ->
def sibling = dir2Path.resolve(file.fileName)
if (Files.exists(sibling)) {
files << [file, sibling]
} else {
results << "File ${file.fileName} only exists in ${dir1Path}"
results << ""
}
}
Files.list(dir2Path).forEach { file ->
def sibling = dir1Path.resolve(file.fileName)
if (!Files.exists(sibling)) {
results << "File ${file.fileName} only exists in ${dir2Path}"
results << ""
files << [null, file]
}
}
// 对每个同名文件进行比较
files.each { pair ->
def file1 = pair[0]
def file2 = pair[1]
def fileName = file1 ? file1.fileName.toString() : file2.fileName.toString()
def file1Lines = file1 ? Files.readAllLines(file1) : []
def file2Lines = file2 ? Files.readAllLines(file2) : []
if (!file1) {
// 文件只存在于 dir2Path 中
results << "File $fileName only exists in ${dir2Path.toString()}"
results << ""
} else if (!file2) {
// 文件只存在于 dir1Path 中
results << "File $fileName only exists in ${dir1Path.toString()}"
results << ""
} else {
// 文件存在于两个文件夹中
def patch = DiffUtils.diff(file1Lines, file2Lines)
if (patch.getDeltas().size() > 0) {
// 文件存在差异,输出比较结果和差异数据
results << "Differences found in file $fileName:"
results << ""
patch.getDeltas().each { delta ->
def lines = delta.getRevised().getLines()
def startLine = delta.getRevised().getPosition() + 1
def endLine = startLine + lines.size() - 1
results << "Line $startLine ~ $endLine:"
lines.each { line ->
if (delta.getType() == Delta.TYPE.INSERT) {
results << "+ $line"
} else if (delta.getType() == Delta.TYPE.DELETE) {
results << "- $line"
}
}
results << ""
}
} else {
// 文件无差异
results << "No differences found in file $fileName"
results << ""
}
}
}
// 将结果写入文件
Files.write(resultPath, results, StandardOpenOption.CREATE, StandardOpenOption.TRUNCATE_EXISTING)
```
这段脚本将依次比较两个文件夹中的同名文件,并将比较结果逐行输出到结果文件中。如果某个文件只存在于一个文件夹中,则将相应信息输出到结果文件中。对于存在差异的文件,将输出比较结果和差异数据的行数及内容。请根据实际情况修改文件夹路径和结果文件路径,并在每次执行脚本时重新生成结果文件。
阅读全文