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:

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)