API 在 Azure Pipelines 上使用空手道进行测试
API testing with Karate on Azure Pipelines
我已经编写了关于空手道的 API 测试,现在我想 运行 在 Azure Pipelines 上进行测试。
当我 运行 在 Karate 上使用它们时没有错误,但是当我在 Azure 上实现它们时,我总是会返回错误。
我在 Github 上用我的 pom.xml、.feature 和 .java 文件创建了一个存储库,并为我的管道选择了这个存储库,但是每次我 运行 进行测试时我收到错误
这是我的管道。我必须在某处添加 class 或我的功能文件吗?
steps:
- task: Maven@3
inputs:
mavenPomFile: 'pom.xml'
mavenOptions: '-Xmx3072m'
javaHomeOption: 'JDKVersion'
jdkVersionOption: '1.8'
jdkArchitectureOption: 'x64'
publishJUnitResults: true
testResultsFiles: '**/surefire-reports/TEST-*.xml'
goals: 'package'
很想得到一些帮助,因为在这方面没有太多文章可以帮助我
只有一个评论,如果你正在使用空手道 1.X
- 需要通过在
Runner
上调用 outputJunitXml(true)
来启用 JUnit (XML) 报告:https://github.com/intuit/karate/wiki/1.0-upgrade-guide#java-projects
- 并且文件以
karate-reports
结束(而不是 surefire-reports
)并且具有不同的命名约定
这是我的做法:
- task: Maven@3
inputs:
publishJUnitResults: false
javaHomeOption: JDKVersion
jdkVersionOption: default
jdkArchitectureOption: x64
mavenPomFile: pom.xml
mavenVersionOption: Default
mavenAuthenticateFeed: false
effectivePomSkip: false
sonarQubeRunAnalysis: false
goals: "clean test -Dkarate.env=$(environment) -Pintegration-test"
mavenOptions: '-Xmx2048m -Dmaven.repo.local=$(Pipeline.Workspace)/.m2/repository'
displayName: "Run Karate Integration Tests"
- task: PublishTestResults@2
name: PublishKarateTestResults
inputs:
testRunTitle: "Karate Integration Tests"
testResultsFormat: "JUnit"
testResultsFiles: "**/karate-reports/xml/*.xml"
failTaskOnFailedTests: true
mergeTestResults: true
这里重要的是最后一行 mergeTestResults: true
因为我希望将集成测试的结果与 JUnit 测试结果合并。
我的测试是这样定义的:
@Test
public void runAPITests() {
Results results = Runner.path("classpath:features")
.tags("regression")
.reportDir("target/karate-reports/xml")
.outputJunitXml(true)
.tags("~@ignore")
.parallel(2);
Assertions.assertTrue(results.getFeaturesTotal() > 0,
"Did not find any cucumber tests to execute.");
generateReport(results.getReportDir());
Assertions.assertEquals(0, results.getFailCount(),
"Had at least one test failure.");
}
static void generateReport(String karateOutputPath) {
Collection<File> jsonFiles = FileUtils.listFiles(new File(karateOutputPath),
new String[] {"json"}, true);
List<String> jsonPaths =
jsonFiles.stream().map(File::getAbsolutePath)
.collect(Collectors.toList());
Configuration config = new Configuration(new File("target"),
REPORT_TITLE);
ReportBuilder reportBuilder = new ReportBuilder(jsonPaths, config);
reportBuilder.generateReports();
}
我已经编写了关于空手道的 API 测试,现在我想 运行 在 Azure Pipelines 上进行测试。
当我 运行 在 Karate 上使用它们时没有错误,但是当我在 Azure 上实现它们时,我总是会返回错误。 我在 Github 上用我的 pom.xml、.feature 和 .java 文件创建了一个存储库,并为我的管道选择了这个存储库,但是每次我 运行 进行测试时我收到错误
这是我的管道。我必须在某处添加 class 或我的功能文件吗?
steps:
- task: Maven@3
inputs:
mavenPomFile: 'pom.xml'
mavenOptions: '-Xmx3072m'
javaHomeOption: 'JDKVersion'
jdkVersionOption: '1.8'
jdkArchitectureOption: 'x64'
publishJUnitResults: true
testResultsFiles: '**/surefire-reports/TEST-*.xml'
goals: 'package'
很想得到一些帮助,因为在这方面没有太多文章可以帮助我
只有一个评论,如果你正在使用空手道 1.X
- 需要通过在
Runner
上调用outputJunitXml(true)
来启用 JUnit (XML) 报告:https://github.com/intuit/karate/wiki/1.0-upgrade-guide#java-projects - 并且文件以
karate-reports
结束(而不是surefire-reports
)并且具有不同的命名约定
这是我的做法:
- task: Maven@3
inputs:
publishJUnitResults: false
javaHomeOption: JDKVersion
jdkVersionOption: default
jdkArchitectureOption: x64
mavenPomFile: pom.xml
mavenVersionOption: Default
mavenAuthenticateFeed: false
effectivePomSkip: false
sonarQubeRunAnalysis: false
goals: "clean test -Dkarate.env=$(environment) -Pintegration-test"
mavenOptions: '-Xmx2048m -Dmaven.repo.local=$(Pipeline.Workspace)/.m2/repository'
displayName: "Run Karate Integration Tests"
- task: PublishTestResults@2
name: PublishKarateTestResults
inputs:
testRunTitle: "Karate Integration Tests"
testResultsFormat: "JUnit"
testResultsFiles: "**/karate-reports/xml/*.xml"
failTaskOnFailedTests: true
mergeTestResults: true
这里重要的是最后一行 mergeTestResults: true
因为我希望将集成测试的结果与 JUnit 测试结果合并。
我的测试是这样定义的:
@Test
public void runAPITests() {
Results results = Runner.path("classpath:features")
.tags("regression")
.reportDir("target/karate-reports/xml")
.outputJunitXml(true)
.tags("~@ignore")
.parallel(2);
Assertions.assertTrue(results.getFeaturesTotal() > 0,
"Did not find any cucumber tests to execute.");
generateReport(results.getReportDir());
Assertions.assertEquals(0, results.getFailCount(),
"Had at least one test failure.");
}
static void generateReport(String karateOutputPath) {
Collection<File> jsonFiles = FileUtils.listFiles(new File(karateOutputPath),
new String[] {"json"}, true);
List<String> jsonPaths =
jsonFiles.stream().map(File::getAbsolutePath)
.collect(Collectors.toList());
Configuration config = new Configuration(new File("target"),
REPORT_TITLE);
ReportBuilder reportBuilder = new ReportBuilder(jsonPaths, config);
reportBuilder.generateReports();
}