katalon写一个Groovy脚本,利用java-diff-util库来实现两个文件夹的自动比较,并利用ReportGenerator将比较结果生成HTML。当文件在两个文件夹中都存在,但内容不一致,则将差异数据的行数及内容出力到html中,将具体哪个字段有差异高亮显示出来;当文件只在一个文件夹中存在,将信息输出到html中。要求能识别隔行数据,按文件名生成结果html,html里显示两个文件夹的差异内容
时间: 2024-02-28 08:56:42 浏览: 58
首先,需要在Katalon中导入java-diff-utils库。可以在Katalon项目中的External Libraries中右键选择Add External JARs,然后选择下载好的java-diff-utils.jar文件。
接下来,需要编写Groovy脚本来实现文件夹的自动比较。以下是一个简单的示例脚本:
```groovy
import difflib.DiffUtils
import difflib.Patch
import com.kms.katalon.core.util.KeywordUtil
import java.nio.file.*
// 定义两个文件夹的路径
def folder1 = "path/to/folder1"
def folder2 = "path/to/folder2"
// 获取两个文件夹下的文件列表
def fileList1 = Files.list(Paths.get(folder1)).map{it.getFileName().toString()}.collect()
def fileList2 = Files.list(Paths.get(folder2)).map{it.getFileName().toString()}.collect()
// 获取两个文件夹的交集和差集
def intersection = fileList1.intersect(fileList2)
def difference = fileList1.minus(intersection) + fileList2.minus(intersection)
// 对交集中的文件进行比较,并生成HTML报告
intersection.each { filename ->
def file1 = new File(folder1, filename)
def file2 = new File(folder2, filename)
if (file1.isFile() && file2.isFile()) {
def content1 = file1.readLines()
def content2 = file2.readLines()
if (!content1.equals(content2)) {
def patch = DiffUtils.diff(content1, content2)
def diffHtml = generateDiffHtml(patch)
KeywordUtil.markFailed("File $filename has differences:\n$diffHtml")
}
}
}
// 输出差集中的文件信息
difference.each { filename ->
def file1 = new File(folder1, filename)
def file2 = new File(folder2, filename)
if (file1.isFile()) {
KeywordUtil.markFailed("File $filename exists only in folder1")
} else {
KeywordUtil.markFailed("File $filename exists only in folder2")
}
}
// 生成HTML报告
def generateDiffHtml(patch) {
def diffHtml = ""
patch.getDeltas().each { delta ->
def startPos1 = delta.getOriginal().getPosition()
def endPos1 = startPos1 + delta.getOriginal().size() - 1
def startPos2 = delta.getRevised().getPosition()
def endPos2 = startPos2 + delta.getRevised().size() - 1
diffHtml += "<p>Lines $startPos1 to $endPos1 in file1 differ from lines $startPos2 to $endPos2 in file2:</p>"
diffHtml += "<pre>"
delta.getOriginal().getLines().eachWithIndex { line, index ->
def prefix = delta.getOriginal().getChangeType() == Delta.TYPE.DELETE ? "-" : " "
def suffix = delta.getRevised().getChangeType() == Delta.TYPE.INSERT ? "+" : " "
if (prefix == "-" || suffix == "+") {
diffHtml += "<span style='background-color: yellow;'>$prefix$line</span>\n"
} else {
diffHtml += "$prefix$line\n"
}
}
diffHtml += "</pre>"
}
return diffHtml
}
```
以上代码将会读取两个文件夹的路径,然后获取两个文件夹下的文件列表。将其分为交集和差集两部分。对于交集中的文件,将其内容进行比较,如果存在差异,就将差异数据的行数及内容输出到HTML中,并将具体哪个字段有差异高亮显示出来。对于差集中的文件,将信息输出到HTML中。
需要注意的是,以上代码仅作为示例,可能需要根据具体情况进行修改和优化。同时,由于本人无法获取实际的文件夹及其内容,以上代码未经过测试,请谨慎使用。
阅读全文