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

What is Importobot?

Importobot is a Python automation tool that converts test cases from test management frameworks (like Zephyr, JIRA/Xray, and TestLink) into executable Robot Framework format. It is a powerful and flexible open-source tool for migrating legacy test suites to modern automation frameworks.

Organizations often have thousands of test cases in legacy systems. Migrating them manually is a slow, error-prone, and expensive process. Importobot automates this conversion process, saving time and resources while preserving test knowledge and business logic.

Main Features

  • Automated Conversion: Convert entire test suites with a single command.
  • Bulk Processing: Recursively find and convert test cases in a directory.
  • Intelligent Field Mapping: Automatically map test steps, expected results, tags, and priorities.
  • Extensible: A modular architecture allows for adding new input formats and conversion strategies.
  • Pandas-inspired API: A pandas-inspired API for seamless integration into CI/CD pipelines and enterprise workflows.
  • Validation and Suggestions: Proactively validate input data and provide suggestions for ambiguous or poorly-defined test cases.
  • High-Quality Output: Maintains a high code quality standard with comprehensive test coverage.
  • Production Ready: The project has over 1150 tests and has been validated for enterprise-scale performance.

Installation

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

Here's a simple example of converting a Zephyr JSON export to a Robot Framework file.

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"
      }
    ]
  }
}

Conversion Command:

# Convert a single file
uv run importobot zephyr_export.json converted_tests.robot

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

API Usage

Importobot provides a pandas-inspired API for easy integration:

Simple Usage

import importobot

# Core bulk conversion
converter = importobot.JsonToRobotConverter()
result = converter.convert_file("input.json", "output.robot")

Enterprise Integration

from importobot.api import validation, converters, suggestions

# CI/CD pipeline validation
try:
    validation.validate_json_dict(test_data)
    converter = converters.JsonToRobotConverter()
    result = converter.convert_directory("/input", "/output")
except importobot.exceptions.ValidationError as e:
    print(f"Validation failed: {e}")

# QA suggestion engine
engine = suggestions.GenericSuggestionEngine()
improvements = engine.suggest_improvements(problematic_tests)

Advanced Configuration

import importobot

# Configure for enterprise security
importobot.config.security_level = "strict"
importobot.config.max_batch_size = 1000

# Bulk processing with error handling
converter = importobot.JsonToRobotConverter()
results = converter.convert_directory(
    input_dir="/test/exports",
    output_dir="/robot/tests",
    recursive=True
)

print(f"Converted: {results['success_count']} files")
print(f"Failed: {results['error_count']} files")

Documentation

The official documentation, including a full API reference, is available in the project wiki.

Contributing

All contributions, bug reports, bug fixes, documentation improvements, enhancements, and ideas are welcome.

Please feel free to open an issue on the GitHub issue tracker.

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.0.tar.gz (120.1 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.0-py3-none-any.whl (146.7 kB view details)

Uploaded Python 3

File details

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

File metadata

  • Download URL: importobot-0.1.0.tar.gz
  • Upload date:
  • Size: 120.1 kB
  • Tags: Source
  • Uploaded using Trusted Publishing? No
  • Uploaded via: uv/0.8.15

File hashes

Hashes for importobot-0.1.0.tar.gz
Algorithm Hash digest
SHA256 f40515f339ebae006e62c325a9003ce055f8ca9664533478a05a72799786ab71
MD5 7e0d1ee7d03e70c3d77ab267c5d8de2a
BLAKE2b-256 7381e5905370b6cae50964c417ca4e7157836eec72cb27fc68af43b2bd618be6

See more details on using hashes here.

File details

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

File metadata

  • Download URL: importobot-0.1.0-py3-none-any.whl
  • Upload date:
  • Size: 146.7 kB
  • Tags: Python 3
  • Uploaded using Trusted Publishing? No
  • Uploaded via: uv/0.8.15

File hashes

Hashes for importobot-0.1.0-py3-none-any.whl
Algorithm Hash digest
SHA256 0f11f3a76c745b56788593ba96746e7d880488ac2f19f1bf3e48b23322efb643
MD5 67ab5e801ccf502536d029508040ad95
BLAKE2b-256 e6a88f14da18135b4dfd4f8df2ed16c842144ffc447c65aa1521ac14e04b9b03

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