karatelabs/karate · info

parsed only

Error message

parsed only

What it means

This is not an exception — it is the console summary status string SuiteResult.printSummary() emits in place of 'all passed' when the suite was a dry run. Because nothing executes in a dry run, Karate refuses to print a green 'all passed' (which would falsely imply the system under test was exercised) and prints 'parsed only' as a warning-styled status.

Solutions

  1. If real execution was intended, remove the dryRun option from the Runner/CLI invocation
  2. Treat 'parsed only' as success for a parse/tag validation dry run — it is informational, not an error
  3. Gate CI job success on non-dry-run runs only, or assert the summary explicitly
  4. Check for dryRun=true leaking from shared runner configuration

Example fix

// before: accidental dry run in CI
Runner.path(classpath("features")).dryRun(true)
// after
Runner.path(classpath("features")).dryRun(false)
Defensive patterns

Strategy: validation

Validate before calling

// assert the run was real, not a dry run, before marking CI green
if (result.isDryRun()) throw new IllegalStateException("suite ran in dry-run mode; parsed only, nothing executed");

Type guard

function isRealRun(suiteResult){ return suiteResult != null && suiteResult.getScenarioCount() > 0 && !suiteResult.isDryRun(); }

Prevention

When it happens

Trigger: Running Karate in dry-run mode (Runner with dryRun=true, or CLI dry-run flag) and reaching the end with zero failed features — printSummary shows features status 'parsed only' and scenarios status 'DRY RUN — nothing was executed'.

Common situations: CI jobs accidentally left in dry-run mode showing green-ish output; developers validating that all features parse/tag-filter correctly; someone expecting real execution but a dryRun flag was set in config.

Related errors


AI-assisted analysis of karatelabs/karate@a22eb90246 (2026-09-12). Data as JSON: /api/errors/e32c6716bc4091bc. Report an issue: GitHub.

Appendix: source

Thrown at karate-core/src/main/java/io/karatelabs/core/SuiteResult.java:308

        // Timing info
        double elapsedSecs = getDurationMillis() / 1000.0;
        double threadTimeSecs = getThreadTimeMillis() / 1000.0;
        double efficiency = threadCount > 0 && elapsedSecs > 0
                ? threadTimeSecs / (elapsedSecs * threadCount)
                : 1.0;

        Console.println(String.format("elapsed: %6.2fs | threads: %3d | efficiency: %.2f",
                elapsedSecs, threadCount, efficiency));

        // Feature stats
        int featureTotal = getFeatureCount();
        int featurePassed = getFeaturePassedCount();
        int featureFailed = getFeatureFailedCount();
        // a dry run cannot fail (nothing runs) and its skips count as passed — printing "all passed" for it
        // would report a green for a suite that never touched the system under test
        String featureStatus = featureFailed > 0
                ? Console.fail(featureFailed + " failed")
                : dryRun ? Console.warn("parsed only") : Console.pass("all passed");

        Console.println(String.format("features: %4d | passed: %4d | %s",
                featureTotal, featurePassed, featureStatus));

        // Scenario stats
        int scenarioTotal = getScenarioCount();
        int scenarioPassed = getScenarioPassedCount();
        int scenarioFailed = getScenarioFailedCount();
        int scenarioSkipped = getScenarioSkippedCount();
        String scenarioStatus = scenarioFailed > 0
                ? Console.fail(scenarioFailed + " failed")
                : dryRun ? Console.warn("DRY RUN — nothing was executed") : Console.pass("all passed");

        if (scenarioSkipped > 0) {
            Console.println(String.format("scenarios: %3d | passed: %4d | skipped: %4d | %s",
                    scenarioTotal, scenarioPassed, scenarioSkipped, scenarioStatus));
        } else {
            Console.println(String.format("scenarios: %3d | passed: %4d | %s",

View on GitHub (pinned to a22eb90246)