Actions

Each test step executes one action: an HTTP request, a database query, a UI interaction, or a wait.

HTTP Request

{
  "action": {
    "type": "httpRequest",
    "method": "POST",
    "url": "api-gateway/api/users",
    "headers": {
      "Authorization": "Bearer {{token}}",
      "Content-Type": "application/json"
    },
    "body": {
      "name": "{{userName}}",
      "email": "{{email}}"
    }
  }
}
FieldTypeRequiredDescription
type"httpRequest"YesAction type
methodenumYesGET, POST, PUT, DELETE, PATCH, HEAD, OPTIONS
urlstringYesservice-name/path format — service name resolves to internal DNS
headersobjectNoRequest headers (values support {{variables}})
bodyany JSONNoRequest body (string values support {{variables}})

Use service names, not ports. The url field uses the format service-name/path — just the item name and the route. Dokkimi handles DNS and port resolution internally. Don't include ports, protocols, or hostnames.

For example, if your service item is named api-gateway and listens on port 3000:

// Correct
"url": "api-gateway/api/users"

// Wrong — don't include ports or protocols
"url": "http://api-gateway:3000/api/users"

Parallel actions

Use the parallel action type to execute multiple actions simultaneously within a single step:

{
  "name": "Create both orders",
  "action": {
    "type": "parallel",
    "actions": [
      { "type": "httpRequest", "method": "POST", "url": "api-gateway/api/orders", "body": { "item": "widget" } },
      { "type": "httpRequest", "method": "POST", "url": "api-gateway/api/orders", "body": { "item": "gadget" } }
    ]
  }
}

All actions within parallel fire at the same time. Use this to test concurrent access patterns or to speed up independent setup steps. See Tests & Steps for more on parallel vs sequential execution.

Database Query

SQL databases (Postgres, MySQL)

{
  "action": {
    "type": "dbQuery",
    "database": "postgres-db",
    "query": "SELECT * FROM users WHERE email = '{{email}}'"
  }
}

MongoDB

For MongoDB, the query field must be a JSON string with a specific structure:

{
  "action": {
    "type": "dbQuery",
    "database": "mongo-db",
    "query": "{\"operation\":\"findOne\",\"collection\":\"orders\",\"filter\":{\"orderId\":\"ORD-001\"}}"
  }
}

Supported MongoDB operations:

OperationRequired fields
find, findOnecollection, filter
insertOnecollection, document
insertManycollection, documents
updateOne, updateManycollection, filter, update
deleteOne, deleteManycollection, filter
FieldTypeRequiredDescription
type"dbQuery"YesAction type
databasestringYesName of a DATABASE item in the definition
querystringYesSQL query or MongoDB command JSON (supports {{variables}})

UI Action

Drive a real Chromium browser to test user-facing flows. When a definition contains UI actions, Dokkimi automatically attaches a headless Chromium sidecar to the test environment.

{
  "action": {
    "type": "ui",
    "target": "web-app",
    "steps": [
      { "visit": "/posts/new" },
      { "waitFor": "[data-testid='post-form']" },
      { "type": { "selector": "#title", "text": "My new post" } },
      { "type": { "selector": "#body", "text": "Post content here." } },
      { "click": "[data-testid='publish-btn']" },
      { "waitFor": "[data-testid='success-toast']" },
      { "screenshot": "post-published" }
    ]
  }
}
FieldTypeRequiredDescription
type"ui"YesAction type
targetstringYesName of a SERVICE item with a uiPath field.
stepsarrayYesOrdered list of browser interactions to perform.

Available sub-steps

Each sub-step is an object with a single discriminator key. The key determines the sub-step type.

KeyValueDescription
visitstring (URL path)Navigate to a path on the target service.
clickstring (selector)Click an element.
type{ selector, text }Type text into a field (clears first).
select{ selector, value }Select an option from a dropdown.
hoverstring (selector)Hover over an element.
waitForstring or { selector, text? }Wait until an element appears. Optionally check for text content.
screenshotstring (name)Capture a screenshot.
scroll{ x?, y? }Scroll the page by the given offset.
keystring (key name)Press a keyboard key (e.g. Enter, Escape).
upload{ selector, files }Upload files to a file input.
drag{ source, target }Drag from one element to another.
extractobjectExtract values from the page into variables. Keys are variable names, values are source objects with from, selector, etc.
viewport{ width, height }Set browser viewport dimensions (pixels).

Visual regression with screenshots

Screenshots captured during a test run are saved as artifacts. To enable visual regression testing, add match: true to the screenshot sub-step:

{ "screenshot": "checkout-page", "match": true }

When match: true is set, Dokkimi compares the capture against a baseline stored in .dokkimi/<project>/baselines/. If no baseline exists yet (first run), or if the diff exceeds the threshold, it appears as a pending baseline. Review and approve pending baselines with dokkimi baselines.

Use data-testid selectors. CSS class selectors break when you restyle. Test IDs are stable and make your intent clear.

Wait

Pause execution for a specified duration. Useful for waiting for async operations to complete.

{
  "action": {
    "type": "wait",
    "durationMs": 2000
  }
}
FieldTypeRequiredDescription
type"wait"YesAction type
durationMsintegerYesDuration to wait in milliseconds