Karate 仅使用动态输入运行选定的测试

Karate 仅使用动态输入运行选定的测试,karate,Karate,我尝试了一些方法来解决我的问题,但没有成功(我确实需要改进我的Java:),所以我希望我遗漏了一些东西,或者有人可以为我指出正确的方向 我需要测试多个微服务。我应该能够一次测试所有内容,或者只测试我想要的内容。每个服务都有自己的数据库和不同的功能文件。请注意,这些服务可能不是全部启动和运行的 我可以手动设置每个服务的配置来运行测试。理想情况下,我希望在命令行中传递一个带有服务名称的变量,测试应该开始 在当前设置中,我使用callSingle运行DBInit.feature,它运行SQL脚本来填充

我尝试了一些方法来解决我的问题,但没有成功(我确实需要改进我的Java:),所以我希望我遗漏了一些东西,或者有人可以为我指出正确的方向

我需要测试多个微服务。我应该能够一次测试所有内容,或者只测试我想要的内容。每个服务都有自己的数据库和不同的功能文件。请注意,这些服务可能不是全部启动和运行的

我可以手动设置每个服务的配置来运行测试。理想情况下,我希望在命令行中传递一个带有服务名称的变量,测试应该开始

在当前设置中,我使用callSingle运行DBInit.feature,它运行SQL脚本来填充我的数据库。我还设置了功能文件中使用的全局变量。这个很好用

当我添加更多用于测试未运行的服务的功能文件时,就会出现问题。当我必须为指定的服务使用callSingle来填充其数据库时

第一个想法是使用不同的环境,但我可能需要在一次运行中使用一个报告执行5个环境。然后我想为每个服务实现runner,但我不确定这些runner是否并行运行,也不确定在这种情况下如何填充DB

是否可以使用将传递给主测试类的自定义变量

public class DemoTestSelected {
    
    @BeforeClass
    public static void beforeClass() throws Exception {
        TestBase.beforeClass();
    }     

    @Test
    public void testSelected() {
        List<String> tags = Arrays.asList("~@ignore");
        List<String> features = Arrays.asList("classpath:demo/cats");
        String karateOutputPath = "target/surefire-reports";
        Results results = Runner.path(features)
                .tags(tags)
                .outputCucumberJson(true)
                .reportDir(karateOutputPath).parallel(5);
        DemoTestParallel.generateReport(karateOutputPath);
        assertTrue(results.getErrorMessages(), results.getFailCount() == 0);
    }

}
public类已选定{
@课前
public static void beforeClass()引发异常{
TestBase.beforeClass();
}     
@试验
public void testSelected(){
List tags=Arrays.asList(“~@ignore”);
List features=Arrays.asList(“classpath:demo/cats”);
字符串karateOutputPath=“目标/surefire报告”;
结果=Runner.path(特征)
.标签(标签)
.outputCucumberJson(真)
.reportDir(karateOutputPath).parallel(5);
DemosTestParallel.generateReport(karateOutputPath);
assertTrue(results.getErrorMessages(),results.getFailCount()==0);
}
}

例如,要在配置中设置的标记和功能?

我重新阅读了您的问题几次,并放弃了理解它。但我会提出几个原则:

  • 您应该使用标记来决定运行/不运行哪些功能。尽量使你需要的一切都适合这个模型,不要使事情复杂化
  • 为了获得更多的控制,您可以在命令行上设置一些“系统属性”,也许在使用
    Runner
    之前,您可以编写一些Java逻辑,它将是--“if
    karate.env
    (或其他一些系统属性)是
    foo
    ,然后选择标记
    one
    two
    three
  • 是的,空手道1.0系列在技术上可以并行运行多个
    Runner
    实例,但这是留给您的,我们没有示例,它需要您手动管理线程或Java

谢谢你的回答。我确实尝试过使用标签,但标签不适用于
karate.callSingle
。我需要callSingle来填充数据库。我将尝试用Java实现一些东西。
标签不适用于karate.callSingle
-这对我来说也没有任何意义。无论如何,最好的使用
karate.callSingle(功能1.feature)
karate config.js
中,其中
feature1
有两个具有不同标签的场景
(@tag1和@tag2)
,即使我使用
-Dkarate.options=“--tags@tag1”),这两个场景每次都会执行“
。ps.thx适用于link@senaid这是预期的行为。一旦你使用了任何类型的
call
标签,除非你使用了“按标签呼叫”选项,否则就不涉及标签:我没有注意到这一点。非常感谢你