Mirror test cases from any TMS into a Git repository as Markdown files
Project description
testops-mirror
Mirror test cases from any TMS into a Git repository — one file per test case, history forever.
mirror/
├── Transfers/
│ ├── Negative/
│ │ └── TC-2301-transfer-to-blocked-account.md
│ └── TC-2201-transfer-between-own-accounts.md
└── Auth/
└── TC-1001-login-with-valid-credentials.md
Why
Your TMS is a single point of failure. Test cases deserve version control just like code — history, diff, blame, and code review through merge requests.
testops-mirror pulls every test case on a schedule and commits changes to a plain Git repo. No vendor lock-in, no proprietary format.
Quick Start
pip:
pip install testops-mirror
cp .env.example .env # fill in TESTOPS_ENDPOINT and TESTOPS_TOKEN
testops-mirror sync --project-id 42 --repo ./mirror
Docker:
docker run --rm \
-e TESTOPS_ENDPOINT=https://testops.example.com \
-e TESTOPS_TOKEN=your-token \
-v $(pwd)/mirror:/mirror \
ghcr.io/exzist-qa/testops-mirror \
sync --project-id 42 --repo /mirror
Example output file
---
id: '2301'
name: Transfer to blocked account
status: Ready
automated: false
tags: [api, negative]
links:
- {name: BAN-17, url: 'https://jira.example.com/browse/BAN-17', type: issue}
source: {url: 'https://testops.example.com/project/42/test-cases/2301', project: '42'}
---
# Transfer to blocked account
## Preconditions
Sender account has sufficient balance. Recipient account status is BLOCKED.
## Steps
1. Send `POST /transfers`
- **Expected:** `422 Unprocessable Entity`
2. Check response body
1. Field `code` equals `ACCOUNT_BLOCKED`
## Expected result
API returns 422 with error code ACCOUNT_BLOCKED.
Supported TMS
| TMS | Status |
|---|---|
| Allure TestOps | ✅ |
| TestIT | 🚧 planned |
| TestRail | 🤝 contributions welcome |
Configuration
| Option | Env | Default | Description |
|---|---|---|---|
--project-id |
— | required | TMS project ID |
--endpoint |
TESTOPS_ENDPOINT |
required | Base URL of TMS |
--token |
TESTOPS_TOKEN |
required | API token |
--repo |
— | ./mirror |
Local Git repo path |
--suite-field |
TESTOPS_SUITE_FIELD |
Suite |
Custom field for folder structure |
--dry-run |
— | false | Preview changes without writing |
-v/--verbose |
— | false | Verbose logging |
Note: API endpoint paths are verified against Allure TestOps documented API. If your instance uses different paths, check
<endpoint>/swagger-ui/and update the constants inconnectors/allure_testops.py.
Roadmap
- Attachments download
- TestIT connector
- Index file (
cases/INDEX.md) with a table of all cases - Reverse import (Markdown → TMS)
License
MIT
Project details
Release history Release notifications | RSS feed
Download files
Download the file for your platform. If you're not sure which to choose, learn more about installing packages.
Source Distributions
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 testops_mirror-0.1.0-py3-none-any.whl.
File metadata
- Download URL: testops_mirror-0.1.0-py3-none-any.whl
- Upload date:
- Size: 18.3 kB
- Tags: Python 3
- Uploaded using Trusted Publishing? No
- Uploaded via: twine/6.1.0 CPython/3.13.12
File hashes
| Algorithm | Hash digest | |
|---|---|---|
| SHA256 |
200bf5fd15c3ba1d7f50c72e1ea71fa147d4d3e19c481d8bd90d0f4745db6cae
|
|
| MD5 |
34ad44d4600c98668b3f1d886cf0e2cf
|
|
| BLAKE2b-256 |
3c7954fa7039d2d9043c88e35488366627a2963a173f2b409f16d7d5c47a859c
|