TestIntel
Copyright (c) 2026 OctoBlue Technologies LLC. All rights reserved.
AI-powered QA assistant for test strategy, test generation, automation code, impact analysis, and CI/CD configuration. Integrates with Jira, Xray, and Zephyr Scale.
This software is proprietary. See LICENSE for terms.
Quick Start
1. Install
pip install -e .
2. Set environment variables
Required — Admin key (secures your instance):
$env:TESTINTEL_ADMIN_KEY="your-secret-admin-key"
Without this, TestIntel runs in dev mode (no login required, full admin access). Set this before sharing with anyone.
For teams, the admin creates invite codes from Settings → Users. Team members redeem the code for a personal API key on first login.
Required — AI provider (choose one):
Anthropic Claude (default):
$env:ANTHROPIC_API_KEY="your-anthropic-key"
OpenAI:
$env:OPENAI_API_KEY="your-openai-key"
Then set ai.provider: openai in config.yaml.
AWS Bedrock:
$env:AWS_ACCESS_KEY_ID="your-access-key"
$env:AWS_SECRET_ACCESS_KEY="your-secret-key"
$env:AWS_DEFAULT_REGION="us-east-1"
Then set ai.provider: bedrock in config.yaml.
3. Configure config.yaml
Edit config.yaml to set your AI provider, storage, and integrations. Only configure the sections you need — unconfigured integrations are automatically hidden in the UI.
4. Set up integrations (optional)
Jira:
$env:JIRA_EMAIL="your-email"
$env:JIRA_API_TOKEN="your-jira-api-token"
Generate a token at https://id.atlassian.com/manage-profile/security/api-tokens
Xray (for Jira Cloud):
$env:XRAY_CLIENT_ID="your-client-id"
$env:XRAY_CLIENT_SECRET="your-client-secret"
Generate at Jira → Apps → Xray → Settings → API Keys. See docs/xray-integration.md.
Zephyr Scale:
$env:ZEPHYR_API_TOKEN="your-zephyr-jwt-token"
Generate at https://id.atlassian.com/manage-profile/security/api-tokens (separate from Jira token). See docs/zephyr-integration.md.
GitHub (for live repo context and impact analysis):
$env:GITHUB_TOKEN="your-github-token"
Then set code_context.provider: github in config.yaml.
5. Discover your schema
If you configured Jira, Xray, or Zephyr, run the schema discovery to auto-detect your instance's issue types, priorities, statuses, and custom fields:
testintel discover
This writes testintel_data/schema.yaml which all providers use for field mapping. Run this once during setup, or again if your Jira configuration changes.
Running the API / Web UI
Option 1: Direct
uvicorn testintel.main:app --reload
Option 2: Docker Compose
docker compose up -d
Option 3: Docker
docker run -p 8000:8000 \
-v ./testintel_data:/app/testintel_data \
-v ./config.yaml:/app/config.yaml \
-e ANTHROPIC_API_KEY=your-key \
-e TESTINTEL_ADMIN_KEY=your-admin-key \
ghcr.io/octoblue-tech/testintel:latest
Then open http://localhost:8000 in your browser.
The Web UI has five tabs:
- Chat — AI-powered QA assistant with repo/workspace context
- Staging — review queue for AI-generated tests before promotion to inventory
- Inventory — test case management with filters, export, and Xray/Zephyr sync buttons
- Reporting — test metrics dashboard with results history, health score, and flaky test detection
- Project — project management, knowledge base, and integration configuration
Admin settings (security, AI provider, API keys) are accessible via the Settings link in the header (admin only).
Xray and Zephyr sync buttons appear automatically in the Inventory tab when those integrations are configured.
CLI Usage
Project management
testintel project-create my-project --org my-org --repo owner/repo
testintel project-list # (* = active)
testintel project-use my-project
testintel project-delete my-project
Chat
Use the Web UI for the best chat experience (markdown rendering, suggested prompts, "Add to Staging"):
uvicorn testintel.main:app --reload
# Then open http://localhost:8000
Test inventory
testintel inventory # list all tests
testintel inventory --status Fail --priority P1
testintel inventory-export --format html
testintel inventory-export --format csv
Requirements
testintel req-upload ./requirements.csv # CSV, JSON, XML, TXT, MD
testintel req-import # import from Jira (all project issues)
testintel req-import --tickets HR-1,HR-6 # specific tickets
testintel req-import --sprint current # current sprint
Test results
testintel results-import ./results.xml # JUnit XML
History
testintel history # recent snapshots
testintel history-export # HTML dashboard
testintel history-snapshot # manual snapshot
Knowledge base
testintel kb-upload ./docs/spec.md --scope my-project
testintel kb-list --scope my-project
testintel kb-delete my-project/spec.md
Xray sync
Xray sync is available via the Web UI Sync bar (Inventory tab) or API:
curl -X POST http://localhost:8000/sync/xray/pull -H "x-api-key: your-key"
curl -X POST http://localhost:8000/sync/xray/push -H "x-api-key: your-key"
curl -X POST http://localhost:8000/sync/xray/push-results -H "x-api-key: your-key"
curl -X POST http://localhost:8000/sync/xray/pull-results -H "x-api-key: your-key"
Zephyr Scale sync
Zephyr sync is available via the Web UI Sync bar (Inventory tab) or API:
curl -X POST http://localhost:8000/sync/zephyr/pull -H "x-api-key: your-key"
curl -X POST http://localhost:8000/sync/zephyr/push -H "x-api-key: your-key"
curl -X POST http://localhost:8000/sync/zephyr/push-results -H "x-api-key: your-key"
curl -X POST http://localhost:8000/sync/zephyr/pull-results -H "x-api-key: your-key"
Schema discovery
testintel discover # scan Jira/Xray/Zephyr schema
Configuration
config.yaml controls all providers:
ai:
provider: anthropic # anthropic | openai | bedrock
anthropic:
model: claude-sonnet-4-20250514
api_key_env_var: ANTHROPIC_API_KEY
openai:
model: gpt-4o
api_key_env_var: OPENAI_API_KEY
bedrock:
region: us-east-1
model_id: anthropic.claude-3-sonnet-20240229-v1:0
storage:
provider: local # local | s3
knowledge_base:
storage_provider: local # local | s3
auth:
provider: api_key
session:
history_limit: 20
code_context:
provider: github # local | github
github:
token_env_var: GITHUB_TOKEN
jira:
url: https://yourorg.atlassian.net
email_env_var: JIRA_EMAIL
token_env_var: JIRA_API_TOKEN
project_key: PROJ
xray:
client_id_env_var: XRAY_CLIENT_ID
client_secret_env_var: XRAY_CLIENT_SECRET
project_key: PROJ
zephyr:
api_token_env_var: ZEPHYR_API_TOKEN
base_url: https://api.zephyrscale.smartbear.com/v2
project_key: PROJ
Only include the sections you need. Unconfigured integrations are ignored.
AWS Infrastructure (optional)
For S3 storage and Bedrock access, deploy the dev stack:
aws cloudformation deploy --template-file infra/dev.yaml --stack-name testintel-dev --capabilities CAPABILITY_NAMED_IAM
Project Structure
testintel/
├── main.py # FastAPI app entry point
├── config.py # Config loader (all providers)
├── license.py # License validation (OctoBlue server + 24h cache)
├── providers/
│ ├── base.py # Abstract provider interfaces
│ ├── ai/ # Anthropic, OpenAI, Bedrock
│ ├── storage/ # S3, Local
│ ├── auth/ # API key auth
│ ├── code/ # GitHub
│ └── integrations/ # Jira, Xray, Zephyr Scale
├── core/
│ ├── auth.py # Auth helpers
│ ├── chat.py # Chat service (Jira-aware)
│ ├── context.py # Context builder (selective loading)
│ ├── coverage.py # Test coverage gap analysis
│ ├── flaky.py # Flaky test detection + AI analysis
│ ├── health_score.py # Health score (0-100, 4 weighted components)
│ ├── history.py # Historical snapshots
│ ├── history_report.py # HTML history/dashboard report
│ ├── intent.py # Intent detection
│ ├── inventory.py # Test inventory + duplicate detection
│ ├── inventory_report.py # HTML/CSV inventory export
│ ├── log.py # Centralized structured logger
│ ├── openapi.py # OpenAPI/Swagger spec parser
│ ├── output.py # Structured output handler
│ ├── project.py # Project models
│ ├── project_manager.py # Project CRUD
│ ├── prompts.py # Prompt templates (mobile/BDD-aware)
│ ├── repo_scanner.py # Repo file scanner for automation matching
│ ├── requirements.py # Requirements file parser
│ ├── results_ingestion.py # JUnit/Cucumber/Allure parser
│ ├── results_processor.py # Results matching + inventory update
│ ├── retry.py # Exponential backoff for external APIs
│ ├── s3_watcher.py # S3 bucket watcher for result files
│ ├── schema.py # Schema loader (discovered mappings)
│ ├── secrets.py # Secrets provider (local file + env var)
│ ├── security.py # Rate limiting, upload size, security middleware
│ ├── session.py # Chat session management
│ ├── stack.py # Stack/framework detection
│ ├── staging.py # Staging queue (review before inventory)
│ └── type_detect.py # File type detection for AI output
├── api/routes/
│ ├── chat.py # Chat endpoints
│ ├── files.py # File download/save endpoints
│ ├── help.py # Help/onboarding endpoints
│ ├── history.py # History/reporting endpoints
│ ├── inventory.py # Inventory endpoints
│ ├── knowledge.py # KB endpoints
│ ├── projects.py # Project endpoints
│ ├── requirements.py # Requirements endpoints
│ ├── results.py # Results endpoints
│ ├── settings.py # Settings endpoints
│ ├── staging.py # Staging endpoints
│ └── sync.py # Xray/Zephyr/Jira sync endpoints
├── cli/
│ ├── main.py # All CLI commands
│ └── discover.py # Schema discovery
├── web/static/ # Web UI (HTML, JS, CSS)
├── docs/ # Internal integration docs
└── scripts/ # Helper scripts (Jira export)
infra/dev.yaml # CloudFormation dev stack
docs/ # User-facing docs (xray, zephyr, deployment, etc.)
scripts/ # Top-level helper scripts (reset, setup)