Skip to main content

Automated test framework converter for migrating test cases from Zephyr, JIRA/Xray, and TestLink to Robot Framework format with bulk processing capabilities

Project description

Importobot: Test Framework Converter

Testing Test Lint Typecheck
Package PyPI Version PyPI Downloads
Meta License Python 3.10+ Code style: ruff uv

Importobot converts structured test exports (Zephyr, TestLink, Xray) into Robot Framework files. It eliminates the manual work of copying test cases while preserving step order, metadata, and traceability.

>>> import importobot
>>> converter = importobot.JsonToRobotConverter()
>>> summary = converter.convert_file("zephyr_export.json", "output.robot")
>>> print(summary)

Features

  • Convert Zephyr, TestLink, and Xray JSON exports to Robot Framework.
  • Process entire directories recursively so large imports stay hands-off.
  • Preserve descriptions, steps, tags, and priorities for auditors.
  • Validate inputs and flag suspicious data before generating Robot code.
  • Provide a Python API for CI/CD integration and scripted workflows.
  • Use an independent Bayesian scorer with explicit ratio caps to keep ambiguous evidence honest.
  • Ship with roughly 1,800 unit and integration tests (currently 1,813; uv run pytest).

Installation

Install via pip:

$ pip install importobot

For advanced optimization features and uncertainty quantification, install the optional dependencies:

$ pip install "importobot[advanced]"

Development Version

The source code is hosted on GitHub: https://github.com/athola/importobot

This project uses uv for package management. First, install uv:

# On macOS / Linux
$ curl -LsSf https://astral.sh/uv/install.sh | sh

# On Windows (PowerShell)
$ powershell -c "irm https://astral.sh/uv/install.ps1 | iex"

Then, clone the repository and install the dependencies:

$ git clone https://github.com/athola/importobot.git
$ cd importobot
$ uv sync --dev

Quick Start

Convert Zephyr JSON exports to Robot Framework:

$ uv run importobot zephyr_export.json converted_tests.robot

Input (Zephyr JSON):

{
  "testCase": {
    "name": "User Login Functionality",
    "description": "Verify user can login with valid credentials",
    "steps": [
      {
        "stepDescription": "Navigate to login page",
        "expectedResult": "Login page displays"
      },
      {
        "stepDescription": "Enter username 'testuser'",
        "expectedResult": "Username field populated"
      }
    ]
  }
}

Output (Robot Framework):

*** Test Cases ***
User Login Functionality
    [Documentation]    Verify user can login with valid credentials
    [Tags]    login    authentication

    # Navigate to login page
    Go To    ${LOGIN_URL}
    Page Should Contain    Login

    # Enter username 'testuser'
    Input Text    id=username    testuser
    Textfield Value Should Be    id=username    testuser

Examples

  • Convert an entire directory while preserving structure:
    $ uv run importobot ./exports/zephyr ./converted
    
  • Enable Bayesian optimiser tuning with SciPy installed via importobot[advanced]:
    from importobot.medallion.bronze import optimization
    
    optimizer = optimization.MVLPConfidenceOptimizer()
    optimizer.tune_parameters("fixtures/complex_suite.json")
    
  • Render conversion metrics if rich numerical plots are desired:
    $ uv run python scripts/src/importobot_scripts/example_advanced_features.py
    

Confidence Scoring

Importobot uses an independent Bayesian scorer to detect file formats:

P(H|E) = P(E|H) × P(H) / [P(E|H) × P(H) + P(E|¬H) × P(¬H)]

Key details:

  • Likelihood mapping: P = 0.05 + 0.85 × value, which keeps weak evidence near zero and caps strong evidence at 0.9 before amplification.
  • Quadratic decay for wrong-format estimates: P(E|¬H) = 0.01 + 0.49 × (1 - likelihood)².
  • Ambiguous evidence is clamped to a 1.5:1 likelihood ratio; confident samples can reach 3:1 against the nearest competitor.
  • Dedicated tests in tests/unit/medallion/bronze/test_bayesian_ratio_constraints.py prevent regressions in these guarantees.

Format-specific adjustments keep things realistic—XML-heavy TestLink data tolerates a little more ambiguity, while JSON-first TestRail requires explicit IDs.

For complete mathematical details, see Mathematical Foundations.

Migration Notes

The 0.1.2 release retires the weighted evidence scorer in favour of the independent Bayesian pipeline. If you previously imported importobot.medallion.bronze.weighted_evidence_bayesian_confidence, switch to the runtime-facing FormatDetector or use importobot.medallion.bronze.independent_bayesian_scorer.IndependentBayesianScorer directly. The regression tests in tests/unit/medallion/bronze/test_bayesian_ratio_constraints.py illustrate the new behaviour and are a good starting point when adjusting custom integrations.

Rate limiting at the security gateway gained exponential backoff. Existing environments continue to work without changes, but you can tune the behaviour with:

export IMPORTOBOT_SECURITY_RATE_MAX_QUEUE=256
export IMPORTOBOT_SECURITY_RATE_BACKOFF_BASE=2.0
export IMPORTOBOT_SECURITY_RATE_BACKOFF_MAX=8.0

With these defaults we observed average detection latency of ~0.055 s per request and no loss of throughput compared to 0.1.1 when benchmarking 200 conversions on a single core.

Documentation

Documentation is available on the project wiki:

Contributing

We welcome contributions! Please open an issue on GitHub to report bugs or suggest features.

Running Tests

$ make test

Mutation Testing

$ make mutation

Performance Benchmarks

$ make perf-test
$ make benchmark-dashboard

License

BSD 2-Clause

Project details


Download files

Download the file for your platform. If you're not sure which to choose, learn more about installing packages.

Source Distribution

importobot-0.1.2.tar.gz (244.8 kB view details)

Uploaded Source

Built Distribution

If you're not sure about the file name format, learn more about wheel file names.

importobot-0.1.2-py3-none-any.whl (302.6 kB view details)

Uploaded Python 3

File details

Details for the file importobot-0.1.2.tar.gz.

File metadata

  • Download URL: importobot-0.1.2.tar.gz
  • Upload date:
  • Size: 244.8 kB
  • Tags: Source
  • Uploaded using Trusted Publishing? No
  • Uploaded via: twine/6.2.0 CPython/3.10.18

File hashes

Hashes for importobot-0.1.2.tar.gz
Algorithm Hash digest
SHA256 0a9783cd0bb3b868c459226d49b89af5bd63a48ef95967a5d39b4bbbd9d5a530
MD5 fac9fe890ca33b7d4efe74b717daed14
BLAKE2b-256 9040d90a1d712ebfcacd7960a35632661859499fac04df5dcb23f5afaa4c9242

See more details on using hashes here.

File details

Details for the file importobot-0.1.2-py3-none-any.whl.

File metadata

  • Download URL: importobot-0.1.2-py3-none-any.whl
  • Upload date:
  • Size: 302.6 kB
  • Tags: Python 3
  • Uploaded using Trusted Publishing? No
  • Uploaded via: twine/6.2.0 CPython/3.10.18

File hashes

Hashes for importobot-0.1.2-py3-none-any.whl
Algorithm Hash digest
SHA256 9f59eb627d9ed423ab23320a3e30d1d0b59eeaf3a1c44f0fc7da7c918b825e36
MD5 06810892905640b761e221d0fa84705e
BLAKE2b-256 9eb76774fdf94f1abcc89f67b2f995028e54d1410d6e2e5447a775e184d984ea

See more details on using hashes here.

Supported by

AWS Cloud computing and Security Sponsor Datadog Monitoring Depot Continuous Integration Fastly CDN Google Download Analytics Pingdom Monitoring Sentry Error logging StatusPage Status page