Katalon8.6.0中写一个Groovy脚本实现:利用java-diff-utils,实现自动化比较两个文件夹下的同名文件:如果文件只在一个文件夹中存在,将信息输出到result文件中;如果两个文件夹都存在,则将两个文件的比较结果和所有差异数据逐行输出到result文件中。要求减少嵌套循环,且每次执行都重新生成result文件
时间: 2024-02-22 13:55:28 浏览: 54
好的,以下是一个参考的 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 files = []
Files.list(dir1Path).forEach { file ->
def sibling = dir2Path.resolve(file.fileName)
if (Files.exists(sibling)) {
files << [file, sibling]
} else {
files << [file, null]
}
}
Files.list(dir2Path).forEach { file ->
def sibling = dir1Path.resolve(file.fileName)
if (!Files.exists(sibling)) {
files << [null, file]
}
}
// 对每个同名文件进行比较
def results = []
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) {
results << "File $fileName only exists in ${dir2Path.toString()}"
} else if (!file2) {
results << "File $fileName only exists in ${dir1Path.toString()}"
} else {
def patch = DiffUtils.diff(file1Lines, file2Lines)
if (patch.getDeltas().size() > 0) {
results << "Differences found in file $fileName:"
patch.getDeltas().each { delta ->
def lines = delta.getRevised().getLines()
lines.each { line ->
if (delta.getType() == Delta.TYPE.INSERT) {
results << "+ $line"
} else if (delta.getType() == Delta.TYPE.DELETE) {
results << "- $line"
}
}
}
} else {
results << "No differences found in file $fileName"
}
}
}
// 将结果写入文件
Files.write(resultPath, results, StandardOpenOption.CREATE, StandardOpenOption.TRUNCATE_EXISTING)
```
这段脚本将依次比较两个文件夹中的同名文件,并将比较结果逐行输出到结果文件中。如果某个文件只存在于一个文件夹中,则将相应信息输出到结果文件中。请根据实际情况修改文件夹路径和结果文件路径,并在每次执行脚本时重新生成结果文件。
阅读全文