Getting Started

softAssert Documentation

softAssert is an AI-powered QA platform that brings together test case management, bug tracking, regression suites, and API testing in one place. It is built for individual QA engineers and teams who want to move fast without losing confidence.

This guide covers every feature in softAssert — from creating your first project to setting up webhooks that fire into your CI/CD pipeline.

Quick Start

Get from zero to your first generated test suite in under five minutes.

  1. 1Go to /register and create a free account — no credit card required.
  2. 2From the dashboard, click "New Project" and give it a name.
  3. 3Open your project and navigate to the Generate tab.
  4. 4Describe a feature in plain English (e.g. "User login with email and password, including forgot password flow") and click Generate.
  5. 5Review the generated test cases, accept the ones you want, and they are saved to your project.
  6. 6Head to the Bugs tab to log any issues you find while testing.
  7. 7Build a Regression Suite from your tests and run it to track pass/fail.
Your Free plan includes 5 AI generations per day and up to 50 test cases per project. Upgrade to Pro for 75 generations/day and 5,000 test cases per project.

Plans & Limits

softAssert enforces per-plan limits on projects, AI generations, test cases, and bug reports. Limits reset at midnight UTC for AI generation counts.

Plan
Price
Projects
AI Generations
Test Cases
Bug Reports
Free
$0
2
5 / day
50 / project
10 / project
Pro
$15/mo
15
75 / day
5,000 / project
1,000 / project
Team
$29/user/mo
Unlimited
150 / user / day
Unlimited
Unlimited
  • AI generation count resets every 24 hours at midnight UTC.
  • Test case and bug limits are per project, not per account.
  • Upgrading takes effect immediately. Downgrading takes effect at the end of your billing cycle.
  • Exports (CSV, Excel) are available on all plans. JSON export requires Pro or Team.

Managing Projects

A project is the top-level workspace in softAssert. Everything — test cases, bugs, suites, API collections, and integrations — lives inside a project.

Creating a Project

  1. 1From the dashboard, click "New Project".
  2. 2Enter a project name (required) and optional description.
  3. 3Click "Create". You are taken to the project overview page.

Free accounts can have up to 2 projects. Pro accounts support 15. Team has no limit.

Project Overview

The project overview shows:

  • Total test cases and breakdown by status (Draft, Approved, Deprecated).
  • Open and resolved bug counts.
  • Recent activity from the project activity log.
  • Quick actions: Generate Tests, New Bug, New Suite.

Project Settings

Access project settings from the Settings tab inside any project.

Property
Type / Values
Description
Custom Rules
text
Free-form instructions the AI follows when generating test cases for this project (e.g., "always include accessibility checks", "test on mobile viewport").
Default Priority
P0–P3
Priority pre-selected when creating a new test case manually.
Modules List
comma list
A set of module/area names that appear as quick suggestions when assigning an area to a test or bug.
Bug Copy Format
template
A template string controlling how bug details are formatted when using the "Copy" button on a bug. Supports placeholders like {{title}}, {{steps}}, {{severity}}.

Areas & Modules

Areas are named sections of your product (e.g., "Authentication", "Checkout", "Notifications"). They let you group test cases and bugs by functional area and filter/report on them independently.

Creating Areas

  1. 1Open your project and go to the Areas tab.
  2. 2Click "New Area".
  3. 3Enter a name, choose a color, and optionally set a sort order.
  4. 4Click "Create".

You can then assign any test case or bug to an area using the Area field on the create/edit form. Areas can be edited, reordered, or deleted at any time. Deleting an area does not delete the tests or bugs inside it — they simply become unassigned.

Creating Test Cases

Test cases are the core unit of work in softAssert. Each describes a specific scenario to validate, with structured steps and a clear expected result.

  1. 1Open your project and go to the Tests tab.
  2. 2Click "New Test Case".
  3. 3Fill in the Title, Preconditions, Steps, and Expected Result.
  4. 4Set Priority, Category, and optionally assign an Area.
  5. 5Click "Save". The test is saved as DRAFT by default.
Test cases created via AI generation have source type AI_GENERATED and are saved directly from the Generate page. Screen-recording-derived bugs can also produce test cases with source type FROM_RECORDING.

Filtering & Searching

Use the filter bar on the Tests tab to narrow down the test case list:

  • Filter by Priority: P0, P1, P2, P3 (multiple can be selected).
  • Filter by Category: Functional, Negative, Boundary, Security, Performance, Accessibility.
  • Filter by Status: Draft, Approved, Deprecated.
  • Filter by Area: any area defined in the project.
  • Toggle "Show Archived" to include or exclude archived tests.
  • Search by keyword — matches against the test case title.

Properties Reference

Property
Type / Values
Description
title
string
Short description of what the test is verifying.
preconditions
text
State that must be true before the test can be executed (e.g., "User must be logged in").
steps
text
Numbered step-by-step instructions to execute the test.
expectedResult
text
The observable outcome if the feature is working correctly.
priority
P0–P3
P0 = blocker, P1 = high, P2 = medium, P3 = low.
category
enum
FUNCTIONAL | NEGATIVE | BOUNDARY | SECURITY | PERFORMANCE | ACCESSIBILITY
status
enum
DRAFT (default) | APPROVED | DEPRECATED
area
Area ref
Optional — the functional area this test belongs to.
sourceType
enum
MANUAL | AI_GENERATED | FROM_RECORDING — set automatically.

Version History

Every save to a test case creates a new version automatically. This gives you a full audit trail of how tests evolve over time.

  • Click the history icon on any test case to open the version drawer.
  • Each version shows a timestamp and a diff of what changed.
  • Click "Restore" on any version to roll the test case back to that state.
  • Restoring creates a new version rather than deleting intermediate ones.

Bulk Operations

Use checkboxes in the test case list to select multiple tests at once, then use the bulk action toolbar that appears.

  • Archive selected — moves tests to the archived state (hidden from the default view).
  • Unarchive selected — restores archived tests to the active list.
  • Delete selected — permanently deletes the selected test cases.
  • Change status — set DRAFT, APPROVED, or DEPRECATED on all selected tests.
Deleting test cases is permanent and cannot be undone. Prefer archiving if you may need the test cases later.

Importing Test Cases

You can import test cases in bulk into a project using the Import option on the Tests tab. The imported file should contain the test case fields (title, steps, expected result, priority, category) in a structured format. After upload, the system parses the file and creates the test cases as MANUAL source with DRAFT status.

How AI Generation Works

softAssert uses Claude (Anthropic) to generate structured test cases from a feature description. The AI takes on the persona of a senior QA engineer and produces cases with preconditions, numbered steps, expected results, priority, and category — ready to be saved directly to your project.

  1. 1Open your project and go to the Generate tab (or use the global AI Studio from the sidebar).
  2. 2Choose an input mode: Free Text, User Story, or API Spec.
  3. 3Write or paste your feature description (10–5,000 characters).
  4. 4Configure output options: count, priority floor, and which categories to include.
  5. 5Click "Generate". Results appear in seconds.
  6. 6Review each generated test case. Accept the ones you want added to the project.
  7. 7Optionally leave thumbs up/down feedback to help improve future results.

Input Modes

Property
Type / Values
Description
Free Text
mode
Describe the feature or flow in plain English. Best for early-stage or loosely-defined features.
User Story
mode
Paste a formal user story ("As a [role], I want [goal], so that [benefit]"). The AI extracts acceptance criteria to structure the tests.
API Spec
mode
Paste an OpenAPI snippet or endpoint description. The AI generates functional, negative, boundary, and security test cases for the endpoints.
Any Custom Rules set in Project Settings are automatically injected into the AI prompt for every generation in that project.

Generation Options

Property
Type / Values
Description
count
1–25
Number of test cases to generate per session.
priorityFloor
P0–P3
Minimum priority level. The AI will not generate tests below this priority.
categories
multi-select
Which test categories to include: Functional, Negative, Boundary, Security, Performance, Accessibility.

Daily AI generation limits are enforced per account, not per project. Reaching the limit returns an error; the counter resets every 24 hours at midnight UTC.

Generation History

Every generation run is saved as a session. Navigate to Generate → History inside a project (or the AI Studio history view) to see all past sessions.

  • Each session shows the input text, timestamp, token usage, and how many tests were generated.
  • You can re-open a session to review which tests were accepted.
  • Feedback ratings (thumbs up/down) are stored per session.

Creating Bugs

Bug reports in softAssert capture the full context of a defect — steps to reproduce, expected vs. actual behavior, severity, and environment. Each bug gets an auto-incrementing sequence number per project (e.g., BUG-001).

  1. 1Open your project and go to the Bugs tab.
  2. 2Click "New Bug".
  3. 3Fill in the Title, Description, Steps to Reproduce, Expected Behavior, and Actual Behavior.
  4. 4Set the Severity and assign an Area if applicable.
  5. 5Add the Environment (browser, OS, device).
  6. 6Click "Submit Bug".

Bug Properties Reference

Property
Type / Values
Description
title
string
One-line summary of the defect.
description
text
Full detail of what is broken and any relevant context.
stepsToReproduce
text
Numbered steps that reliably trigger the bug.
expectedBehavior
text
What the feature should do according to spec.
actualBehavior
text
What the feature does instead.
severity
enum
CRITICAL | HIGH | MEDIUM | LOW
status
enum
OPEN | IN_PROGRESS | RESOLVED | CLOSED | WONT_FIX
environment
string
Browser version, OS, device, screen size — any context useful for reproduction.
area
Area ref
Optional — the functional area where the bug was found.

Status Workflow

Bugs follow a linear status progression, though any status can be set directly:

OPEN  ──►  IN_PROGRESS  ──►  RESOLVED
                              └──►  CLOSED
                              └──►  WONT_FIX

AI Bug Features

Duplicate Detection

Before you submit a bug, softAssert scans your existing open bugs using AI to find semantically similar reports. If duplicates are found, they are listed so you can decide whether to merge, link, or proceed with a new report.

Severity Suggestion

Based on the bug title, description, and steps, the AI suggests a severity level (CRITICAL, HIGH, MEDIUM, or LOW). You can accept the suggestion or override it before saving.

Recording Analysis

Upload a screen recording of the bug in the "New Bug" form. The AI watches the video and automatically fills in the title, steps to reproduce, expected behavior, and actual behavior. You can edit any of the auto-filled fields before saving.

Pushing Bugs to External Systems

Once a project integration is configured (see Integrations), a Push button appears on every bug detail page. Click it to create the bug as an issue in the connected platform.

  • Severity maps to the external platform's priority field (CRITICAL → Highest, HIGH → High, etc.).
  • The bug title, description, steps, expected/actual behavior, and environment are all included.
  • Pushing is one-directional — status changes in the external tool are not automatically synced back.

Creating Regression Suites

A regression suite is a named collection of test cases that can be executed together on a schedule or on demand. Suites are the backbone of structured testing cycles — smoke tests before releases, nightly regression runs, and PR gates.

  1. 1Open your project and go to the Suites tab.
  2. 2Click "New Suite".
  3. 3Enter a name, description, and choose a cadence.
  4. 4Set a fail threshold (percentage of tests that must pass for the run to be considered passing).
  5. 5Use filters to define which test cases belong to this suite (by area, priority, category).
  6. 6Click "Create Suite".
Property
Type / Values
Description
name
string
Display name for the suite.
description
text
What this suite covers and when it should run.
cadence
enum
EVERY_PR | NIGHTLY | WEEKLY | MANUAL — informational label for CI integration.
failThreshold
number %
Minimum pass rate required for a run to be marked as passed. Default is 100%.
filters
object
Area, priority, category filters that define which tests are included in the suite.

Running Suites

  1. 1Open the suite and click "Start Run".
  2. 2A new run record is created with status IN_PROGRESS.
  3. 3Work through each test case in the run view.
  4. 4For each test, mark the result: PASSED, FAILED, BLOCKED, or SKIPPED.
  5. 5Optionally add a note to any test result.
  6. 6When all tests have a result, click "Complete Run" or mark it as Aborted to stop early.
Property
Type / Values
Description
NOT_RUN
result
Default state — test has not been executed in this run yet.
PASSED
result
Test executed and the feature behaved as expected.
FAILED
result
Test executed and the feature did not behave as expected.
BLOCKED
result
Test could not be executed due to a dependency or environment issue.
SKIPPED
result
Test was intentionally not run in this cycle.

Viewing Results

After a run is completed, the results page shows:

  • Pass rate for the run (passed tests ÷ total run tests × 100).
  • Breakdown by result status (passed, failed, blocked, skipped).
  • Which tests failed, with any notes added during execution.
  • Duration from start to completion.
  • Whether the run met the suite's fail threshold.

The suite overview page lists all historical runs and lets you track pass rate trends over time.

Exporting Results

Export a suite or run to share results with stakeholders outside softAssert.

  • CSV — plain comma-separated export, compatible with any spreadsheet tool.
  • Excel (.xlsx) — formatted workbook with separate tabs for suite summary and per-test results.
  • Export includes: test title, preconditions, steps, expected result, priority, area, result, and any notes.

Collections & Requests

softAssert has a built-in API testing module. You can define collections of HTTP requests, add assertions, use environment variables, and run requests directly from the browser.

Collections

A collection is a named group of related API requests (e.g., "Auth Endpoints", "Order API").

  1. 1Open your project and go to the API Tests tab.
  2. 2Click "New Collection" and enter a name.
  3. 3Inside the collection, click "Add Request".

Request Configuration

Property
Type / Values
Description
method
enum
GET | POST | PUT | PATCH | DELETE
url
string
Full URL or path. Supports environment variable interpolation: {{base_url}}/users.
headers
key/value
HTTP headers to send with the request. Environment variables are supported.
queryParams
key/value
Query string parameters appended to the URL.
body
string
Request body — JSON, form data, or plain text. Environment variables are supported.

Assertions

Assertions are checks that run against the response after a request is executed. Add assertions to a request to validate that the API is behaving correctly.

Property
Type / Values
Description
type
enum
status_code | body | header | response_time
target
string
For body: a JSON path (e.g., $.user.id). For header: the header name. For response_time: leave blank.
operator
enum
equals | contains | greater_than | less_than | not_equals | matches_regex
value
string
Expected value to compare against.

Example assertions:

status_code  | (no target)       | equals       | 200
body         | $.user.email      | equals       | test@example.com
header       | content-type      | contains     | application/json
response_time| (no target)       | less_than    | 500

Environments

Environments allow you to swap out variable values without editing every request. Create separate environments for Production, Staging, and Local development.

  1. 1In the API Tests tab, click "Environments".
  2. 2Click "New Environment" and give it a name (e.g., "Staging").
  3. 3Add key/value variables (e.g., base_url = https://staging.api.example.com).
  4. 4Set this environment as the default for the project, or select it per-run.

Use variables in requests with double-brace syntax: {{base_url}}, {{api_token}}. Variables are resolved at run time using the active environment.

Integrations Overview

softAssert can push bugs (and test cases) into external platforms. Each integration is configured per project and can be enabled or disabled independently.

  1. 1Open your project and go to Settings → Integrations.
  2. 2Click "Add Integration" and choose a platform.
  3. 3Fill in the required credentials (see platform sections below).
  4. 4Click "Save". The integration becomes active.
  5. 5On any bug detail page, click "Push" to send the bug to the connected platform.
Credentials are encrypted at rest. Tokens are masked on the settings page after saving — you must re-enter the token to update it.

Jira

Property
Type / Values
Description
baseUrl
string
Your Jira instance URL, e.g. https://yourcompany.atlassian.net
projectKey
string
Jira project key (visible in the URL, e.g. QA, ENG).
email
string
Your Atlassian account email address.
apiToken
string
Jira API token — generate from id.atlassian.com → Security → API Tokens.

Severity maps to Jira priority: CRITICAL → Highest, HIGH → High, MEDIUM → Medium, LOW → Low.

GitHub Issues

Property
Type / Values
Description
owner
string
GitHub username or org name (the first part of the repo URL).
repo
string
Repository name.
token
string
Personal access token with repo scope — generate from GitHub → Settings → Developer Settings.

Bugs are created as GitHub Issues. Severity is added as an issue label.

Linear

Property
Type / Values
Description
apiKey
string
Linear personal API key — generate from Linear → Settings → API.
teamId
string
The Linear team ID to create issues in (visible in Linear URL or API).

Bugs are created as Linear issues. Priority is mapped from softAssert severity.

Azure DevOps

Property
Type / Values
Description
organizationUrl
string
Your Azure DevOps org URL, e.g. https://dev.azure.com/yourorg
project
string
Azure DevOps project name.
token
string
Personal access token with Work Items read+write scope.

Azure DevOps supports pushing both bugs and test cases. Bugs become work items of type Bug.

Setting Up Webhooks

Webhooks send an HTTP POST to a URL of your choice when events occur in softAssert. Use them to trigger CI/CD pipelines, post Slack notifications, or sync with other tools.

  1. 1Open your project and go to Settings → Webhooks.
  2. 2Click "New Webhook".
  3. 3Enter the destination URL.
  4. 4Select which events should trigger this webhook.
  5. 5Optionally enter a secret for HMAC signature verification.
  6. 6Choose a platform: Custom, Slack, or Discord.
  7. 7Click "Create". The webhook is immediately active.
Property
Type / Values
Description
url
string
The HTTPS endpoint that will receive POST requests from softAssert.
events
string[]
Which events trigger this webhook (see Event Types below).
secret
string
Optional. Used to compute an HMAC-SHA256 signature sent in the X-softAssert-Signature header.
platform
enum
CUSTOM | SLACK | DISCORD. Slack and Discord receive pre-formatted message payloads.
enabled
boolean
Toggle the webhook on or off without deleting it.

Event Types

Property
Type / Values
Description
run.completed
event
Fires when a regression suite run is marked as COMPLETED. Payload includes run summary, pass rate, and suite info.
run.failed
event
Fires when a run completes and the pass rate is below the suite's fail threshold.
bug.created
event
Fires when a new bug report is submitted. Payload includes bug title, severity, area, and project.
bug.status_changed
event
Fires when a bug's status is updated. Payload includes old and new status.

Signature Verification

When a secret is set, every webhook request includes an X-softAssert-Signature header. This is an HMAC-SHA256 hex digest of the raw request body, signed with your secret. Verify it in your endpoint to confirm the request came from softAssert.

// Node.js example
import crypto from 'crypto'

function verifyWebhook(rawBody: string, secret: string, signature: string) {
  const expected = crypto
    .createHmac('sha256', secret)
    .update(rawBody)
    .digest('hex')
  return crypto.timingSafeEqual(
    Buffer.from(signature),
    Buffer.from(expected)
  )
}
Always use a timing-safe comparison (e.g., crypto.timingSafeEqual) rather than a plain string equality check to prevent timing attacks.

Plans Overview

softAssert uses Stripe for all payment processing. Your card details are never stored on softAssert servers — they are handled entirely by Stripe.

Plan
Price
Projects
AI Generations
Test Cases
Bug Reports
Free
$0
2
5 / day
50 / project
10 / project
Pro
$15/mo
15
75 / day
5,000 / project
1,000 / project
Team
$29/user/mo
Unlimited
150 / user / day
Unlimited
Unlimited
  • All plans include CSV export, suite execution, version history, and AI duplicate detection.
  • Pro adds Excel export, custom project rules, screenshot annotation, and priority email support.
  • Team adds Jira/Linear/GitHub push integrations, audit log, and Slack priority support.

Upgrading

  1. 1Go to Settings → Billing from the sidebar.
  2. 2Click "Upgrade to Pro" or "Upgrade to Team".
  3. 3You are redirected to Stripe Checkout to complete payment.
  4. 4After payment, your plan upgrades immediately — no need to log out and back in.
Pro plans come with a 14-day money-back guarantee. If you are not satisfied in the first 14 days, email us for a full refund — no questions asked.

Customer Portal

The Stripe customer portal lets you manage every aspect of your subscription without contacting support.

  • Update your payment method or add a backup card.
  • View and download past invoices.
  • Cancel your subscription (downgrade takes effect at end of billing cycle).
  • Switch between monthly and annual billing (contact us for annual).
  1. 1Go to Settings → Billing.
  2. 2Click "Manage Subscription".
  3. 3You are redirected to the Stripe portal. Changes take effect immediately (or at cycle end for downgrades).