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

Karate CLI测试:如何在命令交互中自动输入应答内容

Karate测试CLI交互式输入的实现方案

核心逻辑

利用Karate的listener捕获CLI进程的输出内容,当检测到对应输入提示时,通过进程输出流写入预设应答(需添加换行符\n模拟回车确认)。

完整代码示例

Listener实现类

import com.intuit.karate.ProcessResult;
import com.intuit.karate.core.ScenarioRuntime;
import com.intuit.karate.junit5.Karate.TestListener;
import java.io.OutputStream;
import java.io.PrintWriter;

public class CliInitListener implements TestListener {
    private PrintWriter inputWriter;

    @Override
    public void beforeScenario(ScenarioRuntime scenarioRuntime) {
        // 获取CLI进程的输出流,用于写入应答
        ProcessResult processResult = scenarioRuntime.getEnv().get("processResult", ProcessResult.class);
        OutputStream outputStream = processResult.getProcess().getOutputStream();
        inputWriter = new PrintWriter(outputStream, true); // 自动刷新流
    }

    @Override
    public void onProcessOutput(String outputLine) {
        // 匹配第一个输入提示
        if (outputLine.contains("Enter endpoint:")) {
            inputWriter.println("https://test-api.example.com"); // 写入应答并回车
        }
        // 匹配第二个输入提示(替换为实际CLI的提示文本)
        else if (outputLine.contains("Enter auth token:")) {
            inputWriter.println("test-token-789");
        }
        // 匹配第三个输入提示(替换为实际CLI的提示文本)
        else if (outputLine.contains("Select environment:")) {
            inputWriter.println("dev");
        }
    }
}

Karate测试脚本配置

Background:
  * def cliProcess = karate.exec('./mycli init')
  * karate.set('processResult', cliProcess)
  * configure listener = new com.your.package.CliInitListener()

Scenario: 测试mycli init命令的交互式流程
  * match cliProcess.exitCode == 0

关键注意事项

  • 确保outputLine.contains()中的文本与CLI实际输出的提示完全匹配(注意大小写、空格、特殊字符),可先手动运行./mycli init复制输出内容核对。
  • 必须使用println()而非print(),换行符是触发CLI确认输入的关键。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.08 15:50:15