Package io.karatelabs.core
Class ScenarioRuntime
java.lang.Object
io.karatelabs.core.ScenarioRuntime
- All Implemented Interfaces:
KarateJsContext,Callable<ScenarioResult>
-
Constructor Summary
ConstructorsConstructorDescriptionScenarioRuntime(FeatureRuntime featureRuntime, Scenario scenario) ScenarioRuntime(KarateJs karate, Scenario scenario) Constructor for standalone execution without FeatureRuntime. -
Method Summary
Modifier and TypeMethodDescriptionvoidabort()call()voidcaptureCustomPerfEvent(String name, long startTime, long endTime) Capture a custom performance event (for non-HTTP operations like DB, gRPC).voidcapturePerfEvent(PerfEvent event) Capture a performance event for the HTTP request just completed.voidClear the cookie jar (for clearCookies functionality).voidEvaluate a JS expression with debug source information from a Gherkin step.evalDocString(String expression, Step step) Evaluate a JS docstring expression with debug source information.executeCallSingle(String path, Object arg) Execute karate.callSingle() - runs a file once per Suite and caches the result.executeJsCall(String path, Object arg) Execute a feature via karate.call() and return its result variables.executeJsCallOnce(String path, Object arg) Execute karate.callonce() - runs a feature once per FeatureRuntime and caches the result.executeSetup(String name) Execute the @setup scenario and return all its variables.executeSetupOnce(String name) Execute the @setup scenario with caching (only runs once per feature).Returns the runtime configuration.Get the cookie jar for auto-sending cookies on subsequent requests.Get the browser driver, initializing it lazily if needed.Get the driver without initializing it.Get the driver scope ("scenario" or "caller").io.karatelabs.js.EnginegetError()getHttp()io.karatelabs.js.RunInterceptor<?> Get the current listen result without waiting.Get the PerfHook for reporting performance events.io.karatelabs.js.DebugPointFactory<?> Returns the ScenarioRuntime, or null for standalone usage.intGet total number of steps.intGet current step index for debugging.getVariable(String name) io.karatelabs.common.ResourceReturns the working directory resource for resolving relative paths.booleanbooleanCheck if driver scope is "caller" (V1-style propagation).booleanCheck if performance mode is enabled.booleanbooleanvoidlogLastPerfEvent(String failureMessage) Log (report) the last captured performance event.voidregisterChannel(Channel channel) Register a channel for lifecycle management.<T> voidsetDebugSupport(io.karatelabs.js.RunInterceptor<T> interceptor, io.karatelabs.js.DebugPointFactory<T> factory) voidsetDriverFromCallee(ScenarioRuntime callee) Set driver from a callee feature (upward propagation).voidsetHiddenVariable(String name, Object value) Set a "hidden" variable that is accessible in JS but excluded from getAllVariables().voidsetListenResult(Object result) Set the listen result (called by karate.signal()).voidsetSkipBackground(boolean skipBackground) voidsetVariable(String name, Object value) voidstepBack()Move execution back one step (for debugging).voidContinue execution from current position (after a pause).voidReset to re-execute the current step (for debugging after hot reload).voidstop()voidupdateCookieJar(Object responseCookies) Add cookies from responseCookies to the cookie jar for auto-send.waitForListenResult(long timeoutMs) Wait for a signal with timeout.
-
Constructor Details
-
ScenarioRuntime
-
ScenarioRuntime
Constructor for standalone execution without FeatureRuntime.
-
-
Method Details
-
executeSetup
Execute the @setup scenario and return all its variables. -
executeSetupOnce
Execute the @setup scenario with caching (only runs once per feature). -
executeJsCall
Execute a feature via karate.call() and return its result variables. This is used for JavaScript calls like: karate.call('other.feature', { arg: 'value' }) Supports call-by-tag syntax: - call('file.feature@name=tagvalue') - call feature, run only scenario with matching tag - call('@tagname') - call scenario in same file by tag -
executeJsCallOnce
Execute karate.callonce() - runs a feature once per FeatureRuntime and caches the result. Uses the same cache as the callonce keyword. Uses double-check locking to ensure thread-safe execution in parallel scenarios. -
executeCallSingle
Execute karate.callSingle() - runs a file once per Suite and caches the result. Uses Suite-level locking to ensure thread-safe execution in parallel scenarios. Flow: 1. Check in-memory cache (lock-free for fast path) 2. If callSingleCache is configured, check disk cache 3. If not cached, acquire Suite lock 4. Double-check cache (another thread may have cached while waiting) 5. Execute and cache result (in-memory and optionally to disk) 6. Return deep copy to prevent cross-thread mutation Disk caching (configure callSingleCache): - { minutes: 15 } - cache to disk for 15 minutes (default dir: karate-temp/cache) - { minutes: 15, dir: 'some/folder' } - custom cache directory - Only JSON-like results (Map/List) are persisted to disk Exceptions are cached and re-thrown on subsequent calls. -
call
- Specified by:
callin interfaceCallable<ScenarioResult>
-
eval
-
eval
Evaluate a JS expression with debug source information from a Gherkin step. Creates an embedded Resource so the JS engine's debug points carry the feature file path and correct line numbers.- Parameters:
expression- the JS expression textstep- the Gherkin step that contains this expression
-
evalDocString
Evaluate a JS docstring expression with debug source information. Uses the docstring's actual content start line for precise line mapping. -
setVariable
-
setHiddenVariable
Set a "hidden" variable that is accessible in JS but excluded from getAllVariables(). Used for internal implementation details like responseBytes, responseType, etc. -
getVariable
-
getAllVariables
-
getEngine
public io.karatelabs.js.Engine getEngine() -
getHttp
-
getKarate
-
getCookieJar
Get the cookie jar for auto-sending cookies on subsequent requests. Returns a map of cookie name to cookie details (value, path, domain, etc.). -
updateCookieJar
Add cookies from responseCookies to the cookie jar for auto-send. Called after each HTTP response to persist cookies. -
clearCookieJar
public void clearCookieJar()Clear the cookie jar (for clearCookies functionality). -
configure
-
getRuntime
Description copied from interface:KarateJsContextReturns the ScenarioRuntime, or null for standalone usage.- Specified by:
getRuntimein interfaceKarateJsContext
-
getConfig
Description copied from interface:KarateJsContextReturns the runtime configuration.- Specified by:
getConfigin interfaceKarateJsContext
-
getWorkingDir
public io.karatelabs.common.Resource getWorkingDir()Description copied from interface:KarateJsContextReturns the working directory resource for resolving relative paths.- Specified by:
getWorkingDirin interfaceKarateJsContext
-
getScenario
-
getFeatureRuntime
-
getResult
-
getCurrentStep
-
isStopped
public boolean isStopped() -
isAborted
public boolean isAborted() -
getError
-
abort
public void abort() -
stop
public void stop() -
stepBack
public void stepBack()Move execution back one step (for debugging). After calling this, the previous step will be re-executed. -
stepReset
public void stepReset()Reset to re-execute the current step (for debugging after hot reload). -
stepProceed
public void stepProceed()Continue execution from current position (after a pause). -
getStepIndex
public int getStepIndex()Get current step index for debugging. -
getStepCount
public int getStepCount()Get total number of steps. -
setDebugSupport
public <T> void setDebugSupport(io.karatelabs.js.RunInterceptor<T> interceptor, io.karatelabs.js.DebugPointFactory<T> factory) -
getInterceptor
public io.karatelabs.js.RunInterceptor<?> getInterceptor() -
getPointFactory
public io.karatelabs.js.DebugPointFactory<?> getPointFactory() -
setSkipBackground
public void setSkipBackground(boolean skipBackground) -
isSkipBackground
public boolean isSkipBackground() -
getDriver
Get the browser driver, initializing it lazily if needed. Requires driver to be configured via `configure driver = { ... }`.- Returns:
- the Driver instance
- Throws:
RuntimeException- if driver is not configured
-
registerChannel
Register a channel for lifecycle management. Called by karate.channel(). The channel's afterScenario() will be called when the scenario ends. -
getDriverIfPresent
Get the driver without initializing it. Returns null if driver has not been initialized. Used for checking if driver exists without side effects. -
getDriverScope
Get the driver scope ("scenario" or "caller"). -
isCallerScope
public boolean isCallerScope()Check if driver scope is "caller" (V1-style propagation). -
setDriverFromCallee
Set driver from a callee feature (upward propagation). When callee has scope: "caller", driver propagates to the caller so it can be used after the call returns. -
setListenResult
Set the listen result (called by karate.signal()). Triggers any waiting listen() call to complete. -
waitForListenResult
Wait for a signal with timeout. Returns the signaled result or throws on timeout. -
getListenResult
Get the current listen result without waiting. -
isPerfMode
public boolean isPerfMode()Check if performance mode is enabled. When true, HTTP request timing is reported via PerfHook. -
getPerfHook
Get the PerfHook for reporting performance events.- Returns:
- the PerfHook or null if not in perf mode
-
capturePerfEvent
Capture a performance event for the HTTP request just completed.This implements the "deferred reporting" pattern from v1: - The previous event is reported first (if any) - The new event is held until the next HTTP request or scenario end - This allows assertion failures to be attributed to the preceding HTTP request
- Parameters:
event- the performance event to capture
-
logLastPerfEvent
Log (report) the last captured performance event.Called: 1. Before each new HTTP request (to report the previous one) 2. At scenario end (to report the final request, with any failure message)
If failureMessage is non-null, the event is marked as failed.
- Parameters:
failureMessage- the failure message (null if successful)
-
captureCustomPerfEvent
Capture a custom performance event (for non-HTTP operations like DB, gRPC).Unlike HTTP events, custom events are reported immediately.
- Parameters:
name- the event namestartTime- start time in epoch millisecondsendTime- end time in epoch milliseconds
-