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

这是我的做法:

  - 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();
}