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 | |
| Package | |
| Meta |
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.pyprevent 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:
- User Guide and Medallion workflow
- Migration guide
- Performance benchmarks
- Architecture decisions
- Deployment guide
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
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
Built Distribution
Filter files by name, interpreter, ABI, and platform.
If you're not sure about the file name format, learn more about wheel file names.
Copy a direct link to the current filters
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
| Algorithm | Hash digest | |
|---|---|---|
| SHA256 |
0a9783cd0bb3b868c459226d49b89af5bd63a48ef95967a5d39b4bbbd9d5a530
|
|
| MD5 |
fac9fe890ca33b7d4efe74b717daed14
|
|
| BLAKE2b-256 |
9040d90a1d712ebfcacd7960a35632661859499fac04df5dcb23f5afaa4c9242
|
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
| Algorithm | Hash digest | |
|---|---|---|
| SHA256 |
9f59eb627d9ed423ab23320a3e30d1d0b59eeaf3a1c44f0fc7da7c918b825e36
|
|
| MD5 |
06810892905640b761e221d0fa84705e
|
|
| BLAKE2b-256 |
9eb76774fdf94f1abcc89f67b2f995028e54d1410d6e2e5447a775e184d984ea
|