Skip to main content
A module is a named sequence of steps you can call from any test. Use modules to share login flows, setup fixtures, or repeated user journeys.
Modules can’t call other modules.
Editing a module updates every test that uses it.

Example

A module is a YAML file that ends in .module.yaml. Call it from a test on the same platform with a Module step. This example uses a web module; mobile parameter declarations differ as shown under Parameters.
log-in.module.yaml
checkout.test.yaml

Parameters

Parameters let a single module handle different inputs. Web modules declare a list under parameters, then reference the values inside steps via {{ env.PARAM_NAME }} (or env.PARAM_NAME in JavaScript steps).
log-in.module.yaml
Mobile modules use a parameters object. parameterNames declares the inputs, defaultParameters maps names to JavaScript expressions, and parameterEnums maps names to allowed string values. Quote a literal string inside the expression:
log-in.module.yaml

Defaults vs instance inputs

Each parameter can have a default value on the module and an instance input on a specific Module step. Instance inputs take precedence. Each input value is one of:
  • A shorthand string: evaluated as a JavaScript expression (e.g. env.PARAM, someFn() + 1).
  • { string: ... }: a literal string. Use this for fixed text values.
  • { javascript: ... }: an explicit JavaScript expression, equivalent to the shorthand. The runtime adds return; do not add a return statement yourself.
checkout.test.yaml

Control flow

Default retries

For web modules, set Default retries under the module’s Control flow tab to retry every invocation of the module a fixed number of times on failure. Invocations that set their own retries value override the module default. Use this for flaky setup modules (e.g. a login module that sometimes fails on slow environments) instead of setting retries on every invocation.

Caching

Web modules are uncached by default and always execute. Enable caching to skip a module when its cache key and inputs are unchanged. Momentic also caches the module’s return value (the return value of its last step). Mobile module calls execute their steps; the module caching fields below apply to web modules. Configure caching with module-level fields:
log-in.module.yaml
Override the key or expiry on a single Module step with cacheConfig:
checkout.test.yaml

Authentication modules

Set autoAuth: true (the editor’s Treat as auth module) to save and restore browser auth state between runs. This applies to web tests; mobile modules do not have autoAuth. Momentic persists:
log-in.module.yaml
Set the cache expiry shorter than your session’s expiry. Add a final step that verifies the authenticated state so the cache only saves when login succeeded.
See Authentication strategies and Cache authenticated sessions for the full setup.