You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

如何通过代码在Karate UI中运行多个feature文件?

解决Karate UI通过代码运行多个Feature文件的问题

我之前也碰到过一模一样的问题——Karate UI的app.run()确实没法直接传入多个Feature,而且多次调用只会执行第一个。这是因为每次调用app.run()都会初始化一个全新的UI测试会话,第一个会话启动后,后续的调用要么被阻塞要么直接被忽略。不过有两个很实用的解决方案能搞定这个需求:

方法1:用主Feature文件统一调度

这是最灵活的方案,你可以创建一个主Feature文件,通过call关键字按顺序调用所有需要执行的UI Feature,还能给每个Feature单独传递参数。

举个例子,先创建main-ui-tests.feature:

Feature: 批量执行UI测试集合
  Scenario: 按顺序运行多个UI Feature
    # 调用第一个Feature并传入指定参数
    * call read('classpath:path/to/feature1.feature') { arg1: 'your-test-value-1' }
    # 调用第二个Feature并传入对应参数
    * call read('classpath:path/to/feature2.feature') { arg2: 'your-test-value-2' }
    # 可以继续添加更多Feature的调用

然后在代码里只需要调用这个主Feature即可:

app.run("classpath:main-ui-tests.feature");

这样Karate UI就会严格按顺序执行feature1和feature2,每个Feature都能拿到对应的参数。

方法2:用Karate Runner类批量执行

如果你不想额外创建主Feature,也可以用Karate的Runner类来指定多个Feature路径,同时开启UI模式,注意把并行数设为1来保证顺序执行:

import com.intuit.karate.Runner;

public class UiTestRunner {
    public static void main(String[] args) {
        Runner.path(
                "classpath:path/to/feature1.feature",
                "classpath:path/to/feature2.feature"
            )
            .configProperty("karate.ui", "true") // 启用UI模式
            .parallel(1); // 并行数设为1,确保Feature依次执行
    }
}

这种方式适合不需要给每个Feature单独传复杂参数的场景,配置起来更简洁。

补充说明:为什么多次调用app.run()不行?

本质上app.run()的设计是启动一个独立的UI测试会话,第一次调用启动后,后续的调用会因为会话冲突或者线程阻塞无法正常触发,所以只会运行第一个Feature。

内容的提问来源于stack exchange,提问作者Ranjan Gupta

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.05.22 09:36:48