Katalon写一个Groovy脚本,java8利用java-diff-util实现两个文件夹对比,并将比较结果以文件为单位出力成各自的HTML文件。要求:当文件在两个文件夹中都存在时,能识别隔行数据,将两个文件有差异的数据都出力到HTML中,解析两个文件的差异数据并将有差异的字段高亮显示出来;当文件只在一个文件夹中存在的文件,将这个信息出力到HTML中
时间: 2024-03-02 16:52:55 浏览: 135
可以参考以下Groovy脚本,使用了java-diff-utils库进行文件夹比较,并使用Thymeleaf模板引擎生成HTML文件。
```groovy
@Grab(group='com.googlecode.java-diff-utils', module='diffutils', version='1.3.0')
@Grab(group='org.thymeleaf', module='thymeleaf', version='3.0.11.RELEASE')
@Grab(group='org.thymeleaf', module='thymeleaf-spring5', version='3.0.11.RELEASE')
import difflib.*
import java.nio.file.*
import org.thymeleaf.TemplateEngine
import org.thymeleaf.context.Context
import org.thymeleaf.templateresolver.FileTemplateResolver
// 定义文件夹路径
def folder1 = Paths.get("path/to/folder1")
def folder2 = Paths.get("path/to/folder2")
// 定义生成HTML文件的目录
def outputDir = Paths.get("path/to/output")
// 定义模板引擎和模板文件路径
def templateResolver = new FileTemplateResolver()
templateResolver.setPrefix("path/to/templates")
templateResolver.setSuffix(".html")
def templateEngine = new TemplateEngine()
templateEngine.setTemplateResolver(templateResolver)
// 遍历文件夹1中的所有文件
Files.walk(folder1).forEach { path1 ->
def path2 = folder2.resolve(folder1.relativize(path1))
if (Files.exists(path2)) {
// 如果文件在文件夹2中也存在,则进行比较
def lines1 = Files.readAllLines(path1)
def lines2 = Files.readAllLines(path2)
def patch = DiffUtils.diff(lines1, lines2)
if (!patch.getDeltas().isEmpty()) {
// 如果文件有差异,则生成HTML文件
def context = new Context()
context.setVariable("path", path1)
context.setVariable("diff", patch)
def html = templateEngine.process("diff", context)
def outputFilePath = outputDir.resolve(folder1.relativize(path1)).toString()
Files.createDirectories(Paths.get(outputFilePath).getParent())
Files.write(Paths.get(outputFilePath), html.getBytes())
}
} else {
// 如果文件只在文件夹1中存在,则生成HTML文件
def context = new Context()
context.setVariable("path", path1)
context.setVariable("isOnlyInFolder1", true)
def html = templateEngine.process("diff", context)
def outputFilePath = outputDir.resolve(folder1.relativize(path1)).toString()
Files.createDirectories(Paths.get(outputFilePath).getParent())
Files.write(Paths.get(outputFilePath), html.getBytes())
}
}
```
上述脚本中使用了Thymeleaf模板引擎生成HTML文件,需要在`path/to/templates`目录下创建`diff.html`模板文件,模板文件中可以使用Thymeleaf的模板语法,例如:
```html
<!DOCTYPE html>
<html xmlns:th="http://www.thymeleaf.org">
<head>
<meta charset="UTF-8">
<title>Diff: [[${path.getFileName()}]]</title>
</head>
<body>
<h1>Diff: [[${path.getFileName()}]]</h1>
<div th:if="${isOnlyInFolder1}">
This file only exists in folder 1.
</div>
<div th:unless="${isOnlyInFolder1}">
<table>
<tr>
<th>Line</th>
<th>Text</th>
</tr>
<tr th:each="delta : ${diff.getDeltas()}">
<td th:text="${delta.getSource().getPosition() + 1}"></td>
<td>
<div th:each="line : ${delta.getSource().getLines()}"
th:classappend="${delta.getType().name()}"
th:text="${line}"></div>
</td>
</tr>
</table>
</div>
</body>
</html>
```
模板文件中使用了Thymeleaf的条件判断和循环语句,根据文件是否只在一个文件夹中存在和文件的差异情况生成不同的HTML内容。具体的模板语法不在此赘述,可以参考Thymeleaf的官方文档。
阅读全文