如何配置Karate执行时覆盖旧karate-reports文件夹而非每次生成新报告目录
Karate测试自动覆盖旧报告配置方法
默认情况下Karate检测到指定报告目录已存在时,会自动生成带递增序号后缀的新目录避免覆盖历史报告,因此才会出现karate-reports、karate-reports_1、karate-reports_2这类目录不断累积的情况。可通过以下配置实现每次执行自动清理旧报告,始终只保留最新一份:
1. TestRunner类执行场景配置
在测试执行逻辑中显式指定固定报告路径,同时在运行前主动删除旧报告目录即可,示例代码:
import com.intuit.karate.Results; import com.intuit.karate.Runner; import org.apache.commons.io.FileUtils; import org.junit.jupiter.api.Test; import java.io.File; import static org.junit.jupiter.api.Assertions.assertEquals; public class KarateTestRunner { @Test void runAllFeatures() { // 执行前删除所有旧的karate报告目录 File targetDir = new File("target"); File[] oldReports = targetDir.listFiles((dir, name) -> name.startsWith("karate-reports")); if (oldReports != null) { for (File report : oldReports) { FileUtils.deleteQuietly(report); } } // 显式指定固定报告输出路径 Results results = Runner.path("classpath:features") .reportDir("target/karate-reports") .outputCucumberJson(true) .outputHtmlReport(true) .parallel(4); assertEquals(0, results.getFailCount(), results.getErrorMessages()); } }
如果项目没有引入commons-io依赖,也可以自己实现递归删除文件目录的逻辑,不需要额外引包。
2. 直接运行单个Feature文件场景配置
如果是在IDE中直接右键运行单个feature文件,通过两步配置实现自动清理:
- 在项目
src/test/resources目录下新增karate.properties文件,指定固定报告路径,避免默认路径的序号生成逻辑:
karate.reportDir=target/karate-reports
- 配置IDE运行的前置操作,以IDEA为例:
- 打开Run/Debug Configurations面板,找到Karate feature对应的运行配置模板
- 在Before launch栏点击+号,选择Run External Tool
- Windows环境配置:Command填
cmd,Arguments填/c rd /s /q target\karate-reports*,Working directory选择项目根目录 - Mac/Linux环境配置:Command填
rm,Arguments填-rf target/karate-reports*,Working directory选择项目根目录
配置完成后每次直接运行feature文件,都会先自动清理所有旧的karate报告目录,再生成新的报告到固定路径。
3. 构建工具执行场景配置
如果通过Maven/Gradle执行测试,直接配置构建插件在测试阶段前自动清理报告目录即可,以Maven为例,在pom.xml中添加clean插件配置:
<plugin> <groupId>org.apache.maven.plugins</groupId> <artifactId>maven-clean-plugin</artifactId> <version>3.3.2</version> <executions> <execution> <id>clean-karate-reports-before-test</id> <phase>pre-integration-test</phase> <goals> <goal>clean</goal> </goals> <configuration> <filesets> <fileset> <directory>target</directory> <includes> <include>karate-reports*</include> </includes> </fileset> </filesets> </configuration> </execution> </executions> </plugin>
注意:必须显式配置
reportDir为固定路径,不要使用Karate默认的报告路径规则,否则即使提前删除旧目录,后续如果出现路径冲突,Karate还是会自动生成带序号的新目录。
内容的提问来源于stack exchange,提问作者Sushma Indrani
相关产品推荐
相关产品推荐

