Open Source  · MIT License

Black-Box Testing
without the boilerplate

Azertio is an extensible, plugin-based testing platform that lets you write expressive tests in plain DSL — then run them anywhere, against anything.

View on GitHub See the DSL ↓
azertio — exec
azertio exec --suite "REST API"
Building test plan…
Installing plugins: gherkin, rest
────────────────────────────────────
GET /posts returns 200 42ms
GET /users has 10 results 38ms
POST /posts creates a resource 61ms
DELETE /posts/1 returns 204 29ms
────────────────────────────────────
3 passed 1 failed in 2.1s

Everything you need to test, nothing you don't

A lightweight runtime with a powerful extension model. Bring your own plugins, connect any backend, run anywhere.

🧩

Plugin architecture

Every capability — REST, database, Gherkin parsing — is a first-class plugin resolved from Maven at runtime. No classpath wrestling.

📝

Human-readable DSL

Tests are plain feature files written in a domain-specific language. Non-technical stakeholders can read and review them directly.

🔌

Any JDBC database

Connect to MySQL, PostgreSQL, SQLite, H2, DuckDB or any JDBC driver — just add it as a runtime dependency in azertio.yaml.

🌐

REST API testing

First-class steps for HTTP requests, response assertion, JSON path extraction, and header validation. No glue code required.

Benchmarks built-in

Any step can be turned into a load benchmark with configurable concurrency and iteration count. Statistics are attached to the execution report.

🖥

VS Code integration

Browse plans, inspect execution trees, view attachments and re-run past executions — all from the editor, via a JSON-RPC language server.

sample.feature
# language: en
Feature: JSONPlaceholder Posts API

  @ID-1 @GET
  Scenario: List all posts
    When I make a GET request to "posts"
    Then the HTTP status code is equal to 200
    And the response body contains:
      """json
      [{"userId": 1, "id": 1}]
      """

  @ID-10 @POST @GET
  Scenario: Create a post and get it after
    When I make a POST request to "posts" with body:
      """json
      {
        "title": "My new post",
        "body": "Content of my new post.",
        "userId": 1
      }
      """
    Then the HTTP status code is equal to 201
    And I store the value of field 'id' from the response body into variable id
    When I make a GET request to 'posts/${id}'
    Then the HTTP status code is 200

  @ID-11 @GET
  Scenario: Measure response time
    Given benchmark mode is enabled with 200 executions and 10 threads
    When I make a GET request to "posts/1"
    Then the benchmark P95 response time (ms) is greater than 2

Tests as close to English as it gets

Write scenarios in plain language. Azertio matches each line to a step implementation at runtime — zero boilerplate, zero glue code.

  • 🏷

    Tag-based filtering

    Run any subset of tests with boolean tag expressions: GET and not slow

  • 🔄

    Shared Background steps

    Set up context once per feature with Background — no test setup duplication.

  • 💾

    Variables between steps

    Store values from one step and inject them into the next using ${'{'}name{'}'} interpolation.

  • 🌍

    Multilingual

    Steps can be written in English, Spanish, or a compact DSL alias — all from the same plugin.

Install only what you need

Declare in azertio.yaml → resolved from Maven at runtime

gherkin Gherkin Parser

Loads .feature files and assembles a structured test plan. Supports Gherkin syntax and the compact DSL dialect.

Feature files Scenarios Background Tags
plugins: - gherkin
rest REST API

Steps for HTTP requests (GET, POST, PUT, DELETE), response assertions, JSON path extraction and header checks. Zero boilerplate.

HTTP verbs JSON path Status codes Headers
plugins: - rest configuration: rest: baseURL: 'https://api.example.com'
db Database

Execute SQL queries, assert row counts and table contents against any JDBC datasource. Bring your own driver as a runtime dependency.

SQL queries Count assertions Any JDBC Multiple DSes
plugins: - "db with com.mysql:mysql-connector-j"
custom Build your own

Implement StepProvider and publish to Maven. Azertio resolves and loads it at startup — no forks, no rebuilds.

Java SPI Maven artifact Hot-install
plugins: - "com.example:my-plugin:1.0"
VS Code Extension

Run and inspect tests without leaving the editor

The Azertio extension connects to a local JSON-RPC server and gives you a full testing workflow inside VS Code — no terminal juggling required.

📋

Execution history

Browse every past run with its date, duration and overall result. Each execution is stored locally and always available to review.

🌲

Full result tree

Drill down from test plan → suite → scenario → step. Each node shows its individual pass/fail status and execution time.

📎

Attachments inline

Steps that produce data — CSV query results, JSON responses — are saved as attachments and opened directly from the result tree.

🔁

One-click re-run

Re-execute any past run against its original test plan and profile with a single button — no need to reconfigure anything.