Karate 是一个将 API 测试自动化、模拟、性能测试甚至 UI 自动化结合到一个统一框架中的开源工具. 它的测试报告默认是html格式, 如果你想要以下格式的测试报告, 则需要集成cucumber-reporting.
假设你有一个springBoot项目, 用的是Junit5, 单纯的再集成karate和cucumber-reporting, 需要引的包如下: (当然你的项目会引spring-boot-starter-test,注意Junit的版本冲突...我用的是2.7.12)
1 pom
<!-- cucumber-reporting -->
<dependency>
<groupId>net.masterthought</groupId>
<artifactId>cucumber-reporting</artifactId>
<version>5.7.6</version>
</dependency>
<!-- karate -->
<dependency>
<groupId>com.intuit.karate</groupId>
<artifactId>karate-core</artifactId>
<version>1.3.0</version>
<classifier>all</classifier>
<scope>test</scope>
</dependency>
<dependency>
<groupId>com.intuit.karate</groupId>
<artifactId>karate-junit5</artifactId>
<version>1.3.0</version>
<scope>test</scope>
</dependency>
2 karate demo
你需要参考karate官方文档 -> 快速上手, 依葫芦画瓢写一个karate demo(本人懒得贴代码) https://gitee.com/bitlin/karate?skip_mobile=true#quickstart
demo运行成功会有HTML的测试报告生成, 浏览器可以查看,但是这不是我们想要的效果.
3 指定karate生成JSON格式的测试报告
cucumber-reporting只提供了解析JSON格式文件并重新生成美化后的HTML的方法,所以要karate生成一个JSON格式的测试报告.
只需要在KarateSampleTest的测试方法设置outputCucumberJson属性为true, 如下:
@Karate.Test
Karate testTags() {
return Karate.run("tags").relativeTo(getClass()).outputCucumberJson(true);
}
执行karate测试, 成功就能找到对应的JSON格式测试报告文件:
4 实现美化报告的代码
此时就需要写代码美化karate的测试报告了, 读JSON文件并使用cucumber-reporting重新生成报告
import net.masterthought.cucumber.Configuration;
import net.masterthought.cucumber.ReportBuilder;
import net.masterthought.cucumber.Reportable;
import java.io.File;
import java.util.ArrayList;
import java.util.List;
public class PrettyKarateReport {
public void generateCucumberReport() {
File reportOutputDirectory = new File("target");
List<String> jsonFiles = new ArrayList<>();
//karate测试结果Json文件的位置
jsonFiles.add("target/karate-reports/com.my.integration.karate.tags.json");
jsonFiles.add("target/karate-reports/com.my.integration.karate.sample.json");
String buildNumber = "1";
String projectName = "my-integration-test";
Configuration configuration = new Configuration(reportOutputDirectory, projectName);
// optional configuration
configuration.setBuildNumber(buildNumber);
// optionally add metadata on main page
configuration.addClassifications("Platform", "Windows");
configuration.addClassifications("Component", "karate API Test");
configuration.addClassifications("Version", "1.0.0");
ReportBuilder reportBuilder = new ReportBuilder(jsonFiles, configuration);
Reportable reportable = reportBuilder.generateReports();
}
}
5 @AfterAll
最后就是让美化报告代码在执行完所有测试案例后跑起来啦...
import com.intuit.karate.junit5.Karate;
import org.junit.jupiter.api.AfterAll;
import org.springframework.boot.test.context.SpringBootTest;
@SpringBootTest(
webEnvironment = SpringBootTest.WebEnvironment.DEFINED_PORT)
public class KarateSampleTest {
@Karate.Test
Karate testSample() {
return Karate.run(new String[]{"sample"}).relativeTo(getClass()).outputCucumberJson(true);
}
@Karate.Test
Karate testTags() {
return Karate.run("tags").relativeTo(getClass()).outputCucumberJson(true);
}
/**
* 在跑所有测试案例之后, 调用PrettyKarateReport美化测试结果报告
* 注意这里是: org.junit.jupiter.api.AfterAll
*/
@AfterAll
public static void generateReport(){
PrettyKarateReport prettyKarateReport = new PrettyKarateReport();
prettyKarateReport.generateCucumberReport();
}
}
执行成功效果如下, overview-features.html就是文章开头那样的报告啦