Skip to main content

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 in connectors/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


Download files

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

Source Distributions

No source distribution files available for this release.See tutorial on generating distribution archives.

Built Distribution

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

testops_mirror-0.1.0-py3-none-any.whl (18.3 kB view details)

Uploaded Python 3

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

Hashes for testops_mirror-0.1.0-py3-none-any.whl
Algorithm Hash digest
SHA256 200bf5fd15c3ba1d7f50c72e1ea71fa147d4d3e19c481d8bd90d0f4745db6cae
MD5 34ad44d4600c98668b3f1d886cf0e2cf
BLAKE2b-256 3c7954fa7039d2d9043c88e35488366627a2963a173f2b409f16d7d5c47a859c

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