Katalon写一个Groovy脚本,java8利用java-diff-util实现两个文件夹对比,并将比较结果以各文件名出力为HTML文件。要求:当文件在两个文件夹中都存在时,能识别隔行数据,将两个文件有差异的数据都出力到HTML中,解析两个文件的差异数据并将有差异的字段高亮显示出来;当文件只在一个文件夹中存在的文件,将结果出力到HTML中
时间: 2024-03-02 16:49:42 浏览: 165
folder-diff:比较两个文件夹的工具
以下是一个使用Katalon和java-diff-utils的Groovy脚本,实现对比两个文件夹并生成HTML文件,其中高亮显示有差异的字段:
```
import java.nio.file.Files
import java.nio.file.Paths
import java.util.zip.ZipInputStream
import org.apache.commons.io.IOUtils
import difflib.DiffUtils
import difflib.Patch
import com.kms.katalon.core.configuration.RunConfiguration
import com.kms.katalon.core.logging.KeywordLogger
def logger = new KeywordLogger()
// 获取文件夹路径
def folderPath1 = RunConfiguration.getProjectDir().toString() + '/Folder1'
def folderPath2 = RunConfiguration.getProjectDir().toString() + '/Folder2'
// 获取文件夹中的文件列表
def fileList1 = Files.walk(Paths.get(folderPath1)).filter({Files.isRegularFile(it)}).map({it.toString()}).toList()
def fileList2 = Files.walk(Paths.get(folderPath2)).filter({Files.isRegularFile(it)}).map({it.toString()}).toList()
// 找出只在一个文件夹中存在的文件
def uniqueFiles = fileList1.plus(fileList2).groupBy({it}).findAll({it.value.size == 1}).keySet().toList()
// 找出两个文件夹中都存在的文件
def commonFiles = fileList1.intersect(fileList2)
// 生成HTML表格
def generateHtmlTable(List<String> files, String folderPath1, String folderPath2) {
def table = "<table border='1'>\n<tr><th>File Name</th><th>File Compare Result</th></tr>\n"
files.each { fileName ->
def filePath1 = folderPath1 + "/" + fileName
def filePath2 = folderPath2 + "/" + fileName
def file1 = new File(filePath1)
def file2 = new File(filePath2)
if (file1.exists() && file2.exists()) {
def content1 = IOUtils.toString(new FileInputStream(file1), "UTF-8")
def content2 = IOUtils.toString(new FileInputStream(file2), "UTF-8")
def patch = DiffUtils.diff(content1.tokenize('\n'), content2.tokenize('\n'))
def diff = patch.getDeltas().collect({delta ->
delta.getOriginal().getLines().collect({ "<strike>${it}</strike>"}) +
delta.getRevised().getLines().collect({ "<span style='background-color:yellow;'>${it}</span>"})
}).flatten().join("\n")
table += "<tr><td>${fileName}</td><td>${diff}</td></tr>\n"
} else {
def filePath = file1.exists() ? filePath1 : filePath2
table += "<tr><td>${fileName}</td><td>${filePath} only exists in one folder.</td></tr>\n"
}
}
table += "</table>"
return table
}
// 生成HTML文件
def generateHtmlFile(String htmlContent, String fileName) {
def file = new File(RunConfiguration.getProjectDir().toString() + "/${fileName}.html")
file.write("<html>\n<body>\n${htmlContent}</body>\n</html>")
}
// 生成只在一个文件夹中存在的文件的HTML表格
def uniqueTable = generateHtmlTable(uniqueFiles, folderPath1, folderPath2)
generateHtmlFile(uniqueTable, "unique")
// 生成两个文件夹中都存在的文件的HTML表格
def commonTable = generateHtmlTable(commonFiles, folderPath1, folderPath2)
generateHtmlFile(commonTable, "common")
```
请将上述脚本保存为一个Groovy文件,例如"CompareFolders.groovy",并将其添加到Katalon项目中。然后在Test Case中使用以下代码调用该脚本:
```
import com.kms.katalon.core.configuration.RunConfiguration
import com.kms.katalon.core.testcase.TestCase
import com.kms.katalon.core.testdata.TestData
import com.kms.katalon.core.testdata.TestDataFactory
import com.kms.katalon.core.testdata.TestDataInfo
import com.kms.katalon.core.testdata.TestDataProperty
// 获取Groovy脚本文件路径
def scriptPath = RunConfiguration.getProjectDir().toString() + "/Scripts/CompareFolders.groovy"
// 调用Groovy脚本
def script = new GroovyShell().parse(new File(scriptPath))
script.run()
```
执行该Test Case后,将会在Katalon项目目录下生成两个HTML文件,分别为只在一个文件夹中存在的文件和两个文件夹中都存在的文件的比较结果。
阅读全文