From 7aba8ab7f81b0054ec3d596dff2c3e88a22bc5bd Mon Sep 17 00:00:00 2001 From: TvisharajiK Date: Thu, 12 Feb 2026 12:38:49 +0530 Subject: [PATCH 01/14] API testing new changes - p1 --- .../api-testing-assertion-tree.md | 142 ++++++++++++++++++ .../api-testing-custom-assertions.md | 129 ++++++++++++++++ .../running-keploy/api-testing-edit-suites.md | 85 +++++++++++ .../running-keploy/api-testing-fixing-ai.md | 132 ++++++++++++++++ .../api-testing-sharing-reports.md | 73 +++++++++ .../version-4.0.0-sidebars.json | 4 + 6 files changed, 565 insertions(+) create mode 100644 versioned_docs/version-4.0.0/running-keploy/api-testing-assertion-tree.md create mode 100644 versioned_docs/version-4.0.0/running-keploy/api-testing-custom-assertions.md create mode 100644 versioned_docs/version-4.0.0/running-keploy/api-testing-edit-suites.md create mode 100644 versioned_docs/version-4.0.0/running-keploy/api-testing-fixing-ai.md create mode 100644 versioned_docs/version-4.0.0/running-keploy/api-testing-sharing-reports.md diff --git a/versioned_docs/version-4.0.0/running-keploy/api-testing-assertion-tree.md b/versioned_docs/version-4.0.0/running-keploy/api-testing-assertion-tree.md new file mode 100644 index 000000000..4925e25da --- /dev/null +++ b/versioned_docs/version-4.0.0/running-keploy/api-testing-assertion-tree.md @@ -0,0 +1,142 @@ +--- +id: api-testing-assertion-tree +title: Assertion Tree +sidebar_label: Assertion Tree +description: Visualize and manage your entire test flow in a structured tree format +tags: + - API testing + - test visualization + - assertion tree + - test flow + - automation +keywords: + - test suite visualization + - assertion tree + - API flow + - test step editor + - visual test builder +--- + +import ProductTier from '@site/src/components/ProductTier'; + + + +## Assertion Tree + +The **Assertion Tree** allows you to visualize and manage your entire test suite in a structured, hierarchical format. + +Instead of viewing tests as isolated steps, the Assertion Tree gives you a complete flow-level perspective — including requests, responses, and assertions — in one interactive interface. + +--- + +## How to Access the Assertion Tree + +1. Navigate to an individual **Test Suite** +2. Click on the **"Visualize"** button +3. The system renders the full test suite in a **tree format** + +--- + +## What You Can See + +The Assertion Tree provides a visual representation of: + +- All test steps in execution order +- Request details for each step +- Attached assertions +- Response validations +- Parent-child relationships between steps (if applicable) + +Each node in the tree represents a test step and contains: + +- Request configuration +- Associated assertions +- Execution dependencies + +This makes it easier to understand how your test suite behaves as a complete workflow. + +--- + +## What You Can Do + +The Assertion Tree is fully interactive. You can: + +### 1. View Complete Flow +Understand the entire API workflow from start to finish without switching between screens. + +--- + +### 2. Inspect Assertions Inline +Quickly see which assertions are attached to each step, including: + +- Status code validations +- JSON validations +- Header validations +- Schema validations +- Custom function validations + +--- + +### 3. Add a New Step in the Flow + +You can insert a new test step directly within the tree. + +This allows you to: + +- Expand an existing workflow +- Add conditional validation steps +- Introduce additional API calls +- Build multi-step integration flows + +The new step becomes part of the structured execution sequence. + +--- + +### 4. Modify Existing Steps + +From the tree view, you can: + +- Edit request configurations +- Update assertions +- Adjust execution order +- Refine validation logic + +All changes reflect directly in the test suite. + +--- + +## Why Use the Assertion Tree? + +The Assertion Tree is particularly useful when: + +- Your test suite contains multiple API calls +- You are testing end-to-end workflows +- Business logic spans multiple requests +- You need clarity on how validations are structured +- You want a visual representation instead of linear editing + +It transforms test management from a flat list into a structured execution graph. + +--- + +## Typical Use Cases + +- Authentication → Resource Creation → Validation → Cleanup flows +- Multi-step payment processing validations +- E-commerce checkout journeys +- Webhook-triggered event testing +- Integration testing across services + +--- + +## Best Practices + +- Use the tree view to design full workflows before adding assertions +- Keep each step focused on a single responsibility +- Attach assertions at the correct step level +- Review flow dependencies to avoid unintended execution order +- Use visualization to debug failing multi-step tests faster + +--- + +The Assertion Tree enables you to design, inspect, and extend complex API workflows with clarity and precision — all from a single visual interface. diff --git a/versioned_docs/version-4.0.0/running-keploy/api-testing-custom-assertions.md b/versioned_docs/version-4.0.0/running-keploy/api-testing-custom-assertions.md new file mode 100644 index 000000000..7a934d0ec --- /dev/null +++ b/versioned_docs/version-4.0.0/running-keploy/api-testing-custom-assertions.md @@ -0,0 +1,129 @@ +--- +id: api-testing-custom-assertions +title: Custom Assertions +sidebar_label: Custom Assertions +description: Define powerful validation rules for your API tests in Keploy +tags: + - API testing + - assertions + - validation + - schema validation + - automation +keywords: + - status code validation + - JSON assertions + - header validation + - schema validation + - custom functions + +--- + +import ProductTier from '@site/src/components/ProductTier'; + + + +Custom assertions allow you to precisely validate API responses beyond basic status checks. + +Keploy supports the following assertion categories: + +| Scenario | Recommended Assertion | +|----------|----------------------| +| Exact status code validation | Status Code | +| Accept any success response | Status Code Class | +| Partial JSON validation | JSON Contains | +| Strict field validation | JSON Equal | +| Response structure consistency | Schema | +| Dynamic value comparison | Custom Function | +| Validate only important fields | Selected Fields | +| Security header enforcement | Header Exists / Header Equal | + + +## For specific Selected Fields + +### Selected Fields +Allows you to validate only specific parts of a response instead of the entire body. + +Useful when: +- Response includes dynamic metadata +- You want to ignore volatile fields (timestamps, request IDs, etc.) +- Only certain business-critical fields matter + +## Custom Functions (Advanced Validation) + +For complex validation logic, Keploy supports custom functions inside assertions. + +Custom functions allow you to: +- Write JavaScript expressions +- Perform conditional validation +- Compare multiple fields +- Validate dynamic calculations +- Enforce business rules + +### Example Use Cases +- Validate `totalAmount = sum(lineItems)` +- Ensure timestamp is within last 5 minutes +- Compare response field with environment variable +- Validate custom encryption or hashing logic + +### Example: E-commerce Order Validation + +Consider an e-commerce API that returns order details. You want to validate that the total amount equals the sum of all line items plus tax. + +**API Response:** +```json +{ + "orderId": "ORD-12345", + "items": [ + { "name": "Laptop", "price": 1200.00, "quantity": 1 }, + { "name": "Mouse", "price": 25.50, "quantity": 2 } + ], + "subtotal": 1251.00, + "tax": 125.10, + "total": 1376.10, + "timestamp": "2026-02-11T10:30:00Z" +} +``` + +**Custom Function for Total Validation:** +```javascript +// Validate that total = subtotal + tax +function validateOrderTotal(response) { + const data = JSON.parse(response.body); + const expectedTotal = data.subtotal + data.tax; + const actualTotal = data.total; + + return { + passed: Math.abs(expectedTotal - actualTotal) < 0.01, // Handle floating point precision + message: `Expected total ${expectedTotal}, but got ${actualTotal}` + }; +} + +// Validate that subtotal matches sum of line items +function validateSubtotal(response) { + const data = JSON.parse(response.body); + const calculatedSubtotal = data.items.reduce((sum, item) => { + return sum + (item.price * item.quantity); + }, 0); + + return { + passed: Math.abs(calculatedSubtotal - data.subtotal) < 0.01, + message: `Calculated subtotal ${calculatedSubtotal}, but API returned ${data.subtotal}` + }; +} +``` + +**Usage in Keploy:** +1. Navigate to your test step editor +2. Add a new assertion +3. Select "Custom Function" as assertion type +4. Paste your custom function code +5. The function will execute during test runs and validate your business logic + +## Best Practices + +- **Prefer Schema validation** for dynamic APIs +- **Use JSON Equal** only when strict comparison is necessary +- **Avoid over-validating** volatile fields +- **Use Custom Functions** for business logic validation +- **Combine multiple assertions** for stronger test reliability +- **Keep assertions focused and readable** diff --git a/versioned_docs/version-4.0.0/running-keploy/api-testing-edit-suites.md b/versioned_docs/version-4.0.0/running-keploy/api-testing-edit-suites.md new file mode 100644 index 000000000..bafc361f8 --- /dev/null +++ b/versioned_docs/version-4.0.0/running-keploy/api-testing-edit-suites.md @@ -0,0 +1,85 @@ +--- +id: api-testing-edit-suites +title: Edit Test Suites +sidebar_label: Edit Test Suites +description: Editing test suites for API tests +tags: + - API testing + - webhooks + - integration + - custom validation + - policy enforcement +keywords: + - webhook + - API testing + - PreExecute + - PostExecute + - external validation + - custom logic +--- + +import ProductTier from '@site/src/components/ProductTier'; + + + +This guide will help you edit test suites in Keploy to customize your API testing workflow. + +## Editing Test Suite Details + +To modify test suite settings like name and description: + +1. Navigate to your test suite in the Keploy dashboard +2. Click on the **three dots (⋯)** helper menu in the test suite you want to modify +3. Select **"Edit Suite"** from the dropdown menu +4. Update the suite name, description, and other details as needed +5. Save your changes + +## Editing Individual Test Steps + +To modify specific test requests and responses: + +1. Go to the individual test step within your test suite +2. Click on **"Edit Step"** to open the test editor +3. You can now modify: + - Request details (URL, headers, body, parameters) + - HTTP method + - Request payload + +### Adding and Editing Assertions + +Assertions help validate your API responses. To add or edit assertions: + +1. In the test step editor, navigate to the assertions section +2. Add new assertions or modify existing ones +3. You can validate: + - Response status codes + - Response body content + - Response headers + +### Custom Functions in Assertions + +Keploy supports custom functions for advanced assertion logic. You can: + +- Create custom validation functions +- Use JavaScript expressions for complex validations +- Reference external validation logic + +For detailed information on custom functions, [reference here](#). +### Creating and Using Variables + +Variables allow you to create reusable values across your test suite: + +1. **URL Base Path Variables**: Define base URLs that can be reused across multiple tests +2. **Environment Variables**: Set different values for different testing environments +3. **Dynamic Variables**: Create variables that change during test execution + +## How to Create Variables + +For in detail usage of variables refer here : + +## Best Practices + +- **Use descriptive names**: Give your test suites and individual tests clear, descriptive names that explain their purpose +- **Group related tests**: Organize tests logically within suites (e.g., user authentication, payment processing, etc.) +- **Keep suites focused**: Each test suite should test a specific feature or workflow +- **Test multiple aspects**: Include assertions for status codes, response structure, and business logic diff --git a/versioned_docs/version-4.0.0/running-keploy/api-testing-fixing-ai.md b/versioned_docs/version-4.0.0/running-keploy/api-testing-fixing-ai.md new file mode 100644 index 000000000..de618d8b7 --- /dev/null +++ b/versioned_docs/version-4.0.0/running-keploy/api-testing-fixing-ai.md @@ -0,0 +1,132 @@ +--- +id: api-testing-fix-with-ai +title: Fix with AI +sidebar_label: Fix with AI +description: Automatically normalize and repair failing test suites using AI +tags: + - API testing + - AI automation + - test normalization + - test maintenance + - debugging +keywords: + - AI test fixing + - normalize test suite + - failing tests + - automated test repair + - intelligent assertions +--- + +import ProductTier from '@site/src/components/ProductTier'; + + + +## Fix with AI + +**Fix with AI** helps you automatically repair and normalize failing test suites using intelligent analysis. + +Instead of manually editing requests, assertions, or schema mismatches, you can provide instructions to the AI, and it will adjust the suite accordingly. + +This significantly reduces test maintenance effort when APIs evolve. + +--- + +## When to Use Fix with AI + +Use this feature when: + +- A test suite fails after backend changes +- Response fields were renamed or restructured +- Dynamic fields are causing frequent assertion failures +- Schema mismatches occur +- You want to normalize outdated validations +- You want to clean up over-strict assertions + +--- + +## How It Works + +1. Navigate to a **Failing Test Suite** +2. Click **Fix with AI** +3. Provide instructions describing what needs to be corrected + +Example instructions: +- "Normalize dynamic fields like timestamps and request IDs" +- "Update schema based on latest API response" +- "Ignore volatile metadata fields" +- "Fix assertion mismatches based on new response structure" +- "Relax strict JSON equality checks" + +4. Submit your instructions +5. AI analyzes the failure and updates the test suite accordingly + +--- + +## What the AI Can Modify + +The AI can intelligently update: + +- JSON assertions +- Schema validations +- Header validations +- Status code expectations +- Dynamic field handling +- Selected field configurations +- Request payload mismatches + +It ensures the suite reflects the current API behavior while preserving intended validation logic. + +--- + +## Example Scenario + +### Problem +Your API now returns: + +```json +{ + "id": 123, + "email": "user@example.com", + "createdAt": "2026-02-11T10:30:00Z" +} +``` + +Previously, your test expected strict equality including `createdAt`. + +The test fails due to timestamp variance. + +### Instruction to AI +"Normalize dynamic fields like `createdAt` and ignore timestamp differences." + +### Result +AI updates the assertion to: + +- Use Schema validation instead of strict equality +- Exclude or normalize the `createdAt` field +- Keep critical business validations intact + +The test suite now passes without weakening important checks. + +--- + +## Normalization Behavior + +When you ask the AI to "normalize" a suite, it may: + +- Replace strict JSON Equal with Schema validation +- Convert full-body comparison into Selected Fields +- Remove volatile fields from assertions +- Adjust regex for dynamic headers +- Update expected status codes if API behavior changed intentionally + +Normalization focuses on making tests stable without reducing meaningful validation. + +--- + +## Best Practices + +- **Be specific in your instructions** +- **Clearly mention which fields should be ignored or updated** +- **Review AI-generated changes before finalizing** +- **Use normalization for dynamic fields, not business logic errors** +- **Keep critical validations strict** \ No newline at end of file diff --git a/versioned_docs/version-4.0.0/running-keploy/api-testing-sharing-reports.md b/versioned_docs/version-4.0.0/running-keploy/api-testing-sharing-reports.md new file mode 100644 index 000000000..e3387e775 --- /dev/null +++ b/versioned_docs/version-4.0.0/running-keploy/api-testing-sharing-reports.md @@ -0,0 +1,73 @@ +--- +id: api-testing-sharing-reports +title: Sharing Reports +sidebar_label: Sharing Reports +description: Share API test execution reports securely within your workspace +tags: + - API testing + - reports + - collaboration + - workspace + - access control +keywords: + - internal report sharing + - workspace collaboration + - API test results + - team access + - execution reports +--- + +import ProductTier from '@site/src/components/ProductTier'; + + + +## Sharing Reports + +Keploy allows you to securely share test execution reports with members inside your workspace. + +## How Report Sharing Works + +Reports can be shared in two ways: + +### 1. Share with Existing Workspace Members + +1. Navigate to a completed **Test Run** +2. Open the execution report +3. Click the **Share** option +4. Select a team member from your workspace +5. Confirm sharing + +The selected user will gain access to view the report inside their dashboard. + + +### 2. Add a New User and Share + +If the person is not yet part of your workspace: + +1. Click **Add User** +2. Enter their details +3. Add them to your company workspace +4. Share the report with them + +Once added, they become a workspace member and can access shared reports based on permissions. + + +## What Shared Reports Include + +When you share a report, the recipient can view: + +### Execution Summary +- Total test cases executed +- Passed / Failed count +- Execution duration +- Environment details +- Step-Level Results +- Request & Response Details + +## Best Practices + +- Share reports instead of exporting logs +- Add relevant team members directly from the dashboard +- Maintain proper role-based access control +- Review assertion-level failures before escalating issues +- Remove access when no longer required diff --git a/versioned_sidebars/version-4.0.0-sidebars.json b/versioned_sidebars/version-4.0.0-sidebars.json index 74b2f5a79..b6cfb8963 100644 --- a/versioned_sidebars/version-4.0.0-sidebars.json +++ b/versioned_sidebars/version-4.0.0-sidebars.json @@ -170,6 +170,10 @@ "running-keploy/run-ai-generated-api-tests", "running-keploy/api-testing-cicd", "running-keploy/api-testing-webhook", + "running-keploy/api-testing-edit-suites", + "running-keploy/api-testing-custom-assertions", + "running-keploy/api-testing-assertion-tree", + "running-keploy/api-testing-sharing-reports", "running-keploy/api-testing-auth-setup", { "type": "doc", From c756bcbce76d69054e564c939bb263e3f9647546 Mon Sep 17 00:00:00 2001 From: TvisharajiK Date: Fri, 13 Feb 2026 14:51:22 +0530 Subject: [PATCH 02/14] 1st level edits --- .../running-keploy/api-testing-add-suite.md | 66 ++ .../api-testing-adding-labels.md | 412 +++++++++++ .../api-testing-buggy-suites.md | 209 ++++++ .../api-testing-bulk-assertions.md | 175 +++++ .../api-testing-edit-assertions.md | 667 ++++++++++++++++++ .../api-testing-filter-suites.md | 108 +++ .../api-testing-generation-history.md | 212 ++++++ .../running-keploy/api-testing-local-agent.md | 46 ++ .../api-testing-mark-unbuggy.md | 235 ++++++ .../running-keploy/api-testing-run-report.md | 374 ++++++++++ .../api-testing-running-selective.md | 379 ++++++++++ .../api-testing-schema-coverage.md | 363 ++++++++++ .../api-testing-suite-settings.md | 604 ++++++++++++++++ .../version-4.0.0-sidebars.json | 15 + 14 files changed, 3865 insertions(+) create mode 100644 versioned_docs/version-4.0.0/running-keploy/api-testing-add-suite.md create mode 100644 versioned_docs/version-4.0.0/running-keploy/api-testing-adding-labels.md create mode 100644 versioned_docs/version-4.0.0/running-keploy/api-testing-buggy-suites.md create mode 100644 versioned_docs/version-4.0.0/running-keploy/api-testing-bulk-assertions.md create mode 100644 versioned_docs/version-4.0.0/running-keploy/api-testing-edit-assertions.md create mode 100644 versioned_docs/version-4.0.0/running-keploy/api-testing-filter-suites.md create mode 100644 versioned_docs/version-4.0.0/running-keploy/api-testing-generation-history.md create mode 100644 versioned_docs/version-4.0.0/running-keploy/api-testing-local-agent.md create mode 100644 versioned_docs/version-4.0.0/running-keploy/api-testing-mark-unbuggy.md create mode 100644 versioned_docs/version-4.0.0/running-keploy/api-testing-run-report.md create mode 100644 versioned_docs/version-4.0.0/running-keploy/api-testing-running-selective.md create mode 100644 versioned_docs/version-4.0.0/running-keploy/api-testing-schema-coverage.md create mode 100644 versioned_docs/version-4.0.0/running-keploy/api-testing-suite-settings.md diff --git a/versioned_docs/version-4.0.0/running-keploy/api-testing-add-suite.md b/versioned_docs/version-4.0.0/running-keploy/api-testing-add-suite.md new file mode 100644 index 000000000..18175d167 --- /dev/null +++ b/versioned_docs/version-4.0.0/running-keploy/api-testing-add-suite.md @@ -0,0 +1,66 @@ +--- +id: api-testing-add-suites +title: Adding New Test Suites +description: Guide to adding to new Suites using "Add New" +sidebar_label: Adding New Suite +tags: + - api-testing + - test-organization + - test-suite + - test-management +--- +# Adding a Test Suite + +In this guide, we will walk through the process of adding a test suite in Keploy. Users can either manually provide the details for the test suite or directly import a curl command to create one. + +## Steps to Add a Test Suite + +1. **Click on the Plus Button** + - Navigate to the test suite section in the Keploy interface. + - Click on the `+` button to add a new test suite. + +2. **Provide Test Suite Details** + - Fill in the following fields: + - **Name**: Enter a unique name for the test suite. + - **Details**: Provide a brief description of the test suite. + - **Request**: Specify the request details, such as the HTTP method, URL, headers, and body. + - **Associations**: Define any associations or dependencies related to the test suite. + +3. **Import a Curl Command (Optional)** + - If you have a curl command, you can directly import it to create the test suite. + - Paste the curl command in the provided input field. + - Keploy will automatically parse the curl command and populate the test suite details. + +4. **Save the Test Suite** + - Once all the details are filled in, click on the `Save` button to create the test suite. + +## Example + +### Manual Entry +```json +{ + "name": "User Authentication", + "details": "Tests the login functionality.", + "request": { + "method": "POST", + "url": "https://api.example.com/login", + "headers": { + "Content-Type": "application/json" + }, + "body": { + "username": "test_user", + "password": "secure_password" + } + }, + "associations": ["auth-service", "user-database"] +} +``` + +### Importing a Curl Command +```bash +curl -X POST https://api.example.com/login \ + -H "Content-Type: application/json" \ + -d '{"username": "test_user", "password": "secure_password"}' +``` + +By following these steps, you can easily create and manage test suites in Keploy. \ No newline at end of file diff --git a/versioned_docs/version-4.0.0/running-keploy/api-testing-adding-labels.md b/versioned_docs/version-4.0.0/running-keploy/api-testing-adding-labels.md new file mode 100644 index 000000000..274ed1fb4 --- /dev/null +++ b/versioned_docs/version-4.0.0/running-keploy/api-testing-adding-labels.md @@ -0,0 +1,412 @@ +--- +id: api-testing-adding-labels +title: Adding Labels to Test Suites +description: Guide to creating and assigning labels to test suites individually or in bulk +sidebar_label: Adding Labels +tags: + - api-testing + - test-organization + - labels + - test-management +--- + +# Adding Labels to Test Suites + +Labels help you organize, categorize, and filter your test suites effectively. Keploy provides flexible labeling options that allow you to add labels to individual test suites or multiple suites at once. + +## Overview + +The labeling system in Keploy offers: + +- **Individual Labeling**: Add labels to specific test suites +- **Bulk Labeling**: Apply labels to multiple suites simultaneously +- **Label Management**: Create, edit, and delete custom labels +- **Filtering**: Use labels to filter and organize your test collection + +## Adding Labels to Individual Test Suites + +### Method 1: Using the Three Dots Menu + +1. **Navigate to Test Suites** + - Go to your Keploy dashboard + - Click on the **Test Suites** section + +2. **Access Suite Options** + - Locate the test suite you want to label + - Click the **three dots (⋮)** menu next to the test suite name + - The menu appears in the top-right area of each suite row + +3. **Select Add Label Option** + - From the dropdown menu, click **"Add Label"** or **"Manage Labels"** + - A label management dialog will open + +### Method 2: From Suite Details Page + +1. **Open Test Suite** + - Click on the test suite name to open its details page + +2. **Find Label Section** + - Look for the **"Labels"** or **"Tags"** section in the suite header + - Click the **"+ Add Label"** button + +## Label Assignment Interface + +When you open the label assignment dialog, you'll see: + +### Existing Labels Section +``` +🏷️ Available Labels +├── 📊 Priority +│ ├── high-priority +│ ├── medium-priority +│ └── low-priority +├── 🌍 Environment +│ ├── production +│ ├── staging +│ └── development +├── 👥 Team +│ ├── team-frontend +│ ├── team-backend +│ └── team-qa +└── 🔍 Type + ├── smoke-test + ├── regression + └── integration +``` + +### Assigning Existing Labels + +1. **Browse Categories** + - Expand label categories to see available options + - Use the search box to find specific labels quickly + +2. **Select Labels** + - Click on labels to select them + - Selected labels will be highlighted or marked with a checkmark ✓ + - You can select multiple labels from different categories + +3. **Apply Labels** + - Review your selections in the "Selected Labels" preview + - Click **"Apply Labels"** to assign them to the test suite + +## Creating New Labels + +### Creating During Assignment + +1. **Open Label Dialog** + - Follow the steps above to open the label assignment interface + +2. **Create New Label** + - Click **"Create New Label"** or the **"+"** button + - Enter label details in the creation form + +3. **Label Creation Form** + ``` + Label Name: [smoke-critical] + Category: [Type] (dropdown) + Color: [🔴] (color picker) + Description: [Critical smoke tests that must pass] + ``` + +4. **Save and Apply** + - Click **"Create Label"** to save the new label + - The new label will automatically be selected for the current suite + - Click **"Apply Labels"** to complete the assignment + +### Pre-creating Labels + +You can also create labels in advance: + +1. **Access Label Management** + - Go to **Settings** → **Label Management** + - Or click **"Manage All Labels"** from any label dialog + +2. **Create Label Categories** + ``` + Category: Priority + Labels: critical, high, medium, low + + Category: Environment + Labels: prod, staging, dev, local + + Category: Team + Labels: frontend, backend, qa, devops + ``` + +## Bulk Label Assignment + +### Using Checkbox Selection + +1. **Select Multiple Suites** + - Navigate to the Test Suites list + - Use checkboxes to select multiple test suites + - Or click **"Select All"** to choose all visible suites + +2. **Access Bulk Actions** + - After selecting suites, a bulk actions toolbar appears + - Click **"Add Labels"** or **"Manage Labels"** button + +3. **Bulk Label Dialog** + ``` + Selected Suites: 5 suites + ├── User Authentication Suite + ├── Payment Processing Suite + ├── Order Management Suite + ├── Notification Suite + └── Report Generation Suite + + Actions: + ☐ Add labels (append to existing) + ☐ Replace labels (remove existing, add new) + ☐ Remove specific labels + ``` + +4. **Choose Action Type** + - **Add Labels**: Append new labels to existing ones + - **Replace Labels**: Remove all existing labels and add new ones + - **Remove Labels**: Remove specific labels from all selected suites + +5. **Select Labels** + - Choose from existing labels or create new ones + - Preview shows which suites will be affected + - Click **"Apply to Selected Suites"** + +## Label Management Best Practices + +### Naming Conventions + +1. **Use Consistent Formatting** + ``` + ✅ Good Examples: + - team-frontend + - priority-high + - env-production + - type-smoke-test + + ❌ Avoid: + - TeamFrontend + - HIGH_PRIORITY + - prod env + - smoke test type + ``` + +2. **Category-Based Organization** + ``` + Priority: critical, high, medium, low + Environment: production, staging, development + Type: smoke, regression, integration, e2e + Team: frontend, backend, qa, devops + Status: active, deprecated, experimental + ``` + +### Label Hierarchy + +Organize labels in a logical hierarchy: + +``` +🏢 Organization Level +├── 🌍 Environment +│ ├── production +│ ├── staging +│ └── development +├── 👥 Team Ownership +│ ├── team-auth +│ ├── team-payments +│ └── team-notifications +├── 📊 Test Classification +│ ├── type-smoke +│ ├── type-regression +│ └── type-integration +└── ⚡ Priority Level + ├── priority-p0 + ├── priority-p1 + └── priority-p2 +``` + +## Using Labels for Organization + +### Filtering by Labels + +1. **Filter Interface** + ``` + Filters: [Environment: staging] [Team: backend] [Priority: high] + + Results: 12 test suites found + ├── ✅ User Service API Tests (staging, backend, high) + ├── ✅ Payment Gateway Tests (staging, backend, high) + └── ✅ Order Processing Tests (staging, backend, high) + ``` + +2. **Combine Multiple Filters** + - Use AND logic: Show suites with ALL selected labels + - Use OR logic: Show suites with ANY selected labels + - Exclude labels: Show suites WITHOUT specific labels + +### Search by Labels + +``` +Search Examples: +- label:high-priority +- label:team-frontend OR label:team-backend +- label:smoke-test AND label:production +- -label:deprecated (exclude deprecated suites) +``` + +## Advanced Label Operations + +### Conditional Labeling + +Apply labels based on conditions: + +``` +IF suite.name CONTAINS "auth" + THEN add labels: [team-auth, security] + +IF suite.environment == "production" + THEN add labels: [critical, monitored] + +IF suite.last_run < 30_days_ago + THEN add labels: [stale, review-needed] +``` + +### Label Automation + +Set up automatic labeling rules: + +1. **Auto-labeling on Creation** + ```yaml + rules: + - if: suite_name matches "smoke*" + labels: [type-smoke, priority-high] + - if: created_by == "ci-pipeline" + labels: [automated, ci-generated] + ``` + +2. **Schedule-based Labeling** + ```yaml + scheduled_rules: + - schedule: "daily" + condition: last_run > 7_days + action: add_label "needs-attention" + ``` + +## Label Analytics and Reporting + +### Label Distribution + +View how labels are distributed across your test suites: + +``` +Label Usage Report +================== +📊 Priority Labels: +├── high-priority: 45 suites (23%) +├── medium-priority: 89 suites (45%) +└── low-priority: 63 suites (32%) + +🌍 Environment Labels: +├── production: 67 suites (34%) +├── staging: 78 suites (39%) +└── development: 52 suites (27%) + +👥 Team Labels: +├── team-frontend: 34 suites (17%) +├── team-backend: 56 suites (28%) +└── team-qa: 23 suites (12%) +``` + +### Label-based Success Rates + +Track test success rates by label: + +``` +Success Rate by Label +==================== +🏷️ high-priority: 94% success rate +🏷️ team-backend: 89% success rate +🏷️ production: 97% success rate +🏷️ smoke-test: 92% success rate +``` + +## Troubleshooting + +### Common Issues + +1. **Cannot Add Labels** + - **Check Permissions**: Ensure you have edit access to the test suite + - **Verify Suite Status**: Make sure the suite isn't currently running + - **Browser Issues**: Clear cache and refresh the page + +2. **Labels Not Appearing** + - **Refresh View**: Reload the test suites page + - **Check Filters**: Verify that filters aren't hiding labeled suites + - **Sync Issues**: Wait a moment for changes to propagate + +3. **Bulk Operations Failing** + - **Selection Limit**: Reduce the number of selected suites + - **Permission Issues**: Ensure you have bulk edit permissions + - **Server Load**: Try again during lower usage periods + +### Best Practices for Troubleshooting + +1. **Start Small** + - Test labeling with one suite first + - Gradually increase to bulk operations + +2. **Verify Changes** + - Check that labels appear correctly after assignment + - Test filtering with newly added labels + +3. **Document Issues** + - Note any error messages for support + - Record steps that led to the problem + +## Integration Examples + +### API Usage + +```bash +# Add labels via API +curl -X POST "https://api.keploy.io/test-suites/{suite-id}/labels" \ + -H "Authorization: Bearer your-token" \ + -H "Content-Type: application/json" \ + -d '{ + "labels": ["high-priority", "team-backend", "production"] + }' + +# Bulk label assignment +curl -X POST "https://api.keploy.io/test-suites/bulk-labels" \ + -H "Authorization: Bearer your-token" \ + -H "Content-Type: application/json" \ + -d '{ + "suite_ids": ["suite-1", "suite-2", "suite-3"], + "action": "add", + "labels": ["regression", "nightly-run"] + }' +``` + +### CI/CD Integration + +```yaml +# GitHub Actions example +- name: Label Test Suites + run: | + # Label suites based on changed files + if [[ "${{ github.event_name }}" == "pull_request" ]]; then + keploy label add --suites $AFFECTED_SUITES --labels "pr-validation" + fi + + # Label based on branch + if [[ "${{ github.ref }}" == "refs/heads/main" ]]; then + keploy label add --suites $ALL_SUITES --labels "main-branch" + fi +``` + +## Related Features + +- **[Test Suite Management](./api-testing-edit-suites.md)**: Edit and organize test suites +- **[Selective Test Execution](./api-testing-running-selective.md)**: Run tests using label filters +- **[Test Reports](./api-testing-sharing-reports.md)**: Generate reports filtered by labels +- **[Custom Assertions](./api-testing-custom-assertions.md)**: Create assertions for labeled suites + +Labels are a powerful organizational tool that help you maintain order in large test collections and enable efficient test management workflows. \ No newline at end of file diff --git a/versioned_docs/version-4.0.0/running-keploy/api-testing-buggy-suites.md b/versioned_docs/version-4.0.0/running-keploy/api-testing-buggy-suites.md new file mode 100644 index 000000000..2c012d35b --- /dev/null +++ b/versioned_docs/version-4.0.0/running-keploy/api-testing-buggy-suites.md @@ -0,0 +1,209 @@ +--- +id: api-testing-buggy-suites +title: Buggy Test Suites +description: Guide to viewing and debugging failed test suites generated by Keploy +sidebar_label: Buggy Suites +tags: + - api-testing + - debugging + - test-failures + - troubleshooting +--- + +# Buggy Test Suites + +When Keploy generates tests, some test cases might fail due to various reasons such as endpoint issues, data mismatches, or API changes. The buggy test suites page helps you identify, understand, and fix these failing tests. + +## Viewing Buggy Test Suites + +Navigate to the test suites generated with the red esclamation icon to view all test suites that contain failing test cases. Each buggy suite displays: + +- **Suite Name**: The name of the test suite containing failed tests +- **Test Steps**: Steps in the suite +- **Failure Reason**: Reason why the test suite is buggy + +## Understanding Failure Reasons + +For each buggy test suite, you can find the detailed explanations of why tests are marked as buggy. Common failure reasons include: + +### 1. Endpoint Not Found (404 Errors) + +**Example Failure Reason:** +``` +The response returned a 404 status code for the 'Create Owner' step, indicating the endpoint '/owners' was not found. This contradicts the documented cURL examples and schema, which show that this endpoint should exist and return a 201 status code upon successful creation. +``` + +**What this means:** +- The API endpoint that was working during recording is no longer available +- The endpoint URL might have changed +- The API server might be down or misconfigured + +**How to fix:** +1. Verify the endpoint URL is correct +2. Check if the API server is running +3. Review API documentation for any endpoint changes +4. Update the test suite if the endpoint has moved + +### 2. Schema Validation Failures + +**Example Failure Reason:** +``` +Response schema validation failed. Expected property 'id' of type 'number' but received 'string'. The API response structure has changed from the recorded version. +``` + +**What this means:** +- The API response format has changed since recording +- Data types don't match the expected schema +- New required fields might have been added + +### 3. Authentication Issues + +**Example Failure Reason:** +``` +Authentication failed with 401 Unauthorized. The API key or token used during recording may have expired or been revoked. +``` + +**What this means:** +- API credentials have expired or changed +- Authentication method has been updated +- Permission levels may have changed + +## Assertion Failures + +The buggy suites page provides detailed assertion failure information to help you understand exactly what went wrong: + +### Response Status Assertions +```yaml +Expected: 201 Created +Actual: 404 Not Found +Assertion: status_code_equals +Message: The endpoint returned an unexpected status code +``` + +### Response Body Assertions +```yaml +Expected: {"id": 123, "name": "John Doe", "email": "john@example.com"} +Actual: {"error": "User not found", "code": 404} +Assertion: json_body_equals +Message: Response body structure completely different from expected +``` + +### Response Time Assertions +```yaml +Expected: < 2000ms +Actual: 5432ms +Assertion: response_time_less_than +Message: Response time exceeded acceptable threshold +``` + +### Header Assertions +```yaml +Expected: "application/json" +Actual: "text/html" +Assertion: content_type_equals +Message: Content-Type header mismatch indicates server error +``` + +## Debugging Actions + +For each buggy test case, you can take several debugging actions: + +### 1. View Full Test Details +Click on any failed test to see: +- Complete request details (URL, headers, body) +- Full response details (status, headers, body) +- All assertion results with expected vs actual values +- Test execution timeline + +### 2. Compare with Recorded Version +View the side-by-side comparison between: +- **Original Recording**: The request/response captured during recording +- **Current Execution**: The actual request/response during test execution +- **Differences Highlighted**: Visual indicators showing what changed + +### 3. Manual Test Execution +Test the endpoint manually to verify: +```bash +# Example manual cURL test +curl -X POST \ + 'https://api.example.com/owners' \ + -H 'Content-Type: application/json' \ + -H 'Authorization: Bearer your-token' \ + -d '{ + "name": "John Doe", + "email": "john@example.com" + }' +``` + +### 4. Update Test Expectations +If the API behavior has legitimately changed: +1. **Re-record the test**: Capture new expected behavior +2. **Update assertions**: Modify expected values to match new API +3. **Add new test cases**: Cover additional scenarios if needed + +## Common Debugging Scenarios + +### Scenario 1: Environment Differences +**Problem**: Tests pass in development but fail in staging/production + +**Solution**: +- Check environment-specific configurations +- Verify database state and test data +- Review environment variables and secrets +- Ensure consistent API versions across environments + +### Scenario 2: Timing Issues +**Problem**: Tests fail intermittently due to timing + +**Solution**: +- Increase response timeout thresholds +- Add delays between dependent API calls +- Review database transaction handling +- Consider eventual consistency in distributed systems + +### Scenario 3: Data Dependencies +**Problem**: Tests fail because required data doesn't exist + +**Solution**: +- Set up proper test data fixtures +- Use data factory patterns for test preparation +- Implement database seeding for test environments +- Review test isolation and cleanup procedures + +## Best Practices for Fixing Buggy Suites + +1. **Start with Environment Verification** + - Ensure all required services are running + - Verify database connectivity and state + - Check configuration and environment variables + +2. **Analyze Failure Patterns** + - Group similar failures together + - Identify if failures are systematic or random + - Look for common root causes across multiple tests + +3. **Fix Root Causes, Not Symptoms** + - Address underlying API issues rather than just updating tests + - Collaborate with development teams on API stability + - Document breaking changes and migration paths + +4. **Maintain Test Quality** + - Regularly review and update test suites + - Remove obsolete or flaky tests + - Add new tests for changed functionality + +5. **Monitor Test Health** + - Set up alerts for test failure rates + - Track test suite reliability over time + - Review test results as part of deployment process + +## Getting Help + +If you're unable to resolve buggy test suites: + +1. **Check Documentation**: Review API documentation for recent changes +2. **Contact Support**: Reach out to the development team for API-related issues +3. **Community Forums**: Ask questions in Keploy community channels +4. **Share Test Details**: Provide complete test execution logs when seeking help + +Remember, buggy test suites often indicate real issues with your API or environment. Use them as an early warning system to maintain API quality and reliability. \ No newline at end of file diff --git a/versioned_docs/version-4.0.0/running-keploy/api-testing-bulk-assertions.md b/versioned_docs/version-4.0.0/running-keploy/api-testing-bulk-assertions.md new file mode 100644 index 000000000..8ea649bc5 --- /dev/null +++ b/versioned_docs/version-4.0.0/running-keploy/api-testing-bulk-assertions.md @@ -0,0 +1,175 @@ +--- +id: api-testing-bulk-assertions +title: Bulk Assertions and Schema Validation +description: Guide to performing bulk assertions across multiple endpoints, methods, and status codes +sidebar_label: Bulk Assertions +tags: + - api-testing + - bulk-assertions + - schema-assertions + - test-validation + - test-management +--- + +# Bulk Assertions and Schema Validation + +This guide explains how to perform bulk assertions in Keploy, allowing you to validate multiple test cases across different endpoints, HTTP methods, and status codes simultaneously. + +## What are Bulk Assertions? + +Bulk assertions enable you to apply validation rules across multiple test suites at once, saving time and ensuring consistency in your API testing. Instead of creating assertions one by one, you can select multiple tests and apply the same assertion criteria to all of them. + +## What are Schema Assertions? + +Schema assertions allow you to validate the structure and format of API responses. You can choose specific fields from the entire response body to assert, ensuring that your API returns data in the expected format with the correct data types and required fields. + +## How to Perform Bulk Assertions + +### 1. Filter Your Test Suites + +First, use the filtering options to narrow down the tests you want to assert: +- **Filter by Endpoint**: Select specific API endpoints +- **Filter by HTTP Method**: Choose methods like GET, POST, PUT, DELETE, etc. +- **Filter by Status Code**: Filter by response status codes (2xx, 4xx, 5xx, etc.) +- **Filter by Test Suite**: Select specific test suite collections + +### 2. Select Tests for Bulk Assertion + +- Once filtered, you can select multiple test cases +- Use checkboxes to select individual tests or select all filtered tests +- The selection can span across different endpoints and methods + +### 3. Choose Assertion Fields + +From the entire response body, you can choose which fields to assert: +- **Response Headers**: Validate specific headers +- **Response Body Fields**: Select individual fields from the JSON response +- **Status Codes**: Assert expected status codes +- **Response Time**: Validate performance metrics +- **Data Types**: Ensure fields have correct types (string, number, boolean, etc.) +- **Required Fields**: Verify that mandatory fields are present + +### 4. Apply Schema Assertions + +Schema assertions validate the structure of your API responses: +- **Field Presence**: Ensure required fields exist in the response +- **Data Type Validation**: Verify that fields have the correct data type +- **Format Validation**: Check formats like email, URL, date, etc. +- **Nested Object Validation**: Validate complex nested structures +- **Array Validation**: Assert on array properties and elements + +### 5. Save and Execute + +- Review the selected assertions +- Apply the assertions to all selected test cases +- Execute the tests to validate against the defined schema + +## Example Use Cases + +### Example 1: Asserting User Endpoints +``` +Filter by: +- Endpoint: /api/v1/users/* +- HTTP Method: GET +- Status Code: 200 + +Bulk Assert: +- Response contains: id, name, email +- Data types: id (number), name (string), email (string) +- Email format validation +``` + +### Example 2: Error Response Validation +``` +Filter by: +- Status Code: 4xx, 5xx +- HTTP Method: POST, PUT, DELETE + +Bulk Assert: +- Response contains: error, message, statusCode +- Data types: error (boolean), message (string), statusCode (number) +- Required fields: error, message +``` + +### Example 3: Performance Testing +``` +Filter by: +- Endpoint: /api/v1/products +- HTTP Method: GET + +Bulk Assert: +- Response time: < 200ms +- Status Code: 200 +- Response contains: products (array), total (number) +``` + +### Example 4: Schema Validation for Multiple Endpoints +``` +Select Multiple Endpoints: +- /api/v1/users +- /api/v1/products +- /api/v1/orders + +Schema Assertions: +- All responses have: timestamp, success, data +- timestamp format: ISO 8601 +- success type: boolean +- data type: object or array +``` + +## Benefits of Bulk Assertions + +- **Time Efficiency**: Apply assertions to multiple tests simultaneously +- **Consistency**: Ensure uniform validation across similar endpoints +- **Maintainability**: Update assertions for multiple tests at once +- **Comprehensive Testing**: Validate complex scenarios across different endpoints +- **Schema Compliance**: Ensure API responses adhere to defined schemas +- **Reduced Errors**: Less manual work means fewer mistakes + +## Schema Assertion Features + +### Supported Validations + +1. **Type Checking** + - String, Number, Boolean, Object, Array, Null + - Custom type definitions + +2. **Format Validation** + - Email, URL, UUID, Date, Time, DateTime + - Custom regex patterns + +3. **Range Validation** + - Minimum and maximum values for numbers + - String length constraints + - Array size limits + +4. **Required Fields** + - Mark fields as mandatory + - Conditional requirements based on other fields + +5. **Nested Object Validation** + - Deep validation of complex structures + - Array of objects validation + +6. **Custom Assertions** + - Define custom validation logic + - Combine multiple assertion rules + +## Best Practices + +1. **Start with Filters**: Use filters to group similar tests before applying bulk assertions +2. **Incremental Assertions**: Start with basic assertions and add more complex ones gradually +3. **Review Before Applying**: Always review the selected tests before applying bulk assertions +4. **Use Schema Templates**: Create reusable schema templates for common response structures +5. **Version Control**: Keep track of schema changes across API versions +6. **Document Assertions**: Add descriptions to complex assertions for team clarity + +## Tips for Effective Schema Assertions + +- **Keep schemas DRY**: Reuse common schema patterns across different endpoints +- **Test edge cases**: Include assertions for empty arrays, null values, and optional fields +- **Validate error responses**: Ensure error messages follow a consistent schema +- **Use realistic data**: Test with production-like data for accurate validation +- **Regular updates**: Update schemas when API contracts change + +By leveraging bulk assertions and schema validation, you can ensure comprehensive API testing while minimizing manual effort and maintaining high test coverage across your application. \ No newline at end of file diff --git a/versioned_docs/version-4.0.0/running-keploy/api-testing-edit-assertions.md b/versioned_docs/version-4.0.0/running-keploy/api-testing-edit-assertions.md new file mode 100644 index 000000000..7e6d7451e --- /dev/null +++ b/versioned_docs/version-4.0.0/running-keploy/api-testing-edit-assertions.md @@ -0,0 +1,667 @@ +--- +id: api-testing-edit-assertions +title: Editing Test Suites and Custom Assertions +description: Guide to editing test suites with custom variables and assertion functions +sidebar_label: Edit Assertions +tags: + - api-testing + - edit-assertions + - custom-variables + - custom-functions + - test-management +--- + +# Editing Test Suites and Custom Assertions + +This guide explains how to edit test suites in Keploy, including adding custom variables to URLs and request bodies, and creating custom assertion functions for advanced test validation. + +## Overview + +Keploy provides powerful editing capabilities that allow you to customize your test suites with variables and custom assertion functions. You can define variables that are either global (available across all test suites) or local (specific to a single test suite), and create reusable assertion functions to validate complex scenarios. + +## Editing a Test Suite + +### Accessing Edit Mode + +1. **Navigate to Test Suite** + - Go to your test suite list + - Locate the test suite you want to edit + +2. **Edit Individual Test Steps** + - Within the test suite, you can edit individual test steps + - Click on "Edit Step" for the specific step you want to modify + +## Adding Variables + +### Variable Types + +Keploy supports two types of variables: + +1. **Global Variables**: Available across all test suites in your project +2. **Local Variables**: Scoped to the current test suite only + +### Adding Variables to URL Path + +Variables can be used in URL paths to make tests more flexible and reusable: + +#### Example: Using Variables in URL + +**Before:** +``` +GET https://api.example.com/users/12345 +``` + +**After (with variable):** +``` +GET https://api.example.com/users/{{userId}} +``` + +#### Steps to Add URL Variables + +1. **Edit the Test Step** + - Click on "Edit Step" for the test you want to modify + - Locate the URL/endpoint field + +2. **Insert Variable Syntax** + - Use double curly braces: `{{variableName}}` + - Example: `/api/v1/users/{{userId}}/orders/{{orderId}}` + +3. **Define Variable Value** + - Choose variable scope: Global or Local + - Set the variable value + - Save the variable + +### Adding Variables to Request Body + +Variables can also be used in request payloads: + +#### Example: Using Variables in Request Body + +**Before:** +```json +{ + "username": "john_doe", + "email": "john@example.com", + "age": 30 +} +``` + +**After (with variables):** +```json +{ + "username": "{{username}}", + "email": "{{userEmail}}", + "age": {{userAge}} +} +``` + +#### Steps to Add Body Variables + +1. **Edit the Request Body** + - In the test step editor, locate the request body section + - Identify fields you want to make variable + +2. **Replace Values with Variables** + - Use `{{variableName}}` syntax + - For strings: `"{{variableName}}"` + - For numbers/booleans: `{{variableName}}` (without quotes) + +3. **Define Variable Values** + - Create the variable in the variables panel + - Set as Global or Local + - Assign the value + +### Variable Management Interface + +``` +┌──────────────────────────────────────────────────────────────────┐ +│ Edit Test Step │ +├──────────────────────────────────────────────────────────────────┤ +│ │ +│ URL: https://api.example.com/users/{{userId}} │ +│ │ +│ Request Body: │ +│ { │ +│ "name": "{{userName}}", │ +│ "email": "{{userEmail}}", │ +│ "role": "{{userRole}}" │ +│ } │ +│ │ +│ ┌────────────────────────────────────────────────────────────┐ │ +│ │ Variables [+ Add Variable]│ │ +│ ├────────────────────────────────────────────────────────────┤ │ +│ │ │ │ +│ │ Name: userId │ │ +│ │ Value: 12345 │ │ +│ │ Scope: ○ Global ● Local │ │ +│ │ │ │ +│ │ Name: userName │ │ +│ │ Value: John Doe │ │ +│ │ Scope: ● Global ○ Local │ │ +│ │ │ │ +│ │ Name: userEmail │ │ +│ │ Value: john@example.com │ │ +│ │ Scope: ● Global ○ Local │ │ +│ │ │ │ +│ │ Name: userRole │ │ +│ │ Value: admin │ │ +│ │ Scope: ○ Global ● Local │ │ +│ │ │ │ +│ └────────────────────────────────────────────────────────────┘ │ +│ │ +│ [Cancel] [Save Step] │ +│ │ +└──────────────────────────────────────────────────────────────────┘ +``` + +### Creating Custom Variables + +#### Local Variables + +1. **Click "+ Add Variable"** + - In the variables panel, click to add a new variable + +2. **Configure Local Variable** + - **Name**: Enter the variable name (e.g., `userId`) + - **Value**: Set the variable value (e.g., `12345`) + - **Scope**: Select "Local" radio button + - **Description**: Optional description for documentation + +3. **Use in Test Step** + - Reference using `{{variableName}}` + - Local variables are only available in the current test suite + +#### Global Variables + +1. **Click "+ Add Variable"** + - Add a new variable in the variables panel + +2. **Configure Global Variable** + - **Name**: Enter the variable name (e.g., `baseUrl`) + - **Value**: Set the variable value (e.g., `https://api.example.com`) + - **Scope**: Select "Global" radio button + - **Description**: Document the variable's purpose + +3. **Availability** + - Global variables are available across all test suites + - Useful for common values like API endpoints, tokens, etc. + +### Dynamic Variables + +Use dynamic variables for special values: +- `{{$timestamp}}`: Current timestamp +- `{{$randomInt}}`: Random integer +- `{{$randomString}}`: Random string +- `{{$uuid}}`: Random UUID +- `{{$currentDate}}`: Current date +- `{{$randomEmail}}`: Random email address + +## Custom Assertions + +### What are Custom Assertions? + +Custom assertions allow you to define complex validation logic beyond simple field comparisons. You can create JavaScript functions to validate responses in sophisticated ways. + +### Assertion Types + +1. **Built-in Assertions**: Standard assertions (equals, contains, greater than, etc.) +2. **Global Functions**: Reusable custom functions available across all tests +3. **Custom Functions**: One-off functions specific to a test step + +### Adding Custom Assertion Functions + +#### Using Global Functions + +1. **Navigate to Assertions Section** + - In the test step editor, locate the assertions panel + - Click "+ Add Assertion" + +2. **Select Global Function** + - Choose "Use Global Function" option + - Select from available global functions + - Configure function parameters if needed + +#### Example: Using Global Function + +``` +┌──────────────────────────────────────────────────────────────────┐ +│ Assertions [+ Add Assertion]│ +├──────────────────────────────────────────────────────────────────┤ +│ │ +│ Assertion 1: │ +│ Function: validateEmail [Global] │ +│ Field: response.body.email │ +│ Expected: Valid email format │ +│ │ +│ Assertion 2: │ +│ Function: checkPriceRange [Global] │ +│ Field: response.body.price │ +│ Min: 0 │ +│ Max: 1000 │ +│ │ +└──────────────────────────────────────────────────────────────────┘ +``` + +#### Writing Custom Functions + +1. **Add Custom Assertion** + - Click "+ Add Assertion" + - Select "Write Custom Function" + +2. **Write Function Logic** + - Write JavaScript code to validate the response + - Access response data via function parameters + - Return true for pass, false for fail + +3. **Save to Global Functions (Optional)** + - After writing the function, you can save it + - Click "Save to Global Functions" + - Name the function for reuse + - Add description and documentation + +### Custom Function Interface + +``` +┌──────────────────────────────────────────────────────────────────┐ +│ Add Custom Assertion │ +├──────────────────────────────────────────────────────────────────┤ +│ │ +│ Function Type: │ +│ ○ Use Global Function │ +│ ● Write Custom Function │ +│ │ +│ Function Code: │ +│ ┌────────────────────────────────────────────────────────────┐ │ +│ │ function customAssertion(response, expected) { │ │ +│ │ // Access response data │ │ +│ │ const actualValue = response.body.data.length; │ │ +│ │ │ │ +│ │ // Custom validation logic │ │ +│ │ if (actualValue >= expected.minLength && │ │ +│ │ actualValue <= expected.maxLength) { │ │ +│ │ return { │ │ +│ │ passed: true, │ │ +│ │ message: "Array length is within range" │ │ +│ │ }; │ │ +│ │ } │ │ +│ │ │ │ +│ │ return { │ │ +│ │ passed: false, │ │ +│ │ message: `Expected length between ${expected.minLength}│ │ +│ │ and ${expected.maxLength}, got ${actualValue}`│ │ +│ │ }; │ │ +│ │ } │ │ +│ └────────────────────────────────────────────────────────────┘ │ +│ │ +│ Expected Parameters: │ +│ { │ +│ "minLength": 1, │ +│ "maxLength": 100 │ +│ } │ +│ │ +│ ☑ Save to Global Functions │ +│ Function Name: validateArrayLength │ +│ Description: Validates array length is within specified range │ +│ │ +│ [Test Function] [Cancel] [Add Assertion] │ +│ │ +└──────────────────────────────────────────────────────────────────┘ +``` + +### Custom Function Examples + +#### Example 1: Email Validation + +```javascript +function validateEmail(response) { + const email = response.body.email; + const emailRegex = /^[^\s@]+@[^\s@]+\.[^\s@]+$/; + + return { + passed: emailRegex.test(email), + message: emailRegex.test(email) + ? "Valid email format" + : `Invalid email: ${email}` + }; +} +``` + +#### Example 2: Date Range Validation + +```javascript +function validateDateRange(response, expected) { + const responseDate = new Date(response.body.createdAt); + const startDate = new Date(expected.startDate); + const endDate = new Date(expected.endDate); + + const isInRange = responseDate >= startDate && responseDate <= endDate; + + return { + passed: isInRange, + message: isInRange + ? "Date is within range" + : `Date ${responseDate} is outside range ${startDate} to ${endDate}` + }; +} +``` + +#### Example 3: Complex Object Validation + +```javascript +function validateUserObject(response, expected) { + const user = response.body.user; + const errors = []; + + // Check required fields + if (!user.id) errors.push("Missing user.id"); + if (!user.email) errors.push("Missing user.email"); + if (!user.name) errors.push("Missing user.name"); + + // Check field types + if (typeof user.id !== 'number') errors.push("user.id must be a number"); + if (typeof user.email !== 'string') errors.push("user.email must be a string"); + + // Check field formats + if (user.email && !user.email.includes('@')) { + errors.push("user.email must be valid email"); + } + + // Check expected values + if (expected.role && user.role !== expected.role) { + errors.push(`Expected role ${expected.role}, got ${user.role}`); + } + + return { + passed: errors.length === 0, + message: errors.length === 0 + ? "User object is valid" + : errors.join('; ') + }; +} +``` + +#### Example 4: Response Time Validation + +```javascript +function validateResponseTime(response, expected) { + const responseTime = response.time; // milliseconds + const maxTime = expected.maxResponseTime; + + return { + passed: responseTime <= maxTime, + message: responseTime <= maxTime + ? `Response time ${responseTime}ms is acceptable` + : `Response time ${responseTime}ms exceeds limit of ${maxTime}ms` + }; +} +``` + +#### Example 5: Custom Business Logic + +```javascript +function validateOrderTotal(response, expected) { + const order = response.body.order; + const items = order.items; + + // Calculate expected total + let calculatedTotal = 0; + for (let item of items) { + calculatedTotal += item.price * item.quantity; + } + + // Add tax + calculatedTotal += calculatedTotal * (order.taxRate || 0); + + // Add shipping + calculatedTotal += order.shippingCost || 0; + + // Compare with response total + const difference = Math.abs(calculatedTotal - order.total); + const tolerance = expected.tolerance || 0.01; + + return { + passed: difference <= tolerance, + message: difference <= tolerance + ? `Order total ${order.total} is correct` + : `Order total mismatch: expected ${calculatedTotal}, got ${order.total}` + }; +} +``` + +## Managing Global Functions + +### Viewing Global Functions + +1. **Navigate to Global Functions** + - Go to Settings or Test Management + - Click on "Global Functions" or "Function Library" + +2. **Browse Functions** + - View all saved global functions + - See function descriptions and usage examples + - Check function parameters + +### Creating Global Functions + +1. **Click "+ New Global Function"** + - Open the global function editor + +2. **Define Function** + - **Name**: Unique function name + - **Description**: Purpose and usage + - **Parameters**: Expected input parameters + - **Code**: Function implementation + - **Examples**: Usage examples + +3. **Save Function** + - Function becomes available across all test suites + - Can be used in any assertion + +### Editing Global Functions + +1. **Select Function to Edit** + - Find the function in the global functions list + - Click "Edit" + +2. **Modify Function** + - Update code, parameters, or description + - Test the changes + +3. **Save Changes** + - Updated function is available immediately + - Existing tests using the function are updated + +### Deleting Global Functions + +1. **Select Function** + - Find the function to delete + - Click "Delete" + +2. **Confirm Deletion** + - Warning: Check if function is used in existing tests + - Confirm deletion + +## Complete Workflow Example + +### Scenario: Testing User Registration + +1. **Edit Test Suite** + - Click "Edit Suite" on the user registration test + +2. **Edit Step: Create User** + - Click "Edit Step" on the POST /api/v1/users request + +3. **Add Variables to Request Body** + ```json + { + "username": "{{newUsername}}", + "email": "{{newUserEmail}}", + "password": "{{newUserPassword}}", + "age": {{newUserAge}} + } + ``` + +4. **Define Local Variables** + - `newUsername`: "test_user_{{$timestamp}}" (Local) + - `newUserEmail`: "test{{$randomInt}}@example.com" (Local) + - `newUserPassword`: "SecurePass123!" (Local) + - `newUserAge`: 25 (Local) + +5. **Add Global Variable** + - `apiBaseUrl`: "https://api.example.com" (Global) + - Update URL to: `{{apiBaseUrl}}/v1/users` + +6. **Add Custom Assertions** + + **Assertion 1: Use Global Function** + - Function: `validateEmail` + - Field: `response.body.email` + + **Assertion 2: Custom Function** + ```javascript + function validateNewUser(response, expected) { + const user = response.body; + + // Check user was created with correct data + if (user.username !== expected.username) { + return { passed: false, message: "Username mismatch" }; + } + + // Check user ID was generated + if (!user.id || typeof user.id !== 'number') { + return { passed: false, message: "Invalid user ID" }; + } + + // Check password is not returned + if (user.password) { + return { passed: false, message: "Password should not be in response" }; + } + + // Check timestamps + if (!user.createdAt) { + return { passed: false, message: "Missing createdAt timestamp" }; + } + + return { passed: true, message: "User created successfully" }; + } + ``` + + **Assertion 3: Save Custom Function to Global** + - Click "Save to Global Functions" + - Name: `validateNewUser` + - Description: "Validates user creation response" + +7. **Save Test Step** + - All changes are saved + - Variables and assertions are active + +8. **Run Test** + - Variables are substituted with values + - Custom assertions are executed + - Results show pass/fail with custom messages + +## Best Practices + +### Variable Management + +1. **Use Global Variables for Common Values** + - API base URLs + - Authentication tokens + - Environment-specific settings + - Common test data + +2. **Use Local Variables for Test-Specific Data** + - Unique identifiers + - Test case-specific values + - Temporary data + +3. **Naming Conventions** + - Use camelCase: `userId`, `apiBaseUrl` + - Be descriptive: `adminUserToken` instead of `token1` + - Group related variables: `user_id`, `user_name`, `user_email` + +4. **Dynamic Variables** + - Use built-in dynamic variables for unique values + - Prevents conflicts in concurrent test runs + - Ensures test data freshness + +### Custom Assertions + +1. **Write Clear Functions** + - Use descriptive function names + - Add comments explaining logic + - Return meaningful error messages + +2. **Reuse Through Global Functions** + - Save commonly used validations as global functions + - Maintain consistency across tests + - Easier to update validation logic + +3. **Handle Edge Cases** + - Check for null/undefined values + - Validate data types + - Handle unexpected response formats + +4. **Provide Helpful Error Messages** + - Include actual vs expected values + - Explain what went wrong + - Suggest potential fixes + +5. **Test Your Functions** + - Use the "Test Function" button + - Validate with different inputs + - Ensure functions work as expected + +## Advanced Features + +### Variable Chaining + +Use variables within variables: +```json +{ + "apiUrl": "{{baseUrl}}/{{apiVersion}}/{{endpoint}}" +} +``` + +### Environment Variables + +Switch between environments: +- Development: `baseUrl = "https://dev.api.example.com"` +- Staging: `baseUrl = "https://staging.api.example.com"` +- Production: `baseUrl = "https://api.example.com"` + +### Response Variable Extraction + +Extract values from responses for use in subsequent steps: +```javascript +// In assertion, extract and save value +const userId = response.body.id; +saveVariable('userId', userId, 'local'); +``` + +### Conditional Assertions + +Apply assertions based on conditions: +```javascript +function conditionalAssertion(response, expected) { + // Only validate price if item is in stock + if (response.body.inStock) { + if (response.body.price <= 0) { + return { passed: false, message: "Price must be positive for in-stock items" }; + } + } + + return { passed: true, message: "Validation passed" }; +} +``` + +## Benefits + +- **Flexibility**: Customize tests for different scenarios +- **Reusability**: Share variables and functions across tests +- **Maintainability**: Update values in one place +- **Scalability**: Easily manage large test suites +- **Validation Power**: Implement complex business logic validation +- **Consistency**: Standardize assertions across the team + +By leveraging custom variables and assertion functions, you can create powerful, flexible, and maintainable test suites that accurately validate your API behavior. diff --git a/versioned_docs/version-4.0.0/running-keploy/api-testing-filter-suites.md b/versioned_docs/version-4.0.0/running-keploy/api-testing-filter-suites.md new file mode 100644 index 000000000..616a9f156 --- /dev/null +++ b/versioned_docs/version-4.0.0/running-keploy/api-testing-filter-suites.md @@ -0,0 +1,108 @@ +--- +id: api-testing-filter-suites +title: Using Filtering in Test Suites +description: Guide to add filters for test suites +sidebar_label: Filter Test Suites +tags: + - api-testing + - filter-suites + - test-suite + - test-management +--- +# Filtering Test Suites + +This guide explains how to filter test suites in Keploy to quickly find and manage your API tests. You can apply various filters to narrow down your test suites based on different criteria. + +## Available Filter Options + +Keploy provides multiple filtering options to help you efficiently locate and organize your test suites: + +### 1. Filter by Test Suite +- Filter test suites by their name or identifier +- Quickly locate specific test suites from a large collection +- Use search functionality to find test suites by partial name matching + +### 2. Filter by Status Code +- Filter tests based on HTTP response status codes +- Common status code filters: + - **2xx Success**: 200 OK, 201 Created, 204 No Content, etc. + - **3xx Redirection**: 301 Moved Permanently, 302 Found, 304 Not Modified, etc. + - **4xx Client Errors**: 400 Bad Request, 401 Unauthorized, 404 Not Found, etc. + - **5xx Server Errors**: 500 Internal Server Error, 502 Bad Gateway, 503 Service Unavailable, etc. +- Useful for identifying failing tests or specific response patterns + +### 3. Filter by HTTP Method +- Filter tests based on the HTTP request method: + - **GET**: Retrieve data from the server + - **POST**: Submit data to create new resources + - **PUT**: Update existing resources + - **PATCH**: Partially update resources + - **DELETE**: Remove resources + - **OPTIONS**: Get communication options + - **HEAD**: Get headers without body +- Helps organize tests by the type of operation being tested + +### 4. Filter by Endpoint +- Filter tests based on the API endpoint or URL path +- Search by: + - Full endpoint URL + - Partial path matching + - Endpoint patterns +- Useful for testing specific API routes or services + +## How to Apply Filters + +1. **Access the Filter Panel** + - Navigate to the test suites section in Keploy + - Look for the filter icon or filter panel + +2. **Select Filter Criteria** + - Choose one or more filter options from the available categories + - Filters can be combined for more precise results + +3. **Apply Filters** + - Click "Apply" or the filters will be applied automatically + - The test suite list will update to show only matching results + +4. **Clear Filters** + - Use the "Clear Filters" or "Reset" button to remove all active filters + - Return to viewing all test suites + +## Example Use Cases + +### Finding Failed Tests +``` +Filter by Status Code: 4xx, 5xx +``` +This will show all tests that resulted in client or server errors. + +### Reviewing POST Requests +``` +Filter by HTTP Method: POST +``` +This displays all tests using the POST method. + +### Testing a Specific API +``` +Filter by Endpoint: /api/v1/users +``` +This shows all tests for the users endpoint. + +### Combining Filters +``` +Filter by: +- HTTP Method: GET +- Status Code: 200 +- Endpoint: /api/v1/products +``` +This shows all successful GET requests to the products endpoint. + +## Benefits of Filtering + +- **Faster Navigation**: Quickly find specific tests without scrolling through long lists +- **Better Organization**: Group and view related tests together +- **Debugging Efficiency**: Isolate failing tests or problematic endpoints +- **Test Analysis**: Understand patterns in your API behavior +- **Maintenance**: Easier to update or remove tests for specific endpoints or methods + +By using these filtering options, you can efficiently manage and analyze your test suites in Keploy. \ No newline at end of file diff --git a/versioned_docs/version-4.0.0/running-keploy/api-testing-generation-history.md b/versioned_docs/version-4.0.0/running-keploy/api-testing-generation-history.md new file mode 100644 index 000000000..cd7c1a46e --- /dev/null +++ b/versioned_docs/version-4.0.0/running-keploy/api-testing-generation-history.md @@ -0,0 +1,212 @@ +--- +id: api-testing-generation-history +title: Test Generation History +description: Guide to viewing and managing test generation history with job tracking and status monitoring +sidebar_label: Generation History +tags: + - api-testing + - generation-history + - test-generation + - job-tracking + - test-management +--- + +# Test Generation History + +This guide explains how to use the generation history page in Keploy to track and manage your test generation jobs. The history provides detailed insights into each generation run, including acceptance rates, errors, and inputs used. + +## Overview + +The generation history page displays a comprehensive list of all test generation jobs, allowing you to monitor the success rate of your test generations and take action on rejected or buggy tests. + +## Generation History Features + +### Job Information Display + +For each generation job, you can view: + +1. **Job ID**: Unique identifier for each test generation run +2. **Generation Statistics**: + - **Accepted**: Number of test suites that passed validation + - **Recovered**: Number of test suites that were recovered from errors + - **Rejected**: Number of test suites that failed validation + - **Buggy**: Number of test suites with identified issues +3. **Input Details**: The inputs and configurations used for that particular generation +4. **Timestamp**: When the generation job was executed +5. **Status**: Overall status of the generation job (Completed, In Progress, Failed) + +### Viewing Generation Details + +To view details of a specific generation: + +1. **Navigate to Generation History** + - Go to the generation history section in Keploy + - View the list of all generation jobs + +2. **Review Job Statistics** + - See the breakdown of accepted, recovered, rejected, and buggy test suites + - Understand the success rate of each generation + +3. **Check Input Parameters** + - View the inputs used for that generation + - Review configuration settings and parameters + - Understand what led to specific results + +## Working with Rejected Test Suites + +### Adding Rejected Tests to Current Suite + +If you find rejected test suites that you want to include: + +1. **Locate Rejected Tests** + - Browse through the generation history + - Identify jobs with rejected test suites + +2. **Click the Plus Icon** + - Click on the **+** (plus) icon next to any rejected test suite + - This action will add the rejected test to your current list of test suites + +3. **Review and Modify** + - The test suite will appear in your current test suite list + - You can now review, edit, and fix any issues + - Make necessary adjustments before running the test + +4. **Re-validate** + - After modifications, re-run the test to validate + - Monitor if it moves from rejected to accepted status + +## Understanding Test Statuses + +### Accepted Tests ✅ +- Tests that passed all validation checks +- Successfully generated and ready to use +- No issues detected in the test suite + +### Recovered Tests 🔄 +- Tests that encountered errors but were successfully recovered +- May have required automatic fixes or adjustments +- Review recommended to ensure correctness + +### Rejected Tests ❌ +- Tests that failed validation checks +- May have incorrect assertions or invalid configurations +- Require manual review and fixes +- Can be added back to the test suite list for modification + +### Buggy Tests 🐛 +- Tests with identified bugs or issues +- May have inconsistent behavior or errors +- Need investigation and debugging +- Review test logic and inputs + +## Example Generation History View + +``` +┌─────────────────────────────────────────────────────────────────┐ +│ Generation History │ +├─────────────────────────────────────────────────────────────────┤ +│ │ +│ Job ID: gen-2026-02-13-001 │ +│ Timestamp: 2026-02-13 10:30:45 │ +│ Status: Completed │ +│ │ +│ Statistics: │ +│ ✅ Accepted: 45 │ +│ 🔄 Recovered: 12 │ +│ ❌ Rejected: 8 │ +│ 🐛 Buggy: 3 │ +│ │ +│ Inputs Used: │ +│ - Endpoints: /api/v1/users, /api/v1/products │ +│ - Methods: GET, POST, PUT │ +│ - Recording Duration: 5 minutes │ +│ - Agent: Local Agent v2.1.0 │ +│ │ +│ Rejected Tests: [+] Add to Suite │ +│ │ +├─────────────────────────────────────────────────────────────────┤ +│ │ +│ Job ID: gen-2026-02-12-005 │ +│ Timestamp: 2026-02-12 16:22:10 │ +│ Status: Completed │ +│ │ +│ Statistics: │ +│ ✅ Accepted: 32 │ +│ 🔄 Recovered: 5 │ +│ ❌ Rejected: 15 │ +│ 🐛 Buggy: 7 │ +│ │ +│ Inputs Used: │ +│ - Endpoints: /api/v2/orders │ +│ - Methods: GET, DELETE │ +│ - Recording Duration: 3 minutes │ +│ - Agent: Browser Extension │ +│ │ +│ Rejected Tests: [+] Add to Suite │ +│ │ +└─────────────────────────────────────────────────────────────────┘ +``` + +## Analyzing Generation Trends + +### Success Rate Analysis +- Track the percentage of accepted vs rejected tests over time +- Identify patterns in test generation quality +- Optimize inputs based on historical data + +### Input Optimization +- Review which inputs led to higher acceptance rates +- Compare different configurations and their outcomes +- Refine your test generation strategy + +### Error Patterns +- Identify common reasons for test rejection +- Address recurring bugs or issues +- Improve test generation quality + +## Best Practices + +1. **Regular Review** + - Check generation history regularly + - Monitor acceptance rates and trends + - Address rejected tests promptly + +2. **Learn from Rejected Tests** + - Analyze why tests were rejected + - Improve input parameters for future generations + - Document common issues and solutions + +3. **Recover and Reuse** + - Use the plus icon to recover rejected tests + - Fix and validate rejected test suites + - Build a comprehensive test coverage + +4. **Track Performance** + - Monitor the number of buggy tests + - Identify problematic endpoints or methods + - Improve API stability based on insights + +5. **Maintain Clean History** + - Archive old generation jobs periodically + - Focus on recent and relevant generations + - Keep track of successful generation patterns + +## Filtering and Sorting + +You can filter and sort generation history by: +- **Date Range**: View generations within a specific time period +- **Status**: Filter by acceptance rate or overall status +- **Job ID**: Search for specific generation jobs +- **Endpoint**: Filter by endpoints used in generation +- **Success Rate**: Sort by acceptance percentage + +## Benefits of Generation History + +- **Transparency**: Complete visibility into test generation process +- **Traceability**: Track which inputs produced which tests +- **Quality Control**: Monitor and improve test generation quality +- **Recovery**: Easily recover and fix rejected tests +- **Analytics**: Understand patterns and optimize generation strategy +- **Audit Trail**: Maintain records of all test generation activities + +By leveraging the generation history feature, you can maintain high-quality test suites, recover valuable rejected tests, and continuously improve your API testing strategy. \ No newline at end of file diff --git a/versioned_docs/version-4.0.0/running-keploy/api-testing-local-agent.md b/versioned_docs/version-4.0.0/running-keploy/api-testing-local-agent.md new file mode 100644 index 000000000..12584f72d --- /dev/null +++ b/versioned_docs/version-4.0.0/running-keploy/api-testing-local-agent.md @@ -0,0 +1,46 @@ +--- +id: api-testing-local-agent +title: Using Keploy Local Agent +description: Guide to adding to recording and generating test suites using local agent +sidebar_label: Local Agent +tags: + - api-testing + - local-agent + - test-suite + - test-management +--- +# Using the Local Agent + +This guide explains how to use the local agent in Keploy to test private or local endpoints. Follow the steps below to set up and use the local agent effectively. + +## Steps to Use the Local Agent + +1. **Enter the Endpoint URL** + - Navigate to the local agent section in the Keploy interface. + - Enter the endpoint URL you want to test. This can be a private URL or any other endpoint. + - A default localhost link is also available for convenience. + +2. **Download the Keplr Agent** + - Based on your device configuration, download the Keplr agent: + - **Windows** + - **Mac** + - **Linux** + - Follow the installation instructions for your operating system. + +3. **Start the Keplr Agent** + - Once the agent is downloaded, start it on your device. + - Open the agent interface to ensure it is running and ready to connect. + +4. **Connect the Agent** + - After starting the agent, connect it to Keploy. + - Once connected, you can begin making API calls. + +5. **Record API Calls** + - The Keplr agent will automatically record the API calls you make. + - It will capture the responses and start generating test sheets based on the recorded calls. + +6. **Troubleshooting Connection Issues** + - If the local agent fails to connect, you can use the Keplr extension as an alternative. + - Ensure that the agent is running and the endpoint URL is correct. + +By following these steps, you can efficiently use the local agent to test your APIs and generate test sheets automatically. \ No newline at end of file diff --git a/versioned_docs/version-4.0.0/running-keploy/api-testing-mark-unbuggy.md b/versioned_docs/version-4.0.0/running-keploy/api-testing-mark-unbuggy.md new file mode 100644 index 000000000..135623cf7 --- /dev/null +++ b/versioned_docs/version-4.0.0/running-keploy/api-testing-mark-unbuggy.md @@ -0,0 +1,235 @@ +--- +id: api-testing-mark-unbuggy +title: Mark Test Suite as Unbuggy +description: Guide to marking test suites as unbuggy after fixing issues +sidebar_label: Mark as Unbuggy +tags: + - api-testing + - test-management + - suite-status + - debugging +--- + +# Mark Test Suite as Unbuggy + +After resolving issues in a buggy test suite, you can mark it as unbuggy to indicate that the problems have been addressed and the suite is functioning correctly again. + +## When to Mark a Suite as Unbuggy + +Mark a test suite as unbuggy when: + +- All test failures have been resolved +- API endpoints are working as expected +- Schema validations are passing +- Authentication issues have been fixed +- Test assertions are now accurate +- The underlying API issues have been corrected + +## How to Mark a Suite as Unbuggy + +### Step 1: Navigate to the Test Suite + +1. Go to your Keploy dashboard +2. Navigate to the **Test Suites** section +3. Click on the specific test suite you want to mark as unbuggy + +### Step 2: Access Suite Options + +Once you're on the test suite page: + +1. Look for the **three dots (⋮)** menu next to the test suite name +2. The menu is typically located in the top-right area of the suite header +3. Click on the three dots to open the context menu + +### Step 3: Mark as Unbuggy + +From the context menu: + +1. Select **"Unmark Buggy"** from the dropdown options + +## What Happens When You Mark a Suite as Unbuggy + +### Immediate Changes + +- **Status Update**: The suite status changes from "Buggy" to "Active" or "Passing" +- **Visual Indicator**: The suite will no longer appear with error indicators +- **Dashboard Update**: The suite is moved out of the buggy suites list +- **Notification**: A success notification confirms the status change + +### Ongoing Behavior + +- **Future Runs**: The suite will run normally in subsequent test executions +- **Reporting**: The suite will be included in standard test reports +- **Monitoring**: Keploy will continue monitoring the suite for new issues +- **History**: The previous buggy status and resolution are logged in the suite history + +## Best Practices + +### Before Marking as Unbuggy + +1. **Verify All Fixes** + ```bash + # Run the test suite manually to confirm fixes + keploy test --test-sets "your-suite-name" + ``` + +2. **Check All Test Cases** + - Ensure every test in the suite is passing + - Verify no intermittent failures remain + - Confirm all assertions are working correctly + +3. **Test in Multiple Environments** + - Run tests in staging environment + - Verify production-like conditions + - Check with realistic data volumes + +### Documentation + +1. **Record Resolution Steps** + - Document what was fixed + - Note any API changes made + - Record configuration updates + +2. **Update Test Documentation** + - Modify test descriptions if needed + - Update expected behaviors + - Add notes about resolution + +## Common Scenarios for Marking as Unbuggy + +### 1. API Endpoint Restored + +**Scenario**: A 404 error was resolved by fixing the API endpoint + +**Before marking unbuggy**: +```bash +# Verify the endpoint is working +curl -X POST https://api.example.com/owners \ + -H "Content-Type: application/json" \ + -d '{"name": "Test Owner"}' +``` + +### 2. Schema Issues Fixed + +**Scenario**: Response schema validation was fixed by updating the API + +**Verification steps**: +1. Check that response format matches expectations +2. Verify all required fields are present +3. Confirm data types are correct + +### 3. Authentication Resolved + +**Scenario**: Authentication issues were fixed by updating credentials + +**Before marking unbuggy**: +1. Test with new authentication tokens +2. Verify permissions are sufficient +3. Check token expiration dates + +### 4. Environment Configuration Fixed + +**Scenario**: Environment-specific issues were resolved + +**Verification checklist**: +- [ ] Database connections working +- [ ] Environment variables set correctly +- [ ] Required services are running +- [ ] Network connectivity is stable + +## Bulk Operations + +### Mark Multiple Suites as Unbuggy + +If you have multiple suites to mark as unbuggy: + +1. **From the Buggy Suites List**: + - Use checkboxes to select multiple suites + - Click the bulk actions menu + - Select "Mark Selected as Unbuggy" + +2. **From Individual Suite Pages**: + - Process each suite individually + - Verify fixes for each suite separately + - Document resolutions for tracking + +## Monitoring After Marking as Unbuggy + +### Automated Monitoring + +Keploy automatically monitors unbuggy suites for: +- New test failures +- Performance regressions +- Schema changes +- API availability issues + +### Manual Verification + +Regularly check that previously buggy suites remain stable: + +1. **Weekly Reviews** + - Check suite success rates + - Monitor execution times + - Review error logs + +2. **After Deployments** + - Run critical test suites + - Verify no regressions introduced + - Check environment stability + +## Troubleshooting + +### Unable to Mark as Unbuggy + +If you can't find the option to mark as unbuggy: + +1. **Check Permissions** + - Ensure you have edit permissions for the test suite + - Verify your account has the necessary role + +2. **Suite Status** + - Confirm the suite is currently marked as buggy + - Check if recent test runs are still failing + +3. **Browser Issues** + - Refresh the page and try again + - Clear browser cache if needed + - Try using a different browser + +### Accidental Marking + +If you accidentally marked a suite as unbuggy: + +1. **Re-run the Suite** + - Execute the test suite again + - If issues persist, it will automatically be marked as buggy + +2. **Manual Review** + - Check the suite execution results + - Review individual test case outcomes + - Mark as buggy again if needed + +## Related Actions + +After marking a suite as unbuggy, you might want to: + +- **Schedule Regular Runs**: Set up automated execution schedules +- **Update Documentation**: Revise test suite documentation +- **Share Results**: Notify team members of the resolution +- **Review Similar Suites**: Check other suites for similar issues + +## Integration with CI/CD + +When marking suites as unbuggy in CI/CD pipelines: + +```yaml +# Example GitHub Action +- name: Mark Suite as Unbuggy + if: ${{ steps.test.outputs.all_passed == 'true' }} + run: | + keploy suite mark-unbuggy --suite-id ${{ env.SUITE_ID }} +``` + +This ensures that suites are automatically marked as unbuggy when automated fixes resolve issues. + +Remember: Marking a suite as unbuggy should only be done after thoroughly verifying that all issues have been resolved and the suite is functioning correctly. \ No newline at end of file diff --git a/versioned_docs/version-4.0.0/running-keploy/api-testing-run-report.md b/versioned_docs/version-4.0.0/running-keploy/api-testing-run-report.md new file mode 100644 index 000000000..e5765c14b --- /dev/null +++ b/versioned_docs/version-4.0.0/running-keploy/api-testing-run-report.md @@ -0,0 +1,374 @@ +--- +id: api-testing-run-report +title: Test Run Reports +description: Guide to viewing and analyzing test run reports with detailed execution results and filtering +sidebar_label: Run Reports +tags: + - api-testing + - run-reports + - test-execution + - test-results + - test-management +--- + +# Test Run Reports + +This guide explains how to use the run report page in Keploy to track and analyze your test execution results. The run reports provide comprehensive insights into test performance, failures, and bugs with detailed diagnostic information. + +## Overview + +The run report page displays a list of all test execution runs, allowing you to monitor test results, identify failures, and debug issues efficiently. Each report provides detailed information about individual test cases and their outcomes. + +## Run Report List View + +### Report Summary Information + +For each test run, you can view: + +1. **Report ID**: Unique identifier for the test run +2. **Created**: Timestamp when the test run was executed +3. **Creator**: User or system that initiated the test run +4. **Total Suites**: Total number of test suites executed +5. **Status Distribution**: + - **Pass**: Number of test suites that passed ✅ + - **Fail**: Number of test suites that failed ❌ + - **Buggy**: Number of test suites with bugs 🐛 + +### Viewing Report List + +1. **Navigate to Run Reports** + - Go to the run reports section in Keploy + - View the list of all test execution runs + +2. **Review Report Summary** + - See the overall pass/fail/buggy distribution + - Identify problematic test runs at a glance + - Track test execution history + +## Detailed Report View + +### Accessing Detailed Results + +Click on any report from the list to view detailed execution results: + +1. **Click on Report ID** + - Select a report to view full details + - Access comprehensive test execution information + +2. **View Test Results** + - See detailed breakdown of all test suites + - Identify which tests passed, failed, or are buggy + - Review execution metrics and timings + +### Understanding Test Results + +#### Passed Tests ✅ +- Tests that successfully completed all assertions +- All validations matched expected results +- No errors or warnings during execution + +#### Failed Tests ❌ +- Tests that did not meet assertion criteria +- **Failure Reasons Displayed**: + - Assertion mismatches + - Unexpected response values + - Status code mismatches + - Timeout errors +- **Association Failures**: + - Failures from dependent services or associations + - External API failures affecting the test + - Database connection issues + +#### Buggy Tests 🐛 +- Tests with identified bugs or inconsistent behavior +- **Buggy Reasons Displayed**: + - Shown on top of the particular test step + - Detailed error messages and stack traces + - Intermittent failures or race conditions + - Data inconsistencies + +## Filtering Test Results + +The run report page provides powerful filtering options to help you analyze specific test results: + +### Available Filters + +#### 1. Filter by Suite Status +Filter tests based on their execution outcome: +- **Passed**: Show only successful tests +- **Failed**: Show only failed tests +- **Buggy**: Show only buggy tests +- **All**: View all test results + +#### 2. Filter by Status Code +Filter by HTTP response status codes: +- **2xx Success**: 200 OK, 201 Created, 204 No Content +- **3xx Redirection**: 301, 302, 304 +- **4xx Client Errors**: 400, 401, 403, 404 +- **5xx Server Errors**: 500, 502, 503, 504 +- **Custom Code**: Filter by specific status codes + +#### 3. Filter by HTTP Method +Filter tests by request method: +- **GET**: Retrieve operations +- **POST**: Create operations +- **PUT**: Update operations +- **PATCH**: Partial update operations +- **DELETE**: Delete operations +- **OPTIONS, HEAD**: Other HTTP methods + +#### 4. Filter by Endpoint +Filter by API endpoint or URL path: +- Full endpoint URL +- Partial path matching +- Wildcard patterns +- Multiple endpoints selection + +### Applying Filters + +1. **Open Filter Panel** + - Click on the filter icon in the report view + - Select desired filter criteria + +2. **Combine Multiple Filters** + - Apply multiple filters simultaneously + - Narrow down results to specific scenarios + - Example: Failed POST requests to /api/v1/users + +3. **Clear Filters** + - Reset filters to view all results + - Remove individual filter criteria + +## Detailed Test Step Information + +### Viewing Step-by-Step Results + +For each test case, you can see: + +1. **Test Steps Breakdown** + - Individual steps within each test + - Request and response details + - Execution time for each step + +2. **Buggy Reasons on Test Steps** + - Detailed error messages displayed on top of the affected step + - Root cause analysis + - Stack traces when available + - Suggested fixes or actions + +3. **Failure Reasons from Assertions** + - Expected vs actual values comparison + - Schema validation errors + - Assertion failure details + +4. **Association Failures** + - Failures from dependent services + - External API errors + - Database or integration issues + - Cascading failure analysis + +## Example Report View + +``` +┌─────────────────────────────────────────────────────────────────┐ +│ Run Reports │ +├─────────────────────────────────────────────────────────────────┤ +│ │ +│ Report ID: run-2026-02-13-001 │ +│ Created: 2026-02-13 14:25:30 │ +│ Creator: john.doe@example.com │ +│ Total Suites: 150 │ +│ │ +│ Distribution: │ +│ ✅ Pass: 125 (83%) │ +│ ❌ Fail: 18 (12%) │ +│ 🐛 Buggy: 7 (5%) │ +│ │ +│ [View Details] │ +│ │ +├─────────────────────────────────────────────────────────────────┤ +│ │ +│ Report ID: run-2026-02-13-002 │ +│ Created: 2026-02-13 10:15:22 │ +│ Creator: Automated CI/CD │ +│ Total Suites: 200 │ +│ │ +│ Distribution: │ +│ ✅ Pass: 180 (90%) │ +│ ❌ Fail: 15 (7.5%) │ +│ 🐛 Buggy: 5 (2.5%) │ +│ │ +│ [View Details] │ +│ │ +└─────────────────────────────────────────────────────────────────┘ +``` + +### Detailed Report View Example + +``` +┌─────────────────────────────────────────────────────────────────┐ +│ Run Report: run-2026-02-13-001 │ +│ │ +│ Filters: [Suite Status: All] [Status Code: All] [Method: All] │ +│ │ +├─────────────────────────────────────────────────────────────────┤ +│ │ +│ ❌ FAILED: Create User - POST /api/v1/users │ +│ │ +│ Status Code: 400 Bad Request │ +│ Execution Time: 145ms │ +│ │ +│ Failure Reason: │ +│ - Assertion Failed: Expected status code 201, got 400 │ +│ - Response body validation error │ +│ │ +│ Association Failures: │ +│ - Email validation service returned error │ +│ - Database constraint violation: duplicate email │ +│ │ +│ Test Steps: │ +│ 1. ✅ Prepare request payload │ +│ 2. ✅ Send POST request │ +│ 3. ❌ Validate response status (Expected 201, got 400) │ +│ 4. ❌ Validate response schema (Missing field: userId) │ +│ │ +├─────────────────────────────────────────────────────────────────┤ +│ │ +│ 🐛 BUGGY: Get Product Details - GET /api/v1/products/123 │ +│ │ +│ Status Code: 200 OK │ +│ Execution Time: 2350ms (Timeout Warning) │ +│ │ +│ Buggy Reason (on Step 2): │ +│ - Intermittent timeout on external pricing service │ +│ - Response time exceeded threshold (>2000ms) │ +│ - Inconsistent data: price field sometimes null │ +│ │ +│ Test Steps: │ +│ 1. ✅ Send GET request │ +│ 2. 🐛 Wait for response (2350ms - Slow) │ +│ └─ Error: External pricing API timeout │ +│ 3. ⚠️ Validate response (Warning: price field is null) │ +│ │ +├─────────────────────────────────────────────────────────────────┤ +│ │ +│ ✅ PASSED: Login User - POST /api/v1/auth/login │ +│ │ +│ Status Code: 200 OK │ +│ Execution Time: 95ms │ +│ │ +│ All assertions passed successfully │ +│ │ +└─────────────────────────────────────────────────────────────────┘ +``` + +## Analyzing Test Failures + +### Common Failure Patterns + +1. **Assertion Failures** + - Response doesn't match expected schema + - Incorrect status codes + - Missing or unexpected fields + - Data type mismatches + +2. **Association Failures** + - Dependent service unavailable + - Database connection errors + - Third-party API failures + - Authentication/authorization issues + +3. **Performance Issues** + - Timeout errors + - Slow response times + - Resource exhaustion + +### Debugging Failed Tests + +1. **Review Failure Reasons** + - Read detailed error messages + - Check expected vs actual values + - Identify the failing step + +2. **Check Association Failures** + - Verify dependent services are running + - Check network connectivity + - Review external API status + +3. **Analyze Buggy Tests** + - Review the buggy reason displayed on the test step + - Check for intermittent issues + - Look for patterns in bug occurrences + +4. **Use Filters for Analysis** + - Filter by specific endpoints showing failures + - Group failures by HTTP method + - Analyze status code patterns + +## Report Metrics and Insights + +### Key Metrics + +- **Pass Rate**: Percentage of successful tests +- **Failure Rate**: Percentage of failed tests +- **Bug Rate**: Percentage of buggy tests +- **Average Execution Time**: Mean time across all tests +- **Success Trend**: Historical pass rate over time + +### Performance Insights + +- **Slowest Endpoints**: Identify performance bottlenecks +- **Most Failed Tests**: Tests requiring attention +- **Flaky Tests**: Tests with inconsistent results (buggy) +- **Association Dependencies**: Most common external failures + +## Best Practices + +1. **Regular Report Review** + - Check reports after each test run + - Monitor pass rate trends + - Address failures promptly + +2. **Use Filters Effectively** + - Filter failed tests to prioritize fixes + - Group by endpoint to identify problematic APIs + - Filter by status code to categorize issues + +3. **Document Failures** + - Note recurring failure patterns + - Document association dependencies + - Track bug fixes and resolutions + +4. **Investigate Buggy Tests** + - Review buggy reasons carefully + - Check for timing issues or race conditions + - Stabilize flaky tests + +5. **Monitor Associations** + - Track external service reliability + - Set up alerts for association failures + - Maintain fallback strategies + +6. **Share Reports** + - Share reports with team members + - Include reports in CI/CD pipelines + - Use reports for sprint retrospectives + +## Exporting and Sharing + +- **Export Reports**: Download reports in various formats (PDF, CSV, JSON) +- **Share Links**: Generate shareable links to specific reports +- **Schedule Reports**: Set up automated report distribution +- **Integration**: Connect with project management tools + +## Benefits of Run Reports + +- **Comprehensive Testing Visibility**: Complete view of test execution results +- **Quick Issue Identification**: Easily spot failures and bugs +- **Detailed Diagnostics**: Step-by-step failure analysis +- **Association Tracking**: Monitor external dependencies +- **Historical Tracking**: Maintain test execution history +- **Team Collaboration**: Share results and insights with team +- **Data-Driven Decisions**: Use metrics to improve test quality + +By leveraging the run report features, you can maintain high-quality APIs, quickly identify and fix issues, and ensure comprehensive test coverage across your application. \ No newline at end of file diff --git a/versioned_docs/version-4.0.0/running-keploy/api-testing-running-selective.md b/versioned_docs/version-4.0.0/running-keploy/api-testing-running-selective.md new file mode 100644 index 000000000..437e36748 --- /dev/null +++ b/versioned_docs/version-4.0.0/running-keploy/api-testing-running-selective.md @@ -0,0 +1,379 @@ +--- +id: api-testing-running-selective +title: Running Selective Test Suites +description: Guide to selecting and running specific test suites using checkboxes and bulk actions +sidebar_label: Selective Test Execution +tags: + - api-testing + - test-execution + - bulk-actions + - test-management +--- + +# Running Selective Test Suites + +Keploy allows you to select specific test suites from your test collection and perform bulk actions like running tests, deleting suites, or adding labels. This selective approach helps you manage large test collections efficiently and run only the tests you need. + +## Overview + +The selective test suite feature provides: + +- **Checkbox Selection**: Choose individual test suites or select all +- **Bulk Actions**: Perform actions on multiple suites simultaneously +- **Filtered Execution**: Run only the tests you've selected +- **Efficient Management**: Handle large test collections with ease + +## Selecting Test Suites + +### Individual Selection + +1. **Navigate to Test Suites** + - Go to your Keploy dashboard + - Click on the **Test Suites** section + +2. **Use Checkboxes** + - Each test suite has a checkbox on the left side + - Click the checkbox next to any suite you want to select + - Selected suites will be highlighted with a checkmark ✓ + +3. **Visual Indicators** + - Selected suites show a blue checkmark + - The suite row may be highlighted or have a colored border + - A selection counter appears showing "X suites selected" + +### Bulk Selection Options + +#### Select All Suites +``` +☑️ Select All (at the top of the list) +``` +- Checkbox at the top of the suite list +- Selects all visible test suites on the current page +- Useful for applying actions to your entire test collection + +#### Select by Filter +1. Apply filters (status, tags, creation date, etc.) +2. Use "Select All" to choose all filtered results +3. Only suites matching your criteria will be selected + +#### Select by Pattern +- Use search functionality to find specific suites +- Select all results matching your search criteria +- Combine with filters for more precise selection + +## Available Actions + +Once you've selected test suites, several bulk actions become available: + +### 1. Run Selected Tests + +**Button**: **Run Selected** or **Execute Selected** + +**What it does**: +- Executes all test cases within the selected suites +- Runs tests in parallel or sequential order (configurable) +- Provides consolidated results for all selected suites + +**Usage**: +``` +1. Select desired test suites using checkboxes +2. Click "Run Selected" button +3. Choose execution options (if prompted): + - Parallel execution (faster) + - Sequential execution (more stable) + - Environment selection +4. Click "Start Execution" +``` + +**Execution Options**: +- **Environment**: Choose target environment (dev, staging, prod) +- **Parallel Runs**: Set number of concurrent executions +- **Timeout Settings**: Configure test timeout values +- **Retry Policy**: Set retry attempts for failed tests + +### 2. Delete Selected Suites + +**Button**: **Delete Selected** + +**What it does**: +- Permanently removes selected test suites +- Deletes all test cases within those suites +- Cannot be undone (use with caution) + +**Safety Features**: +- Confirmation dialog before deletion +- Shows list of suites to be deleted +- Option to export suites before deletion + +**Usage**: +``` +1. Select test suites to delete +2. Click "Delete Selected" +3. Review the confirmation dialog +4. Type "DELETE" to confirm (if required) +5. Click "Confirm Deletion" +``` + +### 3. Add Labels + +**Button**: **Add Labels** or **Manage Tags** + +**What it does**: +- Adds labels/tags to selected test suites +- Helps organize and categorize tests +- Enables better filtering and search + +**Label Types**: +- **Environment**: `dev`, `staging`, `production` +- **Priority**: `high`, `medium`, `low` +- **Category**: `smoke`, `regression`, `integration` +- **Owner**: `team-frontend`, `team-backend` +- **Custom**: Any custom label you define + +**Usage**: +``` +1. Select test suites to label +2. Click "Add Labels" +3. Choose from existing labels or create new ones +4. Select multiple labels if needed +5. Click "Apply Labels" +``` + +### 4. Additional Bulk Actions + +#### Export Selected +- Download selected suites as files +- Export in various formats (JSON, CSV, etc.) +- Backup before making changes + +#### Duplicate Selected +- Create copies of selected test suites +- Useful for creating variations or backups +- Maintains original test structure + +#### Move to Folder +- Organize suites into folders or categories +- Bulk organization for better management +- Maintain hierarchical structure + +## Selection Workflow Examples + +### Example 1: Running Smoke Tests + +**Scenario**: Run all smoke tests before deployment + +``` +1. Filter by label: "smoke" +2. Click "Select All" (selects all smoke test suites) +3. Click "Run Selected" +4. Choose "Production" environment +5. Set parallel execution: 5 concurrent runs +6. Click "Start Execution" +``` + +### Example 2: Cleaning Up Old Tests + +**Scenario**: Delete outdated test suites + +``` +1. Filter by creation date: "Older than 6 months" +2. Filter by status: "Not run in 30 days" +3. Review the filtered results +4. Select relevant suites (uncheck any you want to keep) +5. Click "Delete Selected" +6. Confirm deletion after review +``` + +### Example 3: Organizing by Team + +**Scenario**: Add team labels to categorize ownership + +``` +1. Search for suites containing "user-management" +2. Select all relevant suites +3. Click "Add Labels" +4. Add label: "team-backend" +5. Add label: "high-priority" +6. Click "Apply Labels" +``` + +## Selection Management + +### Selection Persistence + +- **Page Navigation**: Selections persist when moving between pages +- **Filter Changes**: Selections maintained when applying new filters +- **Session Duration**: Selections cleared when closing browser/tab + +### Selection Counter + +The interface shows: +``` +✓ 5 suites selected out of 23 total +``` + +### Clear Selection + +**Options to clear selection**: +- Click "Clear Selection" button +- Uncheck "Select All" checkbox +- Refresh the page + +## Best Practices + +### Before Running Selected Tests + +1. **Review Selection** + ``` + - Verify all intended suites are selected + - Check that no critical tests are missing + - Confirm environment settings + ``` + +2. **Check Dependencies** + ``` + - Ensure selected tests don't have interdependencies + - Verify test data requirements + - Confirm service availability + ``` + +3. **Set Appropriate Timeouts** + ``` + - Consider total execution time + - Set realistic timeout values + - Plan for potential failures + ``` + +### Efficient Selection Strategies + +1. **Use Filters First** + - Apply relevant filters before selecting + - Reduce noise and focus on relevant suites + - Combine multiple filters for precision + +2. **Leverage Labels** + - Maintain good labeling practices + - Use consistent naming conventions + - Regular label cleanup and organization + +3. **Batch Operations** + - Group similar actions together + - Avoid frequent small operations + - Plan bulk changes in advance + +## Monitoring Execution + +### Real-time Progress + +When running selected tests: + +``` +Execution Progress: 3 of 5 suites completed +├── ✅ User Authentication Suite (Passed) +├── ✅ Payment Processing Suite (Passed) +├── ⚠️ Order Management Suite (Failed - 2 tests) +├── 🔄 Notification Suite (Running...) +└── ⏳ Report Generation Suite (Queued) +``` + +### Execution Summary + +After completion: +``` +Execution Results Summary +======================== +Total Suites: 5 +✅ Passed: 3 suites +❌ Failed: 2 suites +⏱️ Total Time: 4m 32s +📊 Success Rate: 60% +``` + +## Troubleshooting + +### Selection Issues + +**Problem**: Can't select certain suites +- **Solution**: Check permissions for those suites +- **Check**: Verify suites aren't currently running + +**Problem**: Selection doesn't persist +- **Solution**: Ensure browser cookies are enabled +- **Check**: Verify stable internet connection + +### Execution Issues + +**Problem**: Selected tests won't run +- **Solutions**: + - Verify all selected suites are valid + - Check environment connectivity + - Confirm sufficient system resources + - Review test dependencies + +**Problem**: Bulk actions fail +- **Solutions**: + - Reduce selection size and try again + - Check server capacity and load + - Verify permissions for bulk operations + +## Keyboard Shortcuts + +Enhance your workflow with keyboard shortcuts: + +``` +Ctrl/Cmd + A : Select all visible suites +Ctrl/Cmd + D : Deselect all suites +Spacebar : Toggle selection for highlighted suite +Enter : Run selected suites +Delete : Delete selected suites (with confirmation) +``` + +## Integration with CI/CD + +### API Endpoints for Selective Execution + +```bash +# Run specific test suites via API +curl -X POST "https://api.keploy.io/test-suites/run" \ + -H "Authorization: Bearer your-token" \ + -H "Content-Type: application/json" \ + -d '{ + "suite_ids": ["suite-1", "suite-2", "suite-3"], + "environment": "staging", + "parallel": true, + "max_concurrent": 3 + }' +``` + +### GitHub Actions Example + +```yaml +name: Run Selected API Tests +on: + workflow_dispatch: + inputs: + suite_labels: + description: 'Comma-separated list of suite labels to run' + required: true + default: 'smoke,critical' + +jobs: + run-selective-tests: + runs-on: ubuntu-latest + steps: + - name: Run Selected Test Suites + run: | + keploy test run \ + --labels ${{ github.event.inputs.suite_labels }} \ + --environment staging \ + --parallel 5 +``` + +## Related Features + +- **[Test Suite Management](./api-testing-edit-suites.md)**: Edit and organize test suites +- **[Buggy Test Suites](./api-testing-buggy-suites.md)**: Handle failing test suites +- **[Test Reports](./api-testing-sharing-reports.md)**: View and share execution results +- **[Custom Assertions](./api-testing-custom-assertions.md)**: Define custom validation rules + +The selective test execution feature gives you fine-grained control over your test suite management, enabling efficient testing workflows and better resource utilization. \ No newline at end of file diff --git a/versioned_docs/version-4.0.0/running-keploy/api-testing-schema-coverage.md b/versioned_docs/version-4.0.0/running-keploy/api-testing-schema-coverage.md new file mode 100644 index 000000000..cecf4a6d1 --- /dev/null +++ b/versioned_docs/version-4.0.0/running-keploy/api-testing-schema-coverage.md @@ -0,0 +1,363 @@ +--- +id: api-testing-schema-coverage +title: Schema Coverage and Generation +description: Guide to viewing schema coverage and generating tests for missing coverage +sidebar_label: Schema Coverage +tags: + - api-testing + - schema-coverage + - test-generation + - schema-validation + - test-management +--- + +# Schema Coverage and Generation + +This guide explains how to use the schema coverage page in Keploy to analyze your API schema coverage and automatically generate additional test suites to cover missing scenarios. + +## Overview + +The schema coverage page provides a comprehensive view of how well your test suites cover your API schema. You can compare your original schema with Keploy's generated schema, identify gaps in coverage, and automatically generate tests to fill those gaps. + +## Accessing Schema Coverage + +### From Test Suite + +1. **Navigate to Test Suite** + - Go to your test suite view + - Locate the test suite you want to analyze + +2. **Click on Schema Coverage** + - Click on the "Schema Coverage" button or link + - This will take you to the schema coverage page for that test suite + +## Schema Coverage Page Features + +### 1. Original Schema View + +The original schema section displays: +- **Your API Schema**: The original OpenAPI/Swagger schema or manually defined schema +- **Schema Structure**: Complete API specification including: + - Endpoints and paths + - Request/response models + - Data types and formats + - Required and optional fields + - Validation rules and constraints + +### 2. Total Coverage Metrics + +View comprehensive coverage statistics: +- **Overall Coverage Percentage**: Total schema coverage across all endpoints +- **Endpoint Coverage**: Coverage breakdown by API endpoint +- **Field Coverage**: Percentage of schema fields covered by tests +- **Method Coverage**: Coverage by HTTP methods (GET, POST, PUT, DELETE, etc.) +- **Status Code Coverage**: Which response codes are tested +- **Covered Lines**: Number of schema lines with test coverage +- **Missing Lines**: Number of schema lines without test coverage + +### 3. Keploy Generated Schema + +The generated schema section shows: +- **Auto-Generated Schema**: Schema derived from recorded API calls +- **Coverage Highlights**: Visual indication of covered vs uncovered parts +- **Field-Level Coverage**: Which fields have been tested +- **Edge Case Identification**: Scenarios that need additional testing + +### Side-by-Side Comparison + +View original and generated schemas side by side: +``` +┌──────────────────────────────────────────────────────────────────┐ +│ Schema Coverage Analysis │ +├──────────────────────────────────────────────────────────────────┤ +│ │ +│ Total Coverage: 78% ▓▓▓▓▓▓▓▓▓▓▓▓▓▓▓░░░░░ │ +│ │ +│ ┌─────────────────────────────┬──────────────────────────────┐ │ +│ │ Original Schema │ Keploy Generated Schema │ │ +│ ├─────────────────────────────┼──────────────────────────────┤ │ +│ │ │ │ │ +│ │ /api/v1/users: │ /api/v1/users: │ │ +│ │ GET: ✅ Covered │ GET: ✅ Tested │ │ +│ │ POST: ✅ Covered │ POST: ✅ Tested │ │ +│ │ PUT: ⚠️ Partial │ PUT: ⚠️ Partial │ │ +│ │ DELETE: ❌ Not Covered │ DELETE: ❌ Not Tested │ │ +│ │ │ │ │ +│ │ User Object: │ User Object: │ │ +│ │ id: ✅ Covered │ id: ✅ Found │ │ +│ │ name: ✅ Covered │ name: ✅ Found │ │ +│ │ email: ✅ Covered │ email: ✅ Found │ │ +│ │ phone: ❌ Not Covered │ phone: ❌ Missing │ │ +│ │ address: ❌ Not Covered │ address: ❌ Missing │ │ +│ │ role: ⚠️ Partial │ role: ⚠️ Limited values │ │ +│ │ │ │ │ +│ └─────────────────────────────┴──────────────────────────────┘ │ +│ │ +│ Missing Coverage: │ +│ • DELETE /api/v1/users/{id} - Not tested │ +│ • User.phone field - No test cases │ +│ • User.address field - No test cases │ +│ • User.role - Only 'user' value tested, missing 'admin', 'guest' │ +│ │ +│ [Cover Missing Lines] │ +│ │ +└──────────────────────────────────────────────────────────────────┘ +``` + +## Covering Missing Lines + +### Generate Tests for Uncovered Schema + +1. **Click "Cover Missing Lines"** + - Locate the "Cover Missing Lines" button on the schema coverage page + - Click to open the test generation dialog + +2. **Specify Coverage Requirements** + - Define what you want to cover: + - **Endpoints**: Select specific endpoints to generate tests for + - **HTTP Methods**: Choose methods (GET, POST, PUT, DELETE, etc.) + - **Fields**: Specify schema fields that need coverage + - **Conditions**: Define specific scenarios or edge cases + - **Status Codes**: Target specific response codes to test + - **Data Variations**: Specify value ranges or combinations + +3. **Configure Generation Options** + + Example configuration: + ``` + ┌──────────────────────────────────────────────────────────────┐ + │ Generate Tests for Missing Coverage │ + ├──────────────────────────────────────────────────────────────┤ + │ │ + │ Select Endpoints to Cover: │ + │ ☑ DELETE /api/v1/users/{id} │ + │ ☑ PUT /api/v1/users/{id} │ + │ │ + │ Select Fields to Cover: │ + │ ☑ User.phone │ + │ ☑ User.address │ + │ ☑ User.role (all values) │ + │ │ + │ HTTP Methods: │ + │ ☑ GET ☑ POST ☑ PUT ☑ DELETE │ + │ │ + │ Conditions to Test: │ + │ • Valid user deletion │ + │ • Delete non-existent user (404) │ + │ • Unauthorized deletion (401) │ + │ • Update with phone number │ + │ • Update with address │ + │ • Test all role values: admin, user, guest │ + │ │ + │ Expected Status Codes: │ + │ ☑ 200 OK ☑ 201 Created ☑ 204 No Content │ + │ ☑ 400 Bad Request ☑ 401 Unauthorized ☑ 404 Not Found │ + │ │ + │ Additional Options: │ + │ ☑ Generate edge cases │ + │ ☑ Include validation errors │ + │ ☑ Test field combinations │ + │ │ + │ [Cancel] [Generate Test Suites] │ + │ │ + └──────────────────────────────────────────────────────────────┘ + ``` + +4. **Generate Additional Test Suites** + - Click "Generate Test Suites" + - Keploy will automatically create tests based on your specifications + - New test suites will be added to your test suite list + - Coverage metrics will be updated + +## Coverage Analysis Features + +### Coverage Visualization + +- **Heat Map View**: Visual representation of coverage density +- **Color Coding**: + - 🟢 **Green**: Fully covered (100%) + - 🟡 **Yellow**: Partially covered (50-99%) + - 🔴 **Red**: Not covered (0-49%) +- **Interactive Schema Tree**: Expandable schema structure with coverage indicators + +### Detailed Coverage Metrics + +#### Endpoint-Level Coverage +``` +/api/v1/users +├─ GET ✅ 100% (All fields covered) +├─ POST ✅ 95% (Missing: address validation) +├─ PUT ⚠️ 60% (Missing: phone, address updates) +└─ DELETE ❌ 0% (No tests) + +/api/v1/products +├─ GET ✅ 100% +├─ POST ✅ 100% +├─ PUT ✅ 85% (Missing: price edge cases) +└─ DELETE ✅ 100% +``` + +#### Field-Level Coverage +``` +User Schema: +├─ id ✅ 100% (Tested in all operations) +├─ name ✅ 100% (Valid, empty, special chars) +├─ email ✅ 100% (Valid, invalid formats) +├─ phone ❌ 0% (Not tested) +├─ address ❌ 0% (Not tested) +├─ role ⚠️ 33% (Only 'user' tested) +│ ├─ user ✅ Covered +│ ├─ admin ❌ Not covered +│ └─ guest ❌ Not covered +└─ createdAt ✅ 100% +``` + +### Coverage Gaps Identification + +Keploy automatically identifies: +1. **Untested Endpoints**: API paths with no test coverage +2. **Missing HTTP Methods**: CRUD operations not tested +3. **Uncovered Fields**: Schema fields never validated +4. **Missing Edge Cases**: Boundary conditions not tested +5. **Incomplete Enum Values**: Not all possible values tested +6. **Error Scenarios**: Missing negative test cases +7. **Optional Fields**: Optional parameters not tested + +## Example Use Cases + +### Use Case 1: Complete CRUD Coverage + +**Current State:** +- GET and POST endpoints covered +- PUT and DELETE not tested + +**Action:** +1. Click "Cover Missing Lines" +2. Select PUT and DELETE endpoints +3. Specify conditions: + - Valid updates + - Non-existent resource updates + - Unauthorized access +4. Generate test suites + +**Result:** +- Coverage increases from 50% to 100% +- All CRUD operations tested + +### Use Case 2: Field Coverage + +**Current State:** +- Basic user fields covered (id, name, email) +- Advanced fields not tested (phone, address) + +**Action:** +1. Click "Cover Missing Lines" +2. Select missing fields: phone, address +3. Specify conditions: + - Valid phone formats + - Invalid phone formats + - International addresses + - Empty addresses +4. Generate test suites + +**Result:** +- Field coverage increases from 60% to 100% +- All user fields validated + +### Use Case 3: Enum Value Coverage + +**Current State:** +- User role field only tested with 'user' value +- Missing tests for 'admin' and 'guest' + +**Action:** +1. Click "Cover Missing Lines" +2. Select role field +3. Specify all enum values: admin, user, guest +4. Define conditions for each role's permissions +5. Generate test suites + +**Result:** +- Role coverage increases from 33% to 100% +- All role-based scenarios tested + +## Benefits of Schema Coverage + +### Quality Assurance +- **Comprehensive Testing**: Ensure all API contracts are validated +- **Catch Breaking Changes**: Detect schema violations early +- **Contract Compliance**: Verify API matches specification + +### Development Efficiency +- **Automated Test Generation**: Generate tests automatically for missing coverage +- **Gap Identification**: Quickly identify untested scenarios +- **Prioritized Testing**: Focus on areas with low coverage + +### Documentation +- **Living Documentation**: Schema coverage serves as API documentation +- **Coverage Reports**: Share coverage metrics with stakeholders +- **Trend Analysis**: Track coverage improvements over time + +## Best Practices + +1. **Regular Coverage Review** + - Check schema coverage after adding new endpoints + - Review coverage before releases + - Set coverage targets (e.g., 80% minimum) + +2. **Incremental Coverage Improvement** + - Start with critical endpoints + - Gradually increase coverage over time + - Focus on high-impact areas first + +3. **Meaningful Test Generation** + - Specify realistic conditions when generating tests + - Include both positive and negative scenarios + - Test edge cases and boundary conditions + +4. **Keep Schema Updated** + - Update original schema when API changes + - Re-run coverage analysis after updates + - Archive old coverage reports for comparison + +5. **Combine with Manual Testing** + - Use auto-generation for basic coverage + - Add manual tests for complex scenarios + - Review and refine generated tests + +## Coverage Metrics and Goals + +### Recommended Coverage Targets + +- **Critical Endpoints**: 95-100% coverage +- **User-Facing APIs**: 90-95% coverage +- **Internal APIs**: 80-90% coverage +- **Experimental Features**: 70-80% coverage + +### Monitoring Coverage Trends + +Track coverage over time: +``` +Coverage History: +├─ Jan 2026: 45% ────────────────────────▒▒▒▒▒▒▒▒▒▒▒ +├─ Feb 2026: 62% ──────────────────────────────▒▒▒▒▒ +└─ Mar 2026: 78% ────────────────────────────────────▒▒ + Goal: 90% ────────────────────────────────────────── +``` + +## Integration with Test Workflow + +1. **Record API Calls** → Test suites created +2. **View Schema Coverage** → Identify gaps +3. **Generate Missing Tests** → Fill coverage gaps +4. **Run Tests** → Validate coverage +5. **Review Results** → Iterate and improve + +## Exporting Coverage Reports + +- **Export Options**: PDF, HTML, JSON, CSV +- **Include in CI/CD**: Generate coverage reports in pipelines +- **Share with Team**: Distribute coverage metrics +- **Compliance Reports**: Document API testing completeness + +By leveraging schema coverage analysis and automated test generation, you can ensure comprehensive API testing, maintain high code quality, and quickly identify and address testing gaps in your application. \ No newline at end of file diff --git a/versioned_docs/version-4.0.0/running-keploy/api-testing-suite-settings.md b/versioned_docs/version-4.0.0/running-keploy/api-testing-suite-settings.md new file mode 100644 index 000000000..8c68124a1 --- /dev/null +++ b/versioned_docs/version-4.0.0/running-keploy/api-testing-suite-settings.md @@ -0,0 +1,604 @@ +--- +id: api-testing-suite-settings +title: Test Suite Settings & Actions +description: Complete guide to test suite panel actions including sharing, running, bulk editing, and global configurations +sidebar_label: Suite Settings +tags: + - api-testing + - test-suite-management + - suite-settings + - bulk-operations +--- + +# Test Suite Settings & Actions + +The test suite panel in Keploy provides a comprehensive set of actions and settings to manage your test suites effectively. From basic operations like running and sharing tests to advanced features like bulk schema editing and global configurations, the suite panel offers everything you need for efficient test management. + +## Overview of Available Actions + +The test suite panel provides access to the following key actions: + +- **Share Test Suite**: Collaborate with team members by sharing test suites +- **Run Test Suite**: Execute all tests within the suite +- **Bulk Edit Schema Assertions**: Modify assertions across multiple tests +- **Add Global Variables**: Define variables accessible across all tests +- **Run in CI**: Configure continuous integration execution +- **Global Functions**: Create reusable functions for test suites + +## Accessing the Test Suite Panel + +1. **Navigate to Test Suites** + - Go to your Keploy dashboard + - Click on **Test Suites** from the main navigation + +2. **Open Suite Panel** + - Click on any test suite to open its details + - The suite panel opens with various action buttons and settings tabs + +3. **Panel Layout** + ``` + Test Suite: User Authentication API + ===================================== + [Share] [Run] [Settings] [⋮ More Actions] + + Tabs: [Tests] [Variables] [Functions] [Assertions] [CI/CD] + ``` + +## Action 1: Sharing Test Suites + +### Share Options + +**Access**: Click the **Share** button in the suite panel + +**Sharing Methods**: +- **Team Members**: Share with specific users in your organization +- **Public Link**: Generate a public link for external sharing +- **Export**: Download suite as a file for offline sharing + +### Sharing Process + +1. **Click Share Button** + ``` + Share "User Authentication API" Suite + ==================================== + + Share with: + ☐ Team Members + ☐ External Users + ☐ Generate Public Link + ☐ Export as File + ``` + +2. **Configure Sharing Settings** + ``` + Permissions: + ☐ View Only (read-only access) + ☐ Edit (can modify tests) + ☐ Execute (can run tests) + ☐ Admin (full control) + + Expiration: [30 days ▼] + Password Protection: [Optional] + ``` + +3. **Generate Share Link** + ``` + Generated Link: + https://app.keploy.io/shared/suite/abc123xyz + + Actions: + [Copy Link] [Send Email] [Download QR Code] + ``` + +## Action 2: Running Test Suites + +### Run Configuration + +**Access**: Click the **Run** button in the suite panel + +**Execution Options**: +``` +Run Configuration +================= + +Environment: [Staging ▼] +Execution Mode: + ☐ Sequential (one test at a time) + ☑ Parallel (multiple tests simultaneously) + +Parallel Settings: + Max Concurrent Tests: [5] + Timeout per Test: [30 seconds] + +Retry Policy: + Failed Tests: [Retry 2 times] + Retry Delay: [5 seconds] + +Data Options: + ☐ Use Test Data + ☐ Generate Random Data + ☑ Use Global Variables +``` + +### Execution Monitoring + +Real-time execution progress: +``` +Execution Progress: 15 of 20 tests completed +========================================= + +✅ Login API Test (0.8s) +✅ Register User Test (1.2s) +✅ Password Reset Test (0.9s) +🔄 Profile Update Test (running...) +⏳ Logout Test (queued) +⏳ Delete Account Test (queued) + +Success Rate: 85% | Avg Response Time: 1.1s +``` + +## Action 3: Bulk Edit Schema Assertions + +### Schema Assertion Editor + +**Access**: Go to **Assertions** tab in the suite panel + +**Bulk Operations Available**: +- **Add Assertions**: Apply new assertions to multiple tests +- **Modify Assertions**: Update existing assertions across tests +- **Remove Assertions**: Delete specific assertions from multiple tests +- **Template Application**: Apply assertion templates to selected tests + +### Bulk Editing Process + +1. **Select Tests for Bulk Edit** + ``` + Tests in Suite (20 total) + ======================== + ☑ Select All + ☑ Login API Test + ☑ Register User Test + ☑ Password Reset Test + ☐ Profile Update Test + ☐ Logout Test + + Selected: 3 tests + ``` + +2. **Choose Assertion Type** + ``` + Assertion Categories + =================== + + 📊 Response Validation: + ├── Status Code Assertions + ├── Response Time Assertions + ├── Header Validations + └── Content-Type Checks + + 🔍 Content Validation: + ├── JSON Schema Validation + ├── Required Fields Check + ├── Data Type Validation + └── Value Range Validation + + 🔐 Security Assertions: + ├── Authentication Headers + ├── HTTPS Enforcement + └── CORS Validation + ``` + +3. **Configure Assertions** + ``` + JSON Schema Assertion + ==================== + + Field: response.user.id + Type: [number ▼] + Required: ☑ Yes + Validation Rules: + Min Value: [1] + Max Value: [999999] + + Field: response.user.email + Type: [string ▼] + Required: ☑ Yes + Pattern: [^[^\s@]+@[^\s@]+\.[^\s@]+$] + + Apply to: 3 selected tests + ``` + +## Action 4: Add Global Variables + +### Global Variable Management + +**Access**: Go to **Variables** tab in the suite panel + +**Variable Types**: +- **Environment Variables**: Different values per environment +- **Static Variables**: Fixed values across all tests +- **Dynamic Variables**: Generated at runtime +- **Secret Variables**: Encrypted sensitive data + +### Adding Global Variables + +1. **Create New Variable** + ``` + Add Global Variable + ================== + + Variable Name: [api_base_url] + Variable Type: [Environment ▼] + + Environment Values: + Development: https://api-dev.example.com + Staging: https://api-staging.example.com + Production: https://api.example.com + + Description: Base URL for API endpoints + ``` + +2. **Variable Categories** + ``` + 🌍 Environment Variables: + ├── api_base_url + ├── database_host + └── auth_service_url + + 🔐 Authentication: + ├── api_key (secret) + ├── auth_token (dynamic) + └── client_secret (secret) + + 📊 Test Data: + ├── test_user_id + ├── sample_email + └── default_timeout + + ⚙️ Configuration: + ├── max_retry_attempts + ├── request_timeout + └── parallel_execution_count + ``` + +3. **Variable Usage in Tests** + ``` + Example Usage in Test Request: + ============================= + + URL: {{api_base_url}}/users/{{test_user_id}} + Headers: + Authorization: Bearer {{auth_token}} + Content-Type: application/json + + Body: + { + "email": "{{sample_email}}", + "timeout": {{default_timeout}} + } + ``` + +## Action 5: Run in CI + +### CI/CD Integration Setup + +**Access**: Go to **CI/CD** tab in the suite panel + +**Available CI Platforms**: +- GitHub Actions +- GitLab CI/CD +- Jenkins +- Azure DevOps +- CircleCI +- Custom Webhooks + +### CI Configuration Process + +1. **Select CI Platform** + ``` + Choose CI/CD Platform + ==================== + + ☑ GitHub Actions + ☐ GitLab CI/CD + ☐ Jenkins + ☐ Azure DevOps + ☐ CircleCI + ☐ Custom Webhook + ``` + +2. **Generate CI Configuration** + ```yaml + # Generated GitHub Actions Workflow + name: API Tests - User Authentication Suite + + on: + push: + branches: [ main, develop ] + pull_request: + branches: [ main ] + schedule: + - cron: '0 6 * * *' # Daily at 6 AM + + jobs: + api-tests: + runs-on: ubuntu-latest + steps: + - uses: actions/checkout@v3 + + - name: Run Keploy Test Suite + uses: keploy/test-action@v1 + with: + suite-id: 'user-auth-suite-123' + environment: 'staging' + parallel: true + max-concurrent: 5 + env: + KEPLOY_API_KEY: ${{ secrets.KEPLOY_API_KEY }} + ``` + +3. **CI Execution Settings** + ``` + CI Execution Configuration + ========================= + + Trigger Conditions: + ☑ On Push to Main Branch + ☑ On Pull Request + ☑ Scheduled (Daily at 6 AM) + ☐ Manual Trigger Only + + Execution Environment: + Environment: [Staging ▼] + Parallel Execution: ☑ Enabled + Max Workers: [5] + Timeout: [10 minutes] + + Failure Handling: + ☑ Fail build on test failure + ☑ Send notifications on failure + ☐ Auto-retry failed tests + ``` + +## Action 6: Global Functions + +### Function Management + +**Access**: Go to **Functions** tab in the suite panel + +**Function Types**: +- **Pre-request Functions**: Execute before each test +- **Post-response Functions**: Execute after each test response +- **Utility Functions**: Reusable helper functions +- **Validation Functions**: Custom assertion logic + +### Creating Global Functions + +1. **Add New Function** + ``` + Create Global Function + ===================== + + Function Name: [generateAuthToken] + Function Type: [Pre-request ▼] + + Function Code: + ```javascript + function generateAuthToken(request, context) { + const timestamp = Date.now(); + const signature = crypto.createHmac('sha256', context.secret_key) + .update(`${timestamp}${request.method}${request.url}`) + .digest('hex'); + + return { + 'X-Auth-Token': `${timestamp}.${signature}`, + 'X-Timestamp': timestamp + }; + } + ``` + +2. **Function Categories** + ``` + 🔧 Utility Functions: + ├── generateRandomId() + ├── formatTimestamp() + ├── encodeBase64() + └── validateEmail() + + 🔐 Authentication: + ├── generateAuthToken() + ├── refreshToken() + └── validateSession() + + 📊 Data Processing: + ├── normalizeResponse() + ├── extractErrorCode() + └── calculateChecksum() + + ✅ Validation: + ├── validateSchema() + ├── checkResponseTime() + └── verifyHeaders() + ``` + +3. **Function Usage Examples** + ```javascript + // Pre-request function usage + function beforeRequest(request, context) { + // Add authentication + const authHeaders = generateAuthToken(request, context); + request.headers = { ...request.headers, ...authHeaders }; + + // Add request ID for tracking + request.headers['X-Request-ID'] = generateRandomId(); + + return request; + } + + // Post-response validation + function afterResponse(response, context) { + // Validate response schema + const isValid = validateSchema(response.body, context.expectedSchema); + if (!isValid) { + throw new Error('Response schema validation failed'); + } + + // Check performance + if (response.time > context.maxResponseTime) { + console.warn(`Slow response: ${response.time}ms`); + } + + return response; + } + ``` + +## Advanced Suite Configuration + +### Suite-Level Settings + +**Access**: Click **Settings** button in suite panel + +**Configuration Options**: +``` +Suite Configuration +================== + +General Settings: + Suite Name: [User Authentication API] + Description: [Complete authentication flow tests] + Owner: [team-backend] + +Execution Settings: + Default Environment: [Staging] + Default Timeout: [30 seconds] + Max Retry Attempts: [3] + Parallel Execution: ☑ Enabled + +Data Management: + ☑ Preserve test data between runs + ☑ Auto-cleanup temporary data + ☐ Use production data (warning) + +Notifications: + ☑ Email on failure + ☑ Slack integration + ☐ SMS alerts + +Security: + ☑ Encrypt sensitive variables + ☑ Audit log access + ☑ Require approval for modifications +``` + +### Suite Templates + +Save and reuse suite configurations: +``` +Save as Template +=============== + +Template Name: [Standard API Test Suite] +Description: [Default configuration for API testing] + +Include in Template: +☑ Variable definitions +☑ Global functions +☑ Assertion templates +☑ CI/CD configuration +☐ Test data (large datasets) + +Apply Template to: +☐ New test suites only +☐ Existing suites (with confirmation) +``` + +## Monitoring and Analytics + +### Suite Performance Dashboard + +``` +Suite Analytics Dashboard +======================== + +📊 Execution Statistics (Last 30 Days): +├── Total Runs: 1,247 +├── Success Rate: 94.2% +├── Average Duration: 4m 32s +└── Most Common Failures: Authentication timeout + +📈 Trends: +├── Success Rate: ↗️ +2.1% (improving) +├── Response Time: ↘️ -120ms (faster) +└── Test Coverage: ↗️ +5 new assertions + +🔍 Top Issues: +├── Flaky Test: "Password Reset" (12% failure rate) +├── Slow Endpoint: "/users/profile" (avg 2.1s) +└── Missing Assertion: Response headers validation +``` + +## Best Practices + +### Suite Organization + +1. **Logical Grouping** + - Group related API endpoints together + - Separate by functional areas (auth, payments, etc.) + - Use consistent naming conventions + +2. **Variable Management** + - Use environment-specific variables + - Avoid hardcoding sensitive data + - Document variable purposes + +3. **Function Reusability** + - Create modular, single-purpose functions + - Use descriptive function names + - Include error handling + +### Performance Optimization + +1. **Execution Efficiency** + - Enable parallel execution for independent tests + - Set appropriate timeouts + - Use test data factories + +2. **Resource Management** + - Clean up test data after execution + - Monitor suite execution times + - Optimize slow-running tests + +## Troubleshooting + +### Common Issues + +1. **Suite Won't Run** + - Check environment connectivity + - Verify variable values + - Review function syntax + +2. **Bulk Operations Failing** + - Reduce operation scope + - Check individual test permissions + - Verify schema compatibility + +3. **CI Integration Issues** + - Validate API keys and secrets + - Check network connectivity + - Review execution logs + +### Getting Help + +- **Documentation**: Review individual feature guides +- **Support**: Contact support with suite execution logs +- **Community**: Ask questions in Keploy forums +- **API Reference**: Check API documentation for programmatic access + +## Related Features + +- **[Individual Test Management](./api-testing-edit-suites.md)**: Edit specific tests +- **[Label Management](./api-testing-adding-labels.md)**: Organize with labels +- **[Selective Execution](./api-testing-running-selective.md)**: Run specific tests +- **[Sharing & Reports](./api-testing-sharing-reports.md)**: Share results + +The test suite panel provides a comprehensive control center for managing all aspects of your API test suites, from basic execution to advanced automation and collaboration features. \ No newline at end of file diff --git a/versioned_sidebars/version-4.0.0-sidebars.json b/versioned_sidebars/version-4.0.0-sidebars.json index b6cfb8963..877443c8b 100644 --- a/versioned_sidebars/version-4.0.0-sidebars.json +++ b/versioned_sidebars/version-4.0.0-sidebars.json @@ -174,7 +174,22 @@ "running-keploy/api-testing-custom-assertions", "running-keploy/api-testing-assertion-tree", "running-keploy/api-testing-sharing-reports", + "running-keploy/api-testing-buggy-suites", + "running-keploy/api-testing-mark-unbuggy", + "running-keploy/api-testing-running-selective", + "running-keploy/api-testing-adding-labels", + "running-keploy/api-testing-suite-settings", + "running-keploy/api-testing-add-suite", + "running-keploy/api-testing-local-agent", + "running-keploy/api-testing-filter-suites", + "running-keploy/api-testing-generation-history", + "running-keploy/api-testing-run-report", + "running-keploy/api-testing-bulk-assertions", "running-keploy/api-testing-auth-setup", + "running-keploy/api-testing-schema-coverage", + "running-keploy/api-testing-edit-assertions", + + { "type": "doc", "label": "FAQs", From 2bfdbe6c80c92953785d873fcbafce42907875c6 Mon Sep 17 00:00:00 2001 From: TvisharajiK Date: Fri, 13 Feb 2026 14:54:52 +0530 Subject: [PATCH 03/14] label fix --- .../version-4.0.0/running-keploy/api-testing-add-suite.md | 2 +- versioned_sidebars/version-4.0.0-sidebars.json | 2 +- 2 files changed, 2 insertions(+), 2 deletions(-) diff --git a/versioned_docs/version-4.0.0/running-keploy/api-testing-add-suite.md b/versioned_docs/version-4.0.0/running-keploy/api-testing-add-suite.md index 18175d167..4149ecafb 100644 --- a/versioned_docs/version-4.0.0/running-keploy/api-testing-add-suite.md +++ b/versioned_docs/version-4.0.0/running-keploy/api-testing-add-suite.md @@ -1,5 +1,5 @@ --- -id: api-testing-add-suites +id: api-testing-add-suite title: Adding New Test Suites description: Guide to adding to new Suites using "Add New" sidebar_label: Adding New Suite diff --git a/versioned_sidebars/version-4.0.0-sidebars.json b/versioned_sidebars/version-4.0.0-sidebars.json index 877443c8b..b690de232 100644 --- a/versioned_sidebars/version-4.0.0-sidebars.json +++ b/versioned_sidebars/version-4.0.0-sidebars.json @@ -173,6 +173,7 @@ "running-keploy/api-testing-edit-suites", "running-keploy/api-testing-custom-assertions", "running-keploy/api-testing-assertion-tree", + "running-keploy/api-testing-auth-setup", "running-keploy/api-testing-sharing-reports", "running-keploy/api-testing-buggy-suites", "running-keploy/api-testing-mark-unbuggy", @@ -185,7 +186,6 @@ "running-keploy/api-testing-generation-history", "running-keploy/api-testing-run-report", "running-keploy/api-testing-bulk-assertions", - "running-keploy/api-testing-auth-setup", "running-keploy/api-testing-schema-coverage", "running-keploy/api-testing-edit-assertions", From fa20e68297ef815d91e99a774b8358fdda8b9ba7 Mon Sep 17 00:00:00 2001 From: TvisharajiK Date: Fri, 13 Feb 2026 15:10:16 +0530 Subject: [PATCH 04/14] fixed build --- .../api-testing-edit-assertions.md | 667 ++---------------- 1 file changed, 41 insertions(+), 626 deletions(-) diff --git a/versioned_docs/version-4.0.0/running-keploy/api-testing-edit-assertions.md b/versioned_docs/version-4.0.0/running-keploy/api-testing-edit-assertions.md index 7e6d7451e..a2eb502d4 100644 --- a/versioned_docs/version-4.0.0/running-keploy/api-testing-edit-assertions.md +++ b/versioned_docs/version-4.0.0/running-keploy/api-testing-edit-assertions.md @@ -17,651 +17,66 @@ This guide explains how to edit test suites in Keploy, including adding custom v ## Overview -Keploy provides powerful editing capabilities that allow you to customize your test suites with variables and custom assertion functions. You can define variables that are either global (available across all test suites) or local (specific to a single test suite), and create reusable assertion functions to validate complex scenarios. +Editing a test suite allows you to: -## Editing a Test Suite +- Modify API request details (URL, headers, body, method) +- Create and manage **global** and **local** variables +- Update or replace existing assertions +- Add **custom assertion functions** +- Write reusable validation logic for request or response -### Accessing Edit Mode +This gives you fine-grained control over how your APIs are validated. -1. **Navigate to Test Suite** - - Go to your test suite list - - Locate the test suite you want to edit -2. **Edit Individual Test Steps** - - Within the test suite, you can edit individual test steps - - Click on "Edit Step" for the specific step you want to modify +## Accessing Test Suite Edit Mode -## Adding Variables +### Step 1: Navigate to Test Suites -### Variable Types +1. Go to your **Test Suites** +2. Click on the **Test Suite** +3. Locate the suite you want to modify -Keploy supports two types of variables: +### Step 2: Open Test Step Editor -1. **Global Variables**: Available across all test suites in your project -2. **Local Variables**: Scoped to the current test suite only +#### Using Three Dots Menu -### Adding Variables to URL Path +1. Click the **three dots (⋮)** next to the test suite +2. Select **"Edit Test Step"** +3. The Test Step Editor will open -Variables can be used in URL paths to make tests more flexible and reusable: +Editing the Request -#### Example: Using Variables in URL +Inside the Test Step Editor, you can modify: -**Before:** -``` -GET https://api.example.com/users/12345 -``` - -**After (with variable):** -``` -GET https://api.example.com/users/{{userId}} -``` - -#### Steps to Add URL Variables - -1. **Edit the Test Step** - - Click on "Edit Step" for the test you want to modify - - Locate the URL/endpoint field - -2. **Insert Variable Syntax** - - Use double curly braces: `{{variableName}}` - - Example: `/api/v1/users/{{userId}}/orders/{{orderId}}` - -3. **Define Variable Value** - - Choose variable scope: Global or Local - - Set the variable value - - Save the variable - -### Adding Variables to Request Body - -Variables can also be used in request payloads: - -#### Example: Using Variables in Request Body - -**Before:** -```json -{ - "username": "john_doe", - "email": "john@example.com", - "age": 30 -} -``` - -**After (with variables):** -```json -{ - "username": "{{username}}", - "email": "{{userEmail}}", - "age": {{userAge}} -} -``` - -#### Steps to Add Body Variables - -1. **Edit the Request Body** - - In the test step editor, locate the request body section - - Identify fields you want to make variable - -2. **Replace Values with Variables** - - Use `{{variableName}}` syntax - - For strings: `"{{variableName}}"` - - For numbers/booleans: `{{variableName}}` (without quotes) - -3. **Define Variable Values** - - Create the variable in the variables panel - - Set as Global or Local - - Assign the value - -### Variable Management Interface - -``` -┌──────────────────────────────────────────────────────────────────┐ -│ Edit Test Step │ -├──────────────────────────────────────────────────────────────────┤ -│ │ -│ URL: https://api.example.com/users/{{userId}} │ -│ │ -│ Request Body: │ -│ { │ -│ "name": "{{userName}}", │ -│ "email": "{{userEmail}}", │ -│ "role": "{{userRole}}" │ -│ } │ -│ │ -│ ┌────────────────────────────────────────────────────────────┐ │ -│ │ Variables [+ Add Variable]│ │ -│ ├────────────────────────────────────────────────────────────┤ │ -│ │ │ │ -│ │ Name: userId │ │ -│ │ Value: 12345 │ │ -│ │ Scope: ○ Global ● Local │ │ -│ │ │ │ -│ │ Name: userName │ │ -│ │ Value: John Doe │ │ -│ │ Scope: ● Global ○ Local │ │ -│ │ │ │ -│ │ Name: userEmail │ │ -│ │ Value: john@example.com │ │ -│ │ Scope: ● Global ○ Local │ │ -│ │ │ │ -│ │ Name: userRole │ │ -│ │ Value: admin │ │ -│ │ Scope: ○ Global ● Local │ │ -│ │ │ │ -│ └────────────────────────────────────────────────────────────┘ │ -│ │ -│ [Cancel] [Save Step] │ -│ │ -└──────────────────────────────────────────────────────────────────┘ -``` - -### Creating Custom Variables - -#### Local Variables - -1. **Click "+ Add Variable"** - - In the variables panel, click to add a new variable - -2. **Configure Local Variable** - - **Name**: Enter the variable name (e.g., `userId`) - - **Value**: Set the variable value (e.g., `12345`) - - **Scope**: Select "Local" radio button - - **Description**: Optional description for documentation - -3. **Use in Test Step** - - Reference using `{{variableName}}` - - Local variables are only available in the current test suite - -#### Global Variables - -1. **Click "+ Add Variable"** - - Add a new variable in the variables panel - -2. **Configure Global Variable** - - **Name**: Enter the variable name (e.g., `baseUrl`) - - **Value**: Set the variable value (e.g., `https://api.example.com`) - - **Scope**: Select "Global" radio button - - **Description**: Document the variable's purpose - -3. **Availability** - - Global variables are available across all test suites - - Useful for common values like API endpoints, tokens, etc. - -### Dynamic Variables - -Use dynamic variables for special values: -- `{{$timestamp}}`: Current timestamp -- `{{$randomInt}}`: Random integer -- `{{$randomString}}`: Random string -- `{{$uuid}}`: Random UUID -- `{{$currentDate}}`: Current date -- `{{$randomEmail}}`: Random email address - -## Custom Assertions - -### What are Custom Assertions? - -Custom assertions allow you to define complex validation logic beyond simple field comparisons. You can create JavaScript functions to validate responses in sophisticated ways. - -### Assertion Types - -1. **Built-in Assertions**: Standard assertions (equals, contains, greater than, etc.) -2. **Global Functions**: Reusable custom functions available across all tests -3. **Custom Functions**: One-off functions specific to a test step - -### Adding Custom Assertion Functions - -#### Using Global Functions - -1. **Navigate to Assertions Section** - - In the test step editor, locate the assertions panel - - Click "+ Add Assertion" - -2. **Select Global Function** - - Choose "Use Global Function" option - - Select from available global functions - - Configure function parameters if needed - -#### Example: Using Global Function - -``` -┌──────────────────────────────────────────────────────────────────┐ -│ Assertions [+ Add Assertion]│ -├──────────────────────────────────────────────────────────────────┤ -│ │ -│ Assertion 1: │ -│ Function: validateEmail [Global] │ -│ Field: response.body.email │ -│ Expected: Valid email format │ -│ │ -│ Assertion 2: │ -│ Function: checkPriceRange [Global] │ -│ Field: response.body.price │ -│ Min: 0 │ -│ Max: 1000 │ -│ │ -└──────────────────────────────────────────────────────────────────┘ -``` - -#### Writing Custom Functions - -1. **Add Custom Assertion** - - Click "+ Add Assertion" - - Select "Write Custom Function" - -2. **Write Function Logic** - - Write JavaScript code to validate the response - - Access response data via function parameters - - Return true for pass, false for fail - -3. **Save to Global Functions (Optional)** - - After writing the function, you can save it - - Click "Save to Global Functions" - - Name the function for reuse - - Add description and documentation - -### Custom Function Interface - -``` -┌──────────────────────────────────────────────────────────────────┐ -│ Add Custom Assertion │ -├──────────────────────────────────────────────────────────────────┤ -│ │ -│ Function Type: │ -│ ○ Use Global Function │ -│ ● Write Custom Function │ -│ │ -│ Function Code: │ -│ ┌────────────────────────────────────────────────────────────┐ │ -│ │ function customAssertion(response, expected) { │ │ -│ │ // Access response data │ │ -│ │ const actualValue = response.body.data.length; │ │ -│ │ │ │ -│ │ // Custom validation logic │ │ -│ │ if (actualValue >= expected.minLength && │ │ -│ │ actualValue <= expected.maxLength) { │ │ -│ │ return { │ │ -│ │ passed: true, │ │ -│ │ message: "Array length is within range" │ │ -│ │ }; │ │ -│ │ } │ │ -│ │ │ │ -│ │ return { │ │ -│ │ passed: false, │ │ -│ │ message: `Expected length between ${expected.minLength}│ │ -│ │ and ${expected.maxLength}, got ${actualValue}`│ │ -│ │ }; │ │ -│ │ } │ │ -│ └────────────────────────────────────────────────────────────┘ │ -│ │ -│ Expected Parameters: │ -│ { │ -│ "minLength": 1, │ -│ "maxLength": 100 │ -│ } │ -│ │ -│ ☑ Save to Global Functions │ -│ Function Name: validateArrayLength │ -│ Description: Validates array length is within specified range │ -│ │ -│ [Test Function] [Cancel] [Add Assertion] │ -│ │ -└──────────────────────────────────────────────────────────────────┘ -``` - -### Custom Function Examples - -#### Example 1: Email Validation +```yaml +Method: GET +URL: https://api.example.com/users/{{user_id}} -```javascript -function validateEmail(response) { - const email = response.body.email; - const emailRegex = /^[^\s@]+@[^\s@]+\.[^\s@]+$/; - - return { - passed: emailRegex.test(email), - message: emailRegex.test(email) - ? "Valid email format" - : `Invalid email: ${email}` - }; -} -``` - -#### Example 2: Date Range Validation - -```javascript -function validateDateRange(response, expected) { - const responseDate = new Date(response.body.createdAt); - const startDate = new Date(expected.startDate); - const endDate = new Date(expected.endDate); - - const isInRange = responseDate >= startDate && responseDate <= endDate; - - return { - passed: isInRange, - message: isInRange - ? "Date is within range" - : `Date ${responseDate} is outside range ${startDate} to ${endDate}` - }; -} -``` - -#### Example 3: Complex Object Validation - -```javascript -function validateUserObject(response, expected) { - const user = response.body.user; - const errors = []; - - // Check required fields - if (!user.id) errors.push("Missing user.id"); - if (!user.email) errors.push("Missing user.email"); - if (!user.name) errors.push("Missing user.name"); - - // Check field types - if (typeof user.id !== 'number') errors.push("user.id must be a number"); - if (typeof user.email !== 'string') errors.push("user.email must be a string"); - - // Check field formats - if (user.email && !user.email.includes('@')) { - errors.push("user.email must be valid email"); - } - - // Check expected values - if (expected.role && user.role !== expected.role) { - errors.push(`Expected role ${expected.role}, got ${user.role}`); - } - - return { - passed: errors.length === 0, - message: errors.length === 0 - ? "User object is valid" - : errors.join('; ') - }; -} -``` - -#### Example 4: Response Time Validation - -```javascript -function validateResponseTime(response, expected) { - const responseTime = response.time; // milliseconds - const maxTime = expected.maxResponseTime; - - return { - passed: responseTime <= maxTime, - message: responseTime <= maxTime - ? `Response time ${responseTime}ms is acceptable` - : `Response time ${responseTime}ms exceeds limit of ${maxTime}ms` - }; -} -``` - -#### Example 5: Custom Business Logic - -```javascript -function validateOrderTotal(response, expected) { - const order = response.body.order; - const items = order.items; - - // Calculate expected total - let calculatedTotal = 0; - for (let item of items) { - calculatedTotal += item.price * item.quantity; - } - - // Add tax - calculatedTotal += calculatedTotal * (order.taxRate || 0); - - // Add shipping - calculatedTotal += order.shippingCost || 0; - - // Compare with response total - const difference = Math.abs(calculatedTotal - order.total); - const tolerance = expected.tolerance || 0.01; - - return { - passed: difference <= tolerance, - message: difference <= tolerance - ? `Order total ${order.total} is correct` - : `Order total mismatch: expected ${calculatedTotal}, got ${order.total}` - }; -} -``` - -## Managing Global Functions - -### Viewing Global Functions - -1. **Navigate to Global Functions** - - Go to Settings or Test Management - - Click on "Global Functions" or "Function Library" - -2. **Browse Functions** - - View all saved global functions - - See function descriptions and usage examples - - Check function parameters - -### Creating Global Functions - -1. **Click "+ New Global Function"** - - Open the global function editor - -2. **Define Function** - - **Name**: Unique function name - - **Description**: Purpose and usage - - **Parameters**: Expected input parameters - - **Code**: Function implementation - - **Examples**: Usage examples - -3. **Save Function** - - Function becomes available across all test suites - - Can be used in any assertion - -### Editing Global Functions - -1. **Select Function to Edit** - - Find the function in the global functions list - - Click "Edit" - -2. **Modify Function** - - Update code, parameters, or description - - Test the changes - -3. **Save Changes** - - Updated function is available immediately - - Existing tests using the function are updated - -### Deleting Global Functions - -1. **Select Function** - - Find the function to delete - - Click "Delete" - -2. **Confirm Deletion** - - Warning: Check if function is used in existing tests - - Confirm deletion - -## Complete Workflow Example +Headers: + Authorization: Bearer {{auth_token}} -### Scenario: Testing User Registration - -1. **Edit Test Suite** - - Click "Edit Suite" on the user registration test - -2. **Edit Step: Create User** - - Click "Edit Step" on the POST /api/v1/users request - -3. **Add Variables to Request Body** - ```json - { - "username": "{{newUsername}}", - "email": "{{newUserEmail}}", - "password": "{{newUserPassword}}", - "age": {{newUserAge}} - } - ``` - -4. **Define Local Variables** - - `newUsername`: "test_user_{{$timestamp}}" (Local) - - `newUserEmail`: "test{{$randomInt}}@example.com" (Local) - - `newUserPassword`: "SecurePass123!" (Local) - - `newUserAge`: 25 (Local) - -5. **Add Global Variable** - - `apiBaseUrl`: "https://api.example.com" (Global) - - Update URL to: `{{apiBaseUrl}}/v1/users` - -6. **Add Custom Assertions** - - **Assertion 1: Use Global Function** - - Function: `validateEmail` - - Field: `response.body.email` - - **Assertion 2: Custom Function** - ```javascript - function validateNewUser(response, expected) { - const user = response.body; - - // Check user was created with correct data - if (user.username !== expected.username) { - return { passed: false, message: "Username mismatch" }; - } - - // Check user ID was generated - if (!user.id || typeof user.id !== 'number') { - return { passed: false, message: "Invalid user ID" }; - } - - // Check password is not returned - if (user.password) { - return { passed: false, message: "Password should not be in response" }; - } - - // Check timestamps - if (!user.createdAt) { - return { passed: false, message: "Missing createdAt timestamp" }; - } - - return { passed: true, message: "User created successfully" }; - } - ``` - - **Assertion 3: Save Custom Function to Global** - - Click "Save to Global Functions" - - Name: `validateNewUser` - - Description: "Validates user creation response" - -7. **Save Test Step** - - All changes are saved - - Variables and assertions are active - -8. **Run Test** - - Variables are substituted with values - - Custom assertions are executed - - Results show pass/fail with custom messages - -## Best Practices - -### Variable Management - -1. **Use Global Variables for Common Values** - - API base URLs - - Authentication tokens - - Environment-specific settings - - Common test data - -2. **Use Local Variables for Test-Specific Data** - - Unique identifiers - - Test case-specific values - - Temporary data - -3. **Naming Conventions** - - Use camelCase: `userId`, `apiBaseUrl` - - Be descriptive: `adminUserToken` instead of `token1` - - Group related variables: `user_id`, `user_name`, `user_email` - -4. **Dynamic Variables** - - Use built-in dynamic variables for unique values - - Prevents conflicts in concurrent test runs - - Ensures test data freshness - -### Custom Assertions - -1. **Write Clear Functions** - - Use descriptive function names - - Add comments explaining logic - - Return meaningful error messages - -2. **Reuse Through Global Functions** - - Save commonly used validations as global functions - - Maintain consistency across tests - - Easier to update validation logic - -3. **Handle Edge Cases** - - Check for null/undefined values - - Validate data types - - Handle unexpected response formats - -4. **Provide Helpful Error Messages** - - Include actual vs expected values - - Explain what went wrong - - Suggest potential fixes - -5. **Test Your Functions** - - Use the "Test Function" button - - Validate with different inputs - - Ensure functions work as expected - -## Advanced Features - -### Variable Chaining - -Use variables within variables: -```json -{ - "apiUrl": "{{baseUrl}}/{{apiVersion}}/{{endpoint}}" -} +Body: + email: "{{email}}" ``` -### Environment Variables +You can: -Switch between environments: -- Development: `baseUrl = "https://dev.api.example.com"` -- Staging: `baseUrl = "https://staging.api.example.com"` -- Production: `baseUrl = "https://api.example.com"` +- Change HTTP method +- Update endpoint path +- Modify headers +- Edit JSON payload +- Inject variables into any field -### Response Variable Extraction +### Using Variables for dynamic tests -Extract values from responses for use in subsequent steps: -```javascript -// In assertion, extract and save value -const userId = response.body.id; -saveVariable('userId', userId, 'local'); -``` - -### Conditional Assertions - -Apply assertions based on conditions: -```javascript -function conditionalAssertion(response, expected) { - // Only validate price if item is in stock - if (response.body.inStock) { - if (response.body.price <= 0) { - return { passed: false, message: "Price must be positive for in-stock items" }; - } - } - - return { passed: true, message: "Validation passed" }; -} -``` +For understanding how to use variables : -## Benefits +## Editing Existing Assertions +You can choose from multiple assertion categories: +- Status Code Assertion +- Header Assertion +- Body / JSON Path Assertion +- Schema Assertion +- Adding Custom Assertions: For custom assertions using functions refer: -- **Flexibility**: Customize tests for different scenarios -- **Reusability**: Share variables and functions across tests -- **Maintainability**: Update values in one place -- **Scalability**: Easily manage large test suites -- **Validation Power**: Implement complex business logic validation -- **Consistency**: Standardize assertions across the team -By leveraging custom variables and assertion functions, you can create powerful, flexible, and maintainable test suites that accurately validate your API behavior. From 4ef0d263f592464a4814d55711b748d46bf3d839 Mon Sep 17 00:00:00 2001 From: TvisharajiK Date: Sun, 15 Feb 2026 19:28:06 +0530 Subject: [PATCH 05/14] edits1/2 --- src/css/custom.css | 4 +- src/theme/Heading/styles.module.css | 2 +- tailwind.config.js | 8 + .../running-keploy/api-testing-add-suite.md | 11 +- .../api-testing-adding-labels.md | 304 +----------------- .../api-testing-assertion-tree.md | 29 +- .../api-testing-buggy-suites.md | 78 +---- .../api-testing-bulk-assertions.md | 106 +----- .../api-testing-edit-assertions.md | 19 +- .../api-testing-filter-suites.md | 46 +-- .../api-testing-generation-history.md | 46 +-- .../running-keploy/api-testing-local-agent.md | 33 +- .../api-testing-mark-unbuggy.md | 172 +--------- .../running-keploy/api-testing-run-report.md | 11 +- .../api-testing-running-selective.md | 5 +- .../api-testing-schema-coverage.md | 4 +- .../api-testing-suite-settings.md | 4 +- .../version-4.0.0-sidebars.json | 18 +- 18 files changed, 103 insertions(+), 797 deletions(-) diff --git a/src/css/custom.css b/src/css/custom.css index 1df207d36..a3dcdd48d 100644 --- a/src/css/custom.css +++ b/src/css/custom.css @@ -1465,11 +1465,11 @@ article.markdown p { /* Heading hierarchy - clear visual distinction */ article.markdown h1 { margin-top: 0; - margin-bottom: 1rem; + margin-bottom: 0.9rem; font-size: 2.5rem; font-weight: 800; letter-spacing: -0.03em; - line-height: 1.2; + line-height: 1.4; color: #111827; } diff --git a/src/theme/Heading/styles.module.css b/src/theme/Heading/styles.module.css index ba959ca0e..6c7043c19 100644 --- a/src/theme/Heading/styles.module.css +++ b/src/theme/Heading/styles.module.css @@ -4,7 +4,7 @@ the browser does not scroll that anchor behind the navbar See https://twitter.com/JoshWComeau/status/1332015868725891076 */ .anchorWithStickyNavbar { - scroll-margin-top: calc(var(--ifm-navbar-height) + 0.5rem); + scroll-margin-top: calc(var(--ifm-navbar-height) + 0.2rem); } .anchorWithHideOnScrollNavbar { diff --git a/tailwind.config.js b/tailwind.config.js index 252cdaf25..9703b5dc6 100644 --- a/tailwind.config.js +++ b/tailwind.config.js @@ -28,6 +28,7 @@ module.exports = { color: "var(--ifm-color)", h1: { color: "var(--ifm-color)", + lineHeight: "1.5", }, h2: { color: "var(--ifm-color)", @@ -98,6 +99,13 @@ module.exports = { }, }, }, + lg: { + css: { + h1: { + lineHeight: "1.2", + }, + }, + }, }, transitionDelay: { 3000: "3000ms", diff --git a/versioned_docs/version-4.0.0/running-keploy/api-testing-add-suite.md b/versioned_docs/version-4.0.0/running-keploy/api-testing-add-suite.md index 4149ecafb..3402aec8b 100644 --- a/versioned_docs/version-4.0.0/running-keploy/api-testing-add-suite.md +++ b/versioned_docs/version-4.0.0/running-keploy/api-testing-add-suite.md @@ -9,7 +9,9 @@ tags: - test-suite - test-management --- -# Adding a Test Suite +import ProductTier from '@site/src/components/ProductTier'; + + In this guide, we will walk through the process of adding a test suite in Keploy. Users can either manually provide the details for the test suite or directly import a curl command to create one. @@ -24,7 +26,8 @@ In this guide, we will walk through the process of adding a test suite in Keploy - **Name**: Enter a unique name for the test suite. - **Details**: Provide a brief description of the test suite. - **Request**: Specify the request details, such as the HTTP method, URL, headers, and body. - - **Associations**: Define any associations or dependencies related to the test suite. + - **Assertions**: Define any Assertions related to the test suite. +![Add Suite](https://keploy-devrel.s3.us-west-2.amazonaws.com/add-new-suite-1.png) 3. **Import a Curl Command (Optional)** - If you have a curl command, you can directly import it to create the test suite. @@ -51,9 +54,7 @@ In this guide, we will walk through the process of adding a test suite in Keploy "username": "test_user", "password": "secure_password" } - }, - "associations": ["auth-service", "user-database"] -} + }} ``` ### Importing a Curl Command diff --git a/versioned_docs/version-4.0.0/running-keploy/api-testing-adding-labels.md b/versioned_docs/version-4.0.0/running-keploy/api-testing-adding-labels.md index 274ed1fb4..de7c2a91c 100644 --- a/versioned_docs/version-4.0.0/running-keploy/api-testing-adding-labels.md +++ b/versioned_docs/version-4.0.0/running-keploy/api-testing-adding-labels.md @@ -10,13 +10,15 @@ tags: - test-management --- -# Adding Labels to Test Suites +import ProductTier from '@site/src/components/ProductTier'; + + Labels help you organize, categorize, and filter your test suites effectively. Keploy provides flexible labeling options that allow you to add labels to individual test suites or multiple suites at once. ## Overview -The labeling system in Keploy offers: +The labeling system includes: - **Individual Labeling**: Add labels to specific test suites - **Bulk Labeling**: Apply labels to multiple suites simultaneously @@ -28,26 +30,16 @@ The labeling system in Keploy offers: ### Method 1: Using the Three Dots Menu 1. **Navigate to Test Suites** - - Go to your Keploy dashboard - - Click on the **Test Suites** section + - Go to your Test Suites Dashboard 2. **Access Suite Options** - Locate the test suite you want to label - Click the **three dots (⋮)** menu next to the test suite name - - The menu appears in the top-right area of each suite row 3. **Select Add Label Option** - - From the dropdown menu, click **"Add Label"** or **"Manage Labels"** - - A label management dialog will open - -### Method 2: From Suite Details Page + - From the dropdown menu, click **"Add Labels"** -1. **Open Test Suite** - - Click on the test suite name to open its details page - -2. **Find Label Section** - - Look for the **"Labels"** or **"Tags"** section in the suite header - - Click the **"+ Add Label"** button +![Add Label](https://keploy-devrel.s3.us-west-2.amazonaws.com/add-labels-1.png) ## Label Assignment Interface @@ -57,21 +49,9 @@ When you open the label assignment dialog, you'll see: ``` 🏷️ Available Labels ├── 📊 Priority -│ ├── high-priority -│ ├── medium-priority -│ └── low-priority -├── 🌍 Environment -│ ├── production -│ ├── staging -│ └── development -├── 👥 Team -│ ├── team-frontend -│ ├── team-backend -│ └── team-qa -└── 🔍 Type - ├── smoke-test - ├── regression - └── integration +│ ├── high-priority (P0) +│ ├── medium-priority(P1) +│ └── low-priority(P2) ``` ### Assigning Existing Labels @@ -97,40 +77,14 @@ When you open the label assignment dialog, you'll see: - Follow the steps above to open the label assignment interface 2. **Create New Label** - - Click **"Create New Label"** or the **"+"** button + - Click **"Create Custom Label"** - Enter label details in the creation form 3. **Label Creation Form** + - For Example: ``` Label Name: [smoke-critical] - Category: [Type] (dropdown) Color: [🔴] (color picker) - Description: [Critical smoke tests that must pass] - ``` - -4. **Save and Apply** - - Click **"Create Label"** to save the new label - - The new label will automatically be selected for the current suite - - Click **"Apply Labels"** to complete the assignment - -### Pre-creating Labels - -You can also create labels in advance: - -1. **Access Label Management** - - Go to **Settings** → **Label Management** - - Or click **"Manage All Labels"** from any label dialog - -2. **Create Label Categories** - ``` - Category: Priority - Labels: critical, high, medium, low - - Category: Environment - Labels: prod, staging, dev, local - - Category: Team - Labels: frontend, backend, qa, devops ``` ## Bulk Label Assignment @@ -140,36 +94,7 @@ You can also create labels in advance: 1. **Select Multiple Suites** - Navigate to the Test Suites list - Use checkboxes to select multiple test suites - - Or click **"Select All"** to choose all visible suites - -2. **Access Bulk Actions** - - After selecting suites, a bulk actions toolbar appears - - Click **"Add Labels"** or **"Manage Labels"** button - -3. **Bulk Label Dialog** - ``` - Selected Suites: 5 suites - ├── User Authentication Suite - ├── Payment Processing Suite - ├── Order Management Suite - ├── Notification Suite - └── Report Generation Suite - - Actions: - ☐ Add labels (append to existing) - ☐ Replace labels (remove existing, add new) - ☐ Remove specific labels - ``` - -4. **Choose Action Type** - - **Add Labels**: Append new labels to existing ones - - **Replace Labels**: Remove all existing labels and add new ones - - **Remove Labels**: Remove specific labels from all selected suites - -5. **Select Labels** - - Choose from existing labels or create new ones - - Preview shows which suites will be affected - - Click **"Apply to Selected Suites"** + - After selecting suites, Click **"Add Labels"** or **"Create Custom Labels"** button ## Label Management Best Practices @@ -199,209 +124,6 @@ You can also create labels in advance: Status: active, deprecated, experimental ``` -### Label Hierarchy - -Organize labels in a logical hierarchy: - -``` -🏢 Organization Level -├── 🌍 Environment -│ ├── production -│ ├── staging -│ └── development -├── 👥 Team Ownership -│ ├── team-auth -│ ├── team-payments -│ └── team-notifications -├── 📊 Test Classification -│ ├── type-smoke -│ ├── type-regression -│ └── type-integration -└── ⚡ Priority Level - ├── priority-p0 - ├── priority-p1 - └── priority-p2 -``` - -## Using Labels for Organization - -### Filtering by Labels - -1. **Filter Interface** - ``` - Filters: [Environment: staging] [Team: backend] [Priority: high] - - Results: 12 test suites found - ├── ✅ User Service API Tests (staging, backend, high) - ├── ✅ Payment Gateway Tests (staging, backend, high) - └── ✅ Order Processing Tests (staging, backend, high) - ``` - -2. **Combine Multiple Filters** - - Use AND logic: Show suites with ALL selected labels - - Use OR logic: Show suites with ANY selected labels - - Exclude labels: Show suites WITHOUT specific labels - -### Search by Labels - -``` -Search Examples: -- label:high-priority -- label:team-frontend OR label:team-backend -- label:smoke-test AND label:production -- -label:deprecated (exclude deprecated suites) -``` - -## Advanced Label Operations - -### Conditional Labeling - -Apply labels based on conditions: - -``` -IF suite.name CONTAINS "auth" - THEN add labels: [team-auth, security] - -IF suite.environment == "production" - THEN add labels: [critical, monitored] - -IF suite.last_run < 30_days_ago - THEN add labels: [stale, review-needed] -``` - -### Label Automation - -Set up automatic labeling rules: - -1. **Auto-labeling on Creation** - ```yaml - rules: - - if: suite_name matches "smoke*" - labels: [type-smoke, priority-high] - - if: created_by == "ci-pipeline" - labels: [automated, ci-generated] - ``` - -2. **Schedule-based Labeling** - ```yaml - scheduled_rules: - - schedule: "daily" - condition: last_run > 7_days - action: add_label "needs-attention" - ``` - -## Label Analytics and Reporting - -### Label Distribution - -View how labels are distributed across your test suites: - -``` -Label Usage Report -================== -📊 Priority Labels: -├── high-priority: 45 suites (23%) -├── medium-priority: 89 suites (45%) -└── low-priority: 63 suites (32%) - -🌍 Environment Labels: -├── production: 67 suites (34%) -├── staging: 78 suites (39%) -└── development: 52 suites (27%) - -👥 Team Labels: -├── team-frontend: 34 suites (17%) -├── team-backend: 56 suites (28%) -└── team-qa: 23 suites (12%) -``` - -### Label-based Success Rates - -Track test success rates by label: - -``` -Success Rate by Label -==================== -🏷️ high-priority: 94% success rate -🏷️ team-backend: 89% success rate -🏷️ production: 97% success rate -🏷️ smoke-test: 92% success rate -``` - -## Troubleshooting - -### Common Issues - -1. **Cannot Add Labels** - - **Check Permissions**: Ensure you have edit access to the test suite - - **Verify Suite Status**: Make sure the suite isn't currently running - - **Browser Issues**: Clear cache and refresh the page - -2. **Labels Not Appearing** - - **Refresh View**: Reload the test suites page - - **Check Filters**: Verify that filters aren't hiding labeled suites - - **Sync Issues**: Wait a moment for changes to propagate - -3. **Bulk Operations Failing** - - **Selection Limit**: Reduce the number of selected suites - - **Permission Issues**: Ensure you have bulk edit permissions - - **Server Load**: Try again during lower usage periods - -### Best Practices for Troubleshooting - -1. **Start Small** - - Test labeling with one suite first - - Gradually increase to bulk operations - -2. **Verify Changes** - - Check that labels appear correctly after assignment - - Test filtering with newly added labels - -3. **Document Issues** - - Note any error messages for support - - Record steps that led to the problem - -## Integration Examples - -### API Usage - -```bash -# Add labels via API -curl -X POST "https://api.keploy.io/test-suites/{suite-id}/labels" \ - -H "Authorization: Bearer your-token" \ - -H "Content-Type: application/json" \ - -d '{ - "labels": ["high-priority", "team-backend", "production"] - }' - -# Bulk label assignment -curl -X POST "https://api.keploy.io/test-suites/bulk-labels" \ - -H "Authorization: Bearer your-token" \ - -H "Content-Type: application/json" \ - -d '{ - "suite_ids": ["suite-1", "suite-2", "suite-3"], - "action": "add", - "labels": ["regression", "nightly-run"] - }' -``` - -### CI/CD Integration - -```yaml -# GitHub Actions example -- name: Label Test Suites - run: | - # Label suites based on changed files - if [[ "${{ github.event_name }}" == "pull_request" ]]; then - keploy label add --suites $AFFECTED_SUITES --labels "pr-validation" - fi - - # Label based on branch - if [[ "${{ github.ref }}" == "refs/heads/main" ]]; then - keploy label add --suites $ALL_SUITES --labels "main-branch" - fi -``` - ## Related Features - **[Test Suite Management](./api-testing-edit-suites.md)**: Edit and organize test suites diff --git a/versioned_docs/version-4.0.0/running-keploy/api-testing-assertion-tree.md b/versioned_docs/version-4.0.0/running-keploy/api-testing-assertion-tree.md index 4925e25da..a89527c4b 100644 --- a/versioned_docs/version-4.0.0/running-keploy/api-testing-assertion-tree.md +++ b/versioned_docs/version-4.0.0/running-keploy/api-testing-assertion-tree.md @@ -36,6 +36,7 @@ Instead of viewing tests as isolated steps, the Assertion Tree gives you a compl 3. The system renders the full test suite in a **tree format** --- +![Assertion tree](https://keploy-devrel.s3.us-west-2.amazonaws.com/assertion-tree-1.png) ## What You Can See @@ -44,8 +45,6 @@ The Assertion Tree provides a visual representation of: - All test steps in execution order - Request details for each step - Attached assertions -- Response validations -- Parent-child relationships between steps (if applicable) Each node in the tree represents a test step and contains: @@ -55,8 +54,6 @@ Each node in the tree represents a test step and contains: This makes it easier to understand how your test suite behaves as a complete workflow. ---- - ## What You Can Do The Assertion Tree is fully interactive. You can: @@ -64,8 +61,6 @@ The Assertion Tree is fully interactive. You can: ### 1. View Complete Flow Understand the entire API workflow from start to finish without switching between screens. ---- - ### 2. Inspect Assertions Inline Quickly see which assertions are attached to each step, including: @@ -75,8 +70,6 @@ Quickly see which assertions are attached to each step, including: - Schema validations - Custom function validations ---- - ### 3. Add a New Step in the Flow You can insert a new test step directly within the tree. @@ -90,21 +83,6 @@ This allows you to: The new step becomes part of the structured execution sequence. ---- - -### 4. Modify Existing Steps - -From the tree view, you can: - -- Edit request configurations -- Update assertions -- Adjust execution order -- Refine validation logic - -All changes reflect directly in the test suite. - ---- - ## Why Use the Assertion Tree? The Assertion Tree is particularly useful when: @@ -117,8 +95,6 @@ The Assertion Tree is particularly useful when: It transforms test management from a flat list into a structured execution graph. ---- - ## Typical Use Cases - Authentication → Resource Creation → Validation → Cleanup flows @@ -127,8 +103,6 @@ It transforms test management from a flat list into a structured execution graph - Webhook-triggered event testing - Integration testing across services ---- - ## Best Practices - Use the tree view to design full workflows before adding assertions @@ -137,6 +111,5 @@ It transforms test management from a flat list into a structured execution graph - Review flow dependencies to avoid unintended execution order - Use visualization to debug failing multi-step tests faster ---- The Assertion Tree enables you to design, inspect, and extend complex API workflows with clarity and precision — all from a single visual interface. diff --git a/versioned_docs/version-4.0.0/running-keploy/api-testing-buggy-suites.md b/versioned_docs/version-4.0.0/running-keploy/api-testing-buggy-suites.md index 2c012d35b..31f3289fe 100644 --- a/versioned_docs/version-4.0.0/running-keploy/api-testing-buggy-suites.md +++ b/versioned_docs/version-4.0.0/running-keploy/api-testing-buggy-suites.md @@ -9,14 +9,15 @@ tags: - test-failures - troubleshooting --- +import ProductTier from '@site/src/components/ProductTier'; -# Buggy Test Suites + When Keploy generates tests, some test cases might fail due to various reasons such as endpoint issues, data mismatches, or API changes. The buggy test suites page helps you identify, understand, and fix these failing tests. ## Viewing Buggy Test Suites -Navigate to the test suites generated with the red esclamation icon to view all test suites that contain failing test cases. Each buggy suite displays: +Navigate to the test suites generated with the red exclamation icon to view all test suites that contain failing test cases. Each buggy suite displays: - **Suite Name**: The name of the test suite containing failed tests - **Test Steps**: Steps in the suite @@ -88,22 +89,6 @@ Assertion: json_body_equals Message: Response body structure completely different from expected ``` -### Response Time Assertions -```yaml -Expected: < 2000ms -Actual: 5432ms -Assertion: response_time_less_than -Message: Response time exceeded acceptable threshold -``` - -### Header Assertions -```yaml -Expected: "application/json" -Actual: "text/html" -Assertion: content_type_equals -Message: Content-Type header mismatch indicates server error -``` - ## Debugging Actions For each buggy test case, you can take several debugging actions: @@ -113,7 +98,6 @@ Click on any failed test to see: - Complete request details (URL, headers, body) - Full response details (status, headers, body) - All assertion results with expected vs actual values -- Test execution timeline ### 2. Compare with Recorded Version View the side-by-side comparison between: @@ -141,62 +125,6 @@ If the API behavior has legitimately changed: 2. **Update assertions**: Modify expected values to match new API 3. **Add new test cases**: Cover additional scenarios if needed -## Common Debugging Scenarios - -### Scenario 1: Environment Differences -**Problem**: Tests pass in development but fail in staging/production - -**Solution**: -- Check environment-specific configurations -- Verify database state and test data -- Review environment variables and secrets -- Ensure consistent API versions across environments - -### Scenario 2: Timing Issues -**Problem**: Tests fail intermittently due to timing - -**Solution**: -- Increase response timeout thresholds -- Add delays between dependent API calls -- Review database transaction handling -- Consider eventual consistency in distributed systems - -### Scenario 3: Data Dependencies -**Problem**: Tests fail because required data doesn't exist - -**Solution**: -- Set up proper test data fixtures -- Use data factory patterns for test preparation -- Implement database seeding for test environments -- Review test isolation and cleanup procedures - -## Best Practices for Fixing Buggy Suites - -1. **Start with Environment Verification** - - Ensure all required services are running - - Verify database connectivity and state - - Check configuration and environment variables - -2. **Analyze Failure Patterns** - - Group similar failures together - - Identify if failures are systematic or random - - Look for common root causes across multiple tests - -3. **Fix Root Causes, Not Symptoms** - - Address underlying API issues rather than just updating tests - - Collaborate with development teams on API stability - - Document breaking changes and migration paths - -4. **Maintain Test Quality** - - Regularly review and update test suites - - Remove obsolete or flaky tests - - Add new tests for changed functionality - -5. **Monitor Test Health** - - Set up alerts for test failure rates - - Track test suite reliability over time - - Review test results as part of deployment process - ## Getting Help If you're unable to resolve buggy test suites: diff --git a/versioned_docs/version-4.0.0/running-keploy/api-testing-bulk-assertions.md b/versioned_docs/version-4.0.0/running-keploy/api-testing-bulk-assertions.md index 8ea649bc5..11300bd9f 100644 --- a/versioned_docs/version-4.0.0/running-keploy/api-testing-bulk-assertions.md +++ b/versioned_docs/version-4.0.0/running-keploy/api-testing-bulk-assertions.md @@ -11,17 +11,15 @@ tags: - test-management --- -# Bulk Assertions and Schema Validation +import ProductTier from '@site/src/components/ProductTier'; -This guide explains how to perform bulk assertions in Keploy, allowing you to validate multiple test cases across different endpoints, HTTP methods, and status codes simultaneously. - -## What are Bulk Assertions? + -Bulk assertions enable you to apply validation rules across multiple test suites at once, saving time and ensuring consistency in your API testing. Instead of creating assertions one by one, you can select multiple tests and apply the same assertion criteria to all of them. +This guide explains how to perform bulk assertions in Keploy, allowing you to validate multiple test cases across different endpoints, HTTP methods, and status codes simultaneously. -## What are Schema Assertions? +## What are Schema Bulk Assertions? -Schema assertions allow you to validate the structure and format of API responses. You can choose specific fields from the entire response body to assert, ensuring that your API returns data in the expected format with the correct data types and required fields. +Schema assertions allow you to validate the structure and format of API responses in bulk so that you can choose specific fields from the entire response body to assert ## How to Perform Bulk Assertions @@ -33,19 +31,11 @@ First, use the filtering options to narrow down the tests you want to assert: - **Filter by Status Code**: Filter by response status codes (2xx, 4xx, 5xx, etc.) - **Filter by Test Suite**: Select specific test suite collections -### 2. Select Tests for Bulk Assertion - -- Once filtered, you can select multiple test cases -- Use checkboxes to select individual tests or select all filtered tests -- The selection can span across different endpoints and methods - -### 3. Choose Assertion Fields +### 2. Choose Assertion Fields +Select the configure schema assertions option From the entire response body, you can choose which fields to assert: -- **Response Headers**: Validate specific headers - **Response Body Fields**: Select individual fields from the JSON response -- **Status Codes**: Assert expected status codes -- **Response Time**: Validate performance metrics - **Data Types**: Ensure fields have correct types (string, number, boolean, etc.) - **Required Fields**: Verify that mandatory fields are present @@ -55,8 +45,6 @@ Schema assertions validate the structure of your API responses: - **Field Presence**: Ensure required fields exist in the response - **Data Type Validation**: Verify that fields have the correct data type - **Format Validation**: Check formats like email, URL, date, etc. -- **Nested Object Validation**: Validate complex nested structures -- **Array Validation**: Assert on array properties and elements ### 5. Save and Execute @@ -66,7 +54,7 @@ Schema assertions validate the structure of your API responses: ## Example Use Cases -### Example 1: Asserting User Endpoints +### Example: Asserting User Endpoints ``` Filter by: - Endpoint: /api/v1/users/* @@ -79,90 +67,12 @@ Bulk Assert: - Email format validation ``` -### Example 2: Error Response Validation -``` -Filter by: -- Status Code: 4xx, 5xx -- HTTP Method: POST, PUT, DELETE - -Bulk Assert: -- Response contains: error, message, statusCode -- Data types: error (boolean), message (string), statusCode (number) -- Required fields: error, message -``` - -### Example 3: Performance Testing -``` -Filter by: -- Endpoint: /api/v1/products -- HTTP Method: GET - -Bulk Assert: -- Response time: < 200ms -- Status Code: 200 -- Response contains: products (array), total (number) -``` - -### Example 4: Schema Validation for Multiple Endpoints -``` -Select Multiple Endpoints: -- /api/v1/users -- /api/v1/products -- /api/v1/orders - -Schema Assertions: -- All responses have: timestamp, success, data -- timestamp format: ISO 8601 -- success type: boolean -- data type: object or array -``` ## Benefits of Bulk Assertions - **Time Efficiency**: Apply assertions to multiple tests simultaneously - **Consistency**: Ensure uniform validation across similar endpoints - **Maintainability**: Update assertions for multiple tests at once -- **Comprehensive Testing**: Validate complex scenarios across different endpoints -- **Schema Compliance**: Ensure API responses adhere to defined schemas -- **Reduced Errors**: Less manual work means fewer mistakes - -## Schema Assertion Features - -### Supported Validations - -1. **Type Checking** - - String, Number, Boolean, Object, Array, Null - - Custom type definitions - -2. **Format Validation** - - Email, URL, UUID, Date, Time, DateTime - - Custom regex patterns - -3. **Range Validation** - - Minimum and maximum values for numbers - - String length constraints - - Array size limits - -4. **Required Fields** - - Mark fields as mandatory - - Conditional requirements based on other fields - -5. **Nested Object Validation** - - Deep validation of complex structures - - Array of objects validation - -6. **Custom Assertions** - - Define custom validation logic - - Combine multiple assertion rules - -## Best Practices - -1. **Start with Filters**: Use filters to group similar tests before applying bulk assertions -2. **Incremental Assertions**: Start with basic assertions and add more complex ones gradually -3. **Review Before Applying**: Always review the selected tests before applying bulk assertions -4. **Use Schema Templates**: Create reusable schema templates for common response structures -5. **Version Control**: Keep track of schema changes across API versions -6. **Document Assertions**: Add descriptions to complex assertions for team clarity ## Tips for Effective Schema Assertions diff --git a/versioned_docs/version-4.0.0/running-keploy/api-testing-edit-assertions.md b/versioned_docs/version-4.0.0/running-keploy/api-testing-edit-assertions.md index a2eb502d4..429de14d2 100644 --- a/versioned_docs/version-4.0.0/running-keploy/api-testing-edit-assertions.md +++ b/versioned_docs/version-4.0.0/running-keploy/api-testing-edit-assertions.md @@ -11,7 +11,9 @@ tags: - test-management --- -# Editing Test Suites and Custom Assertions +import ProductTier from '@site/src/components/ProductTier'; + + This guide explains how to edit test suites in Keploy, including adding custom variables to URLs and request bodies, and creating custom assertion functions for advanced test validation. @@ -33,17 +35,11 @@ This gives you fine-grained control over how your APIs are validated. ### Step 1: Navigate to Test Suites 1. Go to your **Test Suites** -2. Click on the **Test Suite** -3. Locate the suite you want to modify - -### Step 2: Open Test Step Editor - -#### Using Three Dots Menu - -1. Click the **three dots (⋮)** next to the test suite 2. Select **"Edit Test Step"** 3. The Test Step Editor will open +![Edit Assertions](https://keploy-devrel.s3.us-west-2.amazonaws.com/edit-assertions-1.png) + Editing the Request Inside the Test Step Editor, you can modify: @@ -67,16 +63,11 @@ You can: - Edit JSON payload - Inject variables into any field -### Using Variables for dynamic tests - -For understanding how to use variables : - ## Editing Existing Assertions You can choose from multiple assertion categories: - Status Code Assertion - Header Assertion - Body / JSON Path Assertion - Schema Assertion -- Adding Custom Assertions: For custom assertions using functions refer: diff --git a/versioned_docs/version-4.0.0/running-keploy/api-testing-filter-suites.md b/versioned_docs/version-4.0.0/running-keploy/api-testing-filter-suites.md index 616a9f156..3cea7f7df 100644 --- a/versioned_docs/version-4.0.0/running-keploy/api-testing-filter-suites.md +++ b/versioned_docs/version-4.0.0/running-keploy/api-testing-filter-suites.md @@ -9,7 +9,10 @@ tags: - test-suite - test-management --- -# Filtering Test Suites + +import ProductTier from '@site/src/components/ProductTier'; + + This guide explains how to filter test suites in Keploy to quickly find and manage your API tests. You can apply various filters to narrow down your test suites based on different criteria. @@ -52,21 +55,9 @@ Keploy provides multiple filtering options to help you efficiently locate and or ## How to Apply Filters -1. **Access the Filter Panel** - - Navigate to the test suites section in Keploy - - Look for the filter icon or filter panel - -2. **Select Filter Criteria** - - Choose one or more filter options from the available categories - - Filters can be combined for more precise results - -3. **Apply Filters** - - Click "Apply" or the filters will be applied automatically - - The test suite list will update to show only matching results - -4. **Clear Filters** - - Use the "Clear Filters" or "Reset" button to remove all active filters - - Return to viewing all test suites +- Access the Filter Panel +- Select Filter Criteria +- Click "Apply" or the filters will be applied automatically ## Example Use Cases @@ -76,27 +67,6 @@ Filter by Status Code: 4xx, 5xx ``` This will show all tests that resulted in client or server errors. -### Reviewing POST Requests -``` -Filter by HTTP Method: POST -``` -This displays all tests using the POST method. - -### Testing a Specific API -``` -Filter by Endpoint: /api/v1/users -``` -This shows all tests for the users endpoint. - -### Combining Filters -``` -Filter by: -- HTTP Method: GET -- Status Code: 200 -- Endpoint: /api/v1/products -``` -This shows all successful GET requests to the products endpoint. - ## Benefits of Filtering - **Faster Navigation**: Quickly find specific tests without scrolling through long lists @@ -105,4 +75,4 @@ This shows all successful GET requests to the products endpoint. - **Test Analysis**: Understand patterns in your API behavior - **Maintenance**: Easier to update or remove tests for specific endpoints or methods -By using these filtering options, you can efficiently manage and analyze your test suites in Keploy. \ No newline at end of file +By using these filtering options, you can efficiently manage and analyze your test suites. \ No newline at end of file diff --git a/versioned_docs/version-4.0.0/running-keploy/api-testing-generation-history.md b/versioned_docs/version-4.0.0/running-keploy/api-testing-generation-history.md index cd7c1a46e..1680855c2 100644 --- a/versioned_docs/version-4.0.0/running-keploy/api-testing-generation-history.md +++ b/versioned_docs/version-4.0.0/running-keploy/api-testing-generation-history.md @@ -10,14 +10,11 @@ tags: - job-tracking - test-management --- +import ProductTier from '@site/src/components/ProductTier'; -# Test Generation History + -This guide explains how to use the generation history page in Keploy to track and manage your test generation jobs. The history provides detailed insights into each generation run, including acceptance rates, errors, and inputs used. - -## Overview - -The generation history page displays a comprehensive list of all test generation jobs, allowing you to monitor the success rate of your test generations and take action on rejected or buggy tests. +This guide explains how to use the generation history to track and manage your test generation jobs. ## Generation History Features @@ -45,7 +42,6 @@ To view details of a specific generation: 2. **Review Job Statistics** - See the breakdown of accepted, recovered, rejected, and buggy test suites - - Understand the success rate of each generation 3. **Check Input Parameters** - View the inputs used for that generation @@ -66,15 +62,6 @@ If you find rejected test suites that you want to include: - Click on the **+** (plus) icon next to any rejected test suite - This action will add the rejected test to your current list of test suites -3. **Review and Modify** - - The test suite will appear in your current test suite list - - You can now review, edit, and fix any issues - - Make necessary adjustments before running the test - -4. **Re-validate** - - After modifications, re-run the test to validate - - Monitor if it moves from rejected to accepted status - ## Understanding Test Statuses ### Accepted Tests ✅ @@ -82,11 +69,6 @@ If you find rejected test suites that you want to include: - Successfully generated and ready to use - No issues detected in the test suite -### Recovered Tests 🔄 -- Tests that encountered errors but were successfully recovered -- May have required automatic fixes or adjustments -- Review recommended to ensure correctness - ### Rejected Tests ❌ - Tests that failed validation checks - May have incorrect assertions or invalid configurations @@ -112,7 +94,6 @@ If you find rejected test suites that you want to include: │ │ │ Statistics: │ │ ✅ Accepted: 45 │ -│ 🔄 Recovered: 12 │ │ ❌ Rejected: 8 │ │ 🐛 Buggy: 3 │ │ │ @@ -132,7 +113,6 @@ If you find rejected test suites that you want to include: │ │ │ Statistics: │ │ ✅ Accepted: 32 │ -│ 🔄 Recovered: 5 │ │ ❌ Rejected: 15 │ │ 🐛 Buggy: 7 │ │ │ @@ -190,23 +170,3 @@ If you find rejected test suites that you want to include: - Archive old generation jobs periodically - Focus on recent and relevant generations - Keep track of successful generation patterns - -## Filtering and Sorting - -You can filter and sort generation history by: -- **Date Range**: View generations within a specific time period -- **Status**: Filter by acceptance rate or overall status -- **Job ID**: Search for specific generation jobs -- **Endpoint**: Filter by endpoints used in generation -- **Success Rate**: Sort by acceptance percentage - -## Benefits of Generation History - -- **Transparency**: Complete visibility into test generation process -- **Traceability**: Track which inputs produced which tests -- **Quality Control**: Monitor and improve test generation quality -- **Recovery**: Easily recover and fix rejected tests -- **Analytics**: Understand patterns and optimize generation strategy -- **Audit Trail**: Maintain records of all test generation activities - -By leveraging the generation history feature, you can maintain high-quality test suites, recover valuable rejected tests, and continuously improve your API testing strategy. \ No newline at end of file diff --git a/versioned_docs/version-4.0.0/running-keploy/api-testing-local-agent.md b/versioned_docs/version-4.0.0/running-keploy/api-testing-local-agent.md index 12584f72d..348196975 100644 --- a/versioned_docs/version-4.0.0/running-keploy/api-testing-local-agent.md +++ b/versioned_docs/version-4.0.0/running-keploy/api-testing-local-agent.md @@ -9,38 +9,37 @@ tags: - test-suite - test-management --- -# Using the Local Agent +import ProductTier from '@site/src/components/ProductTier'; -This guide explains how to use the local agent in Keploy to test private or local endpoints. Follow the steps below to set up and use the local agent effectively. + + +This guide explains how to use the local agent to test private or local endpoints. Follow the steps below to set up and use the local agent effectively. ## Steps to Use the Local Agent 1. **Enter the Endpoint URL** - - Navigate to the local agent section in the Keploy interface. - Enter the endpoint URL you want to test. This can be a private URL or any other endpoint. - - A default localhost link is also available for convenience. + - You can also enter a localhost link -2. **Download the Keplr Agent** - - Based on your device configuration, download the Keplr agent: +2. **Download the Keploy Agent** + - Based on your device configuration, download the Keploy agent: - **Windows** - **Mac** - **Linux** - - Follow the installation instructions for your operating system. +![Local Agent](https://keploy-devrel.s3.us-west-2.amazonaws.com/local-agent-1.png) -3. **Start the Keplr Agent** +3. **Start the Keploy Agent** - Once the agent is downloaded, start it on your device. - Open the agent interface to ensure it is running and ready to connect. -4. **Connect the Agent** - - After starting the agent, connect it to Keploy. - - Once connected, you can begin making API calls. +![Local Agent](https://keploy-devrel.s3.us-west-2.amazonaws.com/local-agent-2.png) -5. **Record API Calls** - - The Keplr agent will automatically record the API calls you make. - - It will capture the responses and start generating test sheets based on the recorded calls. +4. **Record API Calls** + - The Keploy agent will automatically record the API calls you make. + - It will capture the responses and start generating test suites based on the recorded calls. -6. **Troubleshooting Connection Issues** - - If the local agent fails to connect, you can use the Keplr extension as an alternative. +5. **Troubleshooting Connection Issues** - Ensure that the agent is running and the endpoint URL is correct. + - If the local agent fails to connect, you can use the Keploy extension as an alternative [Record API Tests via Chrome Extension](https://keploy.io/docs/running-keploy/api-testing-chrome-extension/) -By following these steps, you can efficiently use the local agent to test your APIs and generate test sheets automatically. \ No newline at end of file +By following these steps, you can efficiently use the local agent to test your APIs and generate test suites automatically. \ No newline at end of file diff --git a/versioned_docs/version-4.0.0/running-keploy/api-testing-mark-unbuggy.md b/versioned_docs/version-4.0.0/running-keploy/api-testing-mark-unbuggy.md index 135623cf7..b15975303 100644 --- a/versioned_docs/version-4.0.0/running-keploy/api-testing-mark-unbuggy.md +++ b/versioned_docs/version-4.0.0/running-keploy/api-testing-mark-unbuggy.md @@ -10,7 +10,9 @@ tags: - debugging --- -# Mark Test Suite as Unbuggy +import ProductTier from '@site/src/components/ProductTier'; + + After resolving issues in a buggy test suite, you can mark it as unbuggy to indicate that the problems have been addressed and the suite is functioning correctly again. @@ -29,74 +31,26 @@ Mark a test suite as unbuggy when: ### Step 1: Navigate to the Test Suite -1. Go to your Keploy dashboard -2. Navigate to the **Test Suites** section -3. Click on the specific test suite you want to mark as unbuggy +1. Navigate to the **Test Suites** section +2. Click on the specific test suite you want to mark as unbuggy ### Step 2: Access Suite Options Once you're on the test suite page: 1. Look for the **three dots (⋮)** menu next to the test suite name -2. The menu is typically located in the top-right area of the suite header -3. Click on the three dots to open the context menu - -### Step 3: Mark as Unbuggy - -From the context menu: - -1. Select **"Unmark Buggy"** from the dropdown options +2. Select **"Unmark Buggy"** from the dropdown options ## What Happens When You Mark a Suite as Unbuggy ### Immediate Changes -- **Status Update**: The suite status changes from "Buggy" to "Active" or "Passing" -- **Visual Indicator**: The suite will no longer appear with error indicators -- **Dashboard Update**: The suite is moved out of the buggy suites list -- **Notification**: A success notification confirms the status change - -### Ongoing Behavior - +- **Status Update**: The suite status changes from "Buggy" to "Active" - **Future Runs**: The suite will run normally in subsequent test executions - **Reporting**: The suite will be included in standard test reports - **Monitoring**: Keploy will continue monitoring the suite for new issues - **History**: The previous buggy status and resolution are logged in the suite history -## Best Practices - -### Before Marking as Unbuggy - -1. **Verify All Fixes** - ```bash - # Run the test suite manually to confirm fixes - keploy test --test-sets "your-suite-name" - ``` - -2. **Check All Test Cases** - - Ensure every test in the suite is passing - - Verify no intermittent failures remain - - Confirm all assertions are working correctly - -3. **Test in Multiple Environments** - - Run tests in staging environment - - Verify production-like conditions - - Check with realistic data volumes - -### Documentation - -1. **Record Resolution Steps** - - Document what was fixed - - Note any API changes made - - Record configuration updates - -2. **Update Test Documentation** - - Modify test descriptions if needed - - Update expected behaviors - - Add notes about resolution - -## Common Scenarios for Marking as Unbuggy - ### 1. API Endpoint Restored **Scenario**: A 404 error was resolved by fixing the API endpoint @@ -118,118 +72,6 @@ curl -X POST https://api.example.com/owners \ 2. Verify all required fields are present 3. Confirm data types are correct -### 3. Authentication Resolved - -**Scenario**: Authentication issues were fixed by updating credentials - -**Before marking unbuggy**: -1. Test with new authentication tokens -2. Verify permissions are sufficient -3. Check token expiration dates - -### 4. Environment Configuration Fixed - -**Scenario**: Environment-specific issues were resolved - -**Verification checklist**: -- [ ] Database connections working -- [ ] Environment variables set correctly -- [ ] Required services are running -- [ ] Network connectivity is stable - -## Bulk Operations - -### Mark Multiple Suites as Unbuggy - -If you have multiple suites to mark as unbuggy: - -1. **From the Buggy Suites List**: - - Use checkboxes to select multiple suites - - Click the bulk actions menu - - Select "Mark Selected as Unbuggy" - -2. **From Individual Suite Pages**: - - Process each suite individually - - Verify fixes for each suite separately - - Document resolutions for tracking - -## Monitoring After Marking as Unbuggy - -### Automated Monitoring - -Keploy automatically monitors unbuggy suites for: -- New test failures -- Performance regressions -- Schema changes -- API availability issues - -### Manual Verification - -Regularly check that previously buggy suites remain stable: - -1. **Weekly Reviews** - - Check suite success rates - - Monitor execution times - - Review error logs - -2. **After Deployments** - - Run critical test suites - - Verify no regressions introduced - - Check environment stability - -## Troubleshooting - -### Unable to Mark as Unbuggy - -If you can't find the option to mark as unbuggy: - -1. **Check Permissions** - - Ensure you have edit permissions for the test suite - - Verify your account has the necessary role - -2. **Suite Status** - - Confirm the suite is currently marked as buggy - - Check if recent test runs are still failing - -3. **Browser Issues** - - Refresh the page and try again - - Clear browser cache if needed - - Try using a different browser - -### Accidental Marking - -If you accidentally marked a suite as unbuggy: - -1. **Re-run the Suite** - - Execute the test suite again - - If issues persist, it will automatically be marked as buggy - -2. **Manual Review** - - Check the suite execution results - - Review individual test case outcomes - - Mark as buggy again if needed - -## Related Actions - -After marking a suite as unbuggy, you might want to: - -- **Schedule Regular Runs**: Set up automated execution schedules -- **Update Documentation**: Revise test suite documentation -- **Share Results**: Notify team members of the resolution -- **Review Similar Suites**: Check other suites for similar issues - -## Integration with CI/CD - -When marking suites as unbuggy in CI/CD pipelines: - -```yaml -# Example GitHub Action -- name: Mark Suite as Unbuggy - if: ${{ steps.test.outputs.all_passed == 'true' }} - run: | - keploy suite mark-unbuggy --suite-id ${{ env.SUITE_ID }} -``` - This ensures that suites are automatically marked as unbuggy when automated fixes resolve issues. Remember: Marking a suite as unbuggy should only be done after thoroughly verifying that all issues have been resolved and the suite is functioning correctly. \ No newline at end of file diff --git a/versioned_docs/version-4.0.0/running-keploy/api-testing-run-report.md b/versioned_docs/version-4.0.0/running-keploy/api-testing-run-report.md index e5765c14b..8fd35180b 100644 --- a/versioned_docs/version-4.0.0/running-keploy/api-testing-run-report.md +++ b/versioned_docs/version-4.0.0/running-keploy/api-testing-run-report.md @@ -10,14 +10,11 @@ tags: - test-results - test-management --- +import ProductTier from '@site/src/components/ProductTier'; -# Test Run Reports + -This guide explains how to use the run report page in Keploy to track and analyze your test execution results. The run reports provide comprehensive insights into test performance, failures, and bugs with detailed diagnostic information. - -## Overview - -The run report page displays a list of all test execution runs, allowing you to monitor test results, identify failures, and debug issues efficiently. Each report provides detailed information about individual test cases and their outcomes. +This guide explains how to use the run report page to track and analyze your test execution results. ## Run Report List View @@ -26,7 +23,7 @@ The run report page displays a list of all test execution runs, allowing you to For each test run, you can view: 1. **Report ID**: Unique identifier for the test run -2. **Created**: Timestamp when the test run was executed +2. **Created On**: Timestamp when the test run was executed 3. **Creator**: User or system that initiated the test run 4. **Total Suites**: Total number of test suites executed 5. **Status Distribution**: diff --git a/versioned_docs/version-4.0.0/running-keploy/api-testing-running-selective.md b/versioned_docs/version-4.0.0/running-keploy/api-testing-running-selective.md index 437e36748..107438e12 100644 --- a/versioned_docs/version-4.0.0/running-keploy/api-testing-running-selective.md +++ b/versioned_docs/version-4.0.0/running-keploy/api-testing-running-selective.md @@ -10,7 +10,10 @@ tags: - test-management --- -# Running Selective Test Suites + +import ProductTier from '@site/src/components/ProductTier'; + + Keploy allows you to select specific test suites from your test collection and perform bulk actions like running tests, deleting suites, or adding labels. This selective approach helps you manage large test collections efficiently and run only the tests you need. diff --git a/versioned_docs/version-4.0.0/running-keploy/api-testing-schema-coverage.md b/versioned_docs/version-4.0.0/running-keploy/api-testing-schema-coverage.md index cecf4a6d1..0922fdcbb 100644 --- a/versioned_docs/version-4.0.0/running-keploy/api-testing-schema-coverage.md +++ b/versioned_docs/version-4.0.0/running-keploy/api-testing-schema-coverage.md @@ -11,7 +11,9 @@ tags: - test-management --- -# Schema Coverage and Generation +import ProductTier from '@site/src/components/ProductTier'; + + This guide explains how to use the schema coverage page in Keploy to analyze your API schema coverage and automatically generate additional test suites to cover missing scenarios. diff --git a/versioned_docs/version-4.0.0/running-keploy/api-testing-suite-settings.md b/versioned_docs/version-4.0.0/running-keploy/api-testing-suite-settings.md index 8c68124a1..e51f893de 100644 --- a/versioned_docs/version-4.0.0/running-keploy/api-testing-suite-settings.md +++ b/versioned_docs/version-4.0.0/running-keploy/api-testing-suite-settings.md @@ -10,7 +10,9 @@ tags: - bulk-operations --- -# Test Suite Settings & Actions +import ProductTier from '@site/src/components/ProductTier'; + + The test suite panel in Keploy provides a comprehensive set of actions and settings to manage your test suites effectively. From basic operations like running and sharing tests to advanced features like bulk schema editing and global configurations, the suite panel offers everything you need for efficient test management. diff --git a/versioned_sidebars/version-4.0.0-sidebars.json b/versioned_sidebars/version-4.0.0-sidebars.json index b690de232..e600cc7a2 100644 --- a/versioned_sidebars/version-4.0.0-sidebars.json +++ b/versioned_sidebars/version-4.0.0-sidebars.json @@ -164,32 +164,30 @@ "running-keploy/api-test-generator", "running-keploy/generate-api-tests-using-ai", "running-keploy/api-testing-chrome-extension", - "running-keploy/review-and-improve-ai-generated-tests", + "running-keploy/api-testing-local-agent", + "running-keploy/api-testing-auth-setup", + "running-keploy/api-testing-schema-coverage", "running-keploy/share-tests", "running-keploy/self-healing-ai-api-tests", "running-keploy/run-ai-generated-api-tests", "running-keploy/api-testing-cicd", "running-keploy/api-testing-webhook", + "running-keploy/api-testing-add-suite", "running-keploy/api-testing-edit-suites", + "running-keploy/api-testing-buggy-suites", "running-keploy/api-testing-custom-assertions", "running-keploy/api-testing-assertion-tree", - "running-keploy/api-testing-auth-setup", + "running-keploy/api-testing-bulk-assertions", + "running-keploy/api-testing-edit-assertions", "running-keploy/api-testing-sharing-reports", - "running-keploy/api-testing-buggy-suites", "running-keploy/api-testing-mark-unbuggy", "running-keploy/api-testing-running-selective", "running-keploy/api-testing-adding-labels", + "running-keploy/review-and-improve-ai-generated-tests", "running-keploy/api-testing-suite-settings", - "running-keploy/api-testing-add-suite", - "running-keploy/api-testing-local-agent", "running-keploy/api-testing-filter-suites", "running-keploy/api-testing-generation-history", "running-keploy/api-testing-run-report", - "running-keploy/api-testing-bulk-assertions", - "running-keploy/api-testing-schema-coverage", - "running-keploy/api-testing-edit-assertions", - - { "type": "doc", "label": "FAQs", From 2723f7a5eec49df308acf497084c8474cd7996bb Mon Sep 17 00:00:00 2001 From: TvisharajiK Date: Wed, 18 Feb 2026 15:14:16 +0530 Subject: [PATCH 06/14] Reviewing data --- .../running-keploy/api-testing-run-report.md | 183 +----- .../api-testing-running-selective.md | 297 +--------- .../api-testing-schema-coverage.md | 239 +------- .../api-testing-sharing-reports.md | 8 +- .../api-testing-suite-settings.md | 525 +----------------- .../version-4.0.0-sidebars.json | 2 +- 6 files changed, 35 insertions(+), 1219 deletions(-) diff --git a/versioned_docs/version-4.0.0/running-keploy/api-testing-run-report.md b/versioned_docs/version-4.0.0/running-keploy/api-testing-run-report.md index 8fd35180b..721074be6 100644 --- a/versioned_docs/version-4.0.0/running-keploy/api-testing-run-report.md +++ b/versioned_docs/version-4.0.0/running-keploy/api-testing-run-report.md @@ -2,7 +2,7 @@ id: api-testing-run-report title: Test Run Reports description: Guide to viewing and analyzing test run reports with detailed execution results and filtering -sidebar_label: Run Reports +sidebar_label: Test Run Reports tags: - api-testing - run-reports @@ -23,8 +23,8 @@ This guide explains how to use the run report page to track and analyze your tes For each test run, you can view: 1. **Report ID**: Unique identifier for the test run -2. **Created On**: Timestamp when the test run was executed -3. **Creator**: User or system that initiated the test run +2. **Ran on**: Timestamp when the test run was executed +3. **Ran by**: User or system that initiated the test run 4. **Total Suites**: Total number of test suites executed 5. **Status Distribution**: - **Pass**: Number of test suites that passed ✅ @@ -76,7 +76,7 @@ Click on any report from the list to view detailed execution results: - External API failures affecting the test - Database connection issues -#### Buggy Tests 🐛 +#### Buggy Tests - Tests with identified bugs or inconsistent behavior - **Buggy Reasons Displayed**: - Shown on top of the particular test step @@ -126,15 +126,8 @@ Filter by API endpoint or URL path: 1. **Open Filter Panel** - Click on the filter icon in the report view - Select desired filter criteria + - You can also apply multiple filters simultaneously -2. **Combine Multiple Filters** - - Apply multiple filters simultaneously - - Narrow down results to specific scenarios - - Example: Failed POST requests to /api/v1/users - -3. **Clear Filters** - - Reset filters to view all results - - Remove individual filter criteria ## Detailed Test Step Information @@ -172,8 +165,8 @@ For each test case, you can see: ├─────────────────────────────────────────────────────────────────┤ │ │ │ Report ID: run-2026-02-13-001 │ -│ Created: 2026-02-13 14:25:30 │ -│ Creator: john.doe@example.com │ +│ Ran On: 2026-02-13 14:25:30 │ +│ Ran by: john.doe@example.com │ │ Total Suites: 150 │ │ │ │ Distribution: │ @@ -181,7 +174,7 @@ For each test case, you can see: │ ❌ Fail: 18 (12%) │ │ 🐛 Buggy: 7 (5%) │ │ │ -│ [View Details] │ +│ [Test Suite Details] │ │ │ ├─────────────────────────────────────────────────────────────────┤ │ │ @@ -195,169 +188,11 @@ For each test case, you can see: │ ❌ Fail: 15 (7.5%) │ │ 🐛 Buggy: 5 (2.5%) │ │ │ -│ [View Details] │ +│ [Test Suite Details] │ │ │ └─────────────────────────────────────────────────────────────────┘ ``` -### Detailed Report View Example - -``` -┌─────────────────────────────────────────────────────────────────┐ -│ Run Report: run-2026-02-13-001 │ -│ │ -│ Filters: [Suite Status: All] [Status Code: All] [Method: All] │ -│ │ -├─────────────────────────────────────────────────────────────────┤ -│ │ -│ ❌ FAILED: Create User - POST /api/v1/users │ -│ │ -│ Status Code: 400 Bad Request │ -│ Execution Time: 145ms │ -│ │ -│ Failure Reason: │ -│ - Assertion Failed: Expected status code 201, got 400 │ -│ - Response body validation error │ -│ │ -│ Association Failures: │ -│ - Email validation service returned error │ -│ - Database constraint violation: duplicate email │ -│ │ -│ Test Steps: │ -│ 1. ✅ Prepare request payload │ -│ 2. ✅ Send POST request │ -│ 3. ❌ Validate response status (Expected 201, got 400) │ -│ 4. ❌ Validate response schema (Missing field: userId) │ -│ │ -├─────────────────────────────────────────────────────────────────┤ -│ │ -│ 🐛 BUGGY: Get Product Details - GET /api/v1/products/123 │ -│ │ -│ Status Code: 200 OK │ -│ Execution Time: 2350ms (Timeout Warning) │ -│ │ -│ Buggy Reason (on Step 2): │ -│ - Intermittent timeout on external pricing service │ -│ - Response time exceeded threshold (>2000ms) │ -│ - Inconsistent data: price field sometimes null │ -│ │ -│ Test Steps: │ -│ 1. ✅ Send GET request │ -│ 2. 🐛 Wait for response (2350ms - Slow) │ -│ └─ Error: External pricing API timeout │ -│ 3. ⚠️ Validate response (Warning: price field is null) │ -│ │ -├─────────────────────────────────────────────────────────────────┤ -│ │ -│ ✅ PASSED: Login User - POST /api/v1/auth/login │ -│ │ -│ Status Code: 200 OK │ -│ Execution Time: 95ms │ -│ │ -│ All assertions passed successfully │ -│ │ -└─────────────────────────────────────────────────────────────────┘ -``` - -## Analyzing Test Failures - -### Common Failure Patterns - -1. **Assertion Failures** - - Response doesn't match expected schema - - Incorrect status codes - - Missing or unexpected fields - - Data type mismatches - -2. **Association Failures** - - Dependent service unavailable - - Database connection errors - - Third-party API failures - - Authentication/authorization issues - -3. **Performance Issues** - - Timeout errors - - Slow response times - - Resource exhaustion - -### Debugging Failed Tests - -1. **Review Failure Reasons** - - Read detailed error messages - - Check expected vs actual values - - Identify the failing step - -2. **Check Association Failures** - - Verify dependent services are running - - Check network connectivity - - Review external API status - -3. **Analyze Buggy Tests** - - Review the buggy reason displayed on the test step - - Check for intermittent issues - - Look for patterns in bug occurrences - -4. **Use Filters for Analysis** - - Filter by specific endpoints showing failures - - Group failures by HTTP method - - Analyze status code patterns - -## Report Metrics and Insights - -### Key Metrics - -- **Pass Rate**: Percentage of successful tests -- **Failure Rate**: Percentage of failed tests -- **Bug Rate**: Percentage of buggy tests -- **Average Execution Time**: Mean time across all tests -- **Success Trend**: Historical pass rate over time - -### Performance Insights - -- **Slowest Endpoints**: Identify performance bottlenecks -- **Most Failed Tests**: Tests requiring attention -- **Flaky Tests**: Tests with inconsistent results (buggy) -- **Association Dependencies**: Most common external failures - -## Best Practices - -1. **Regular Report Review** - - Check reports after each test run - - Monitor pass rate trends - - Address failures promptly - -2. **Use Filters Effectively** - - Filter failed tests to prioritize fixes - - Group by endpoint to identify problematic APIs - - Filter by status code to categorize issues - -3. **Document Failures** - - Note recurring failure patterns - - Document association dependencies - - Track bug fixes and resolutions - -4. **Investigate Buggy Tests** - - Review buggy reasons carefully - - Check for timing issues or race conditions - - Stabilize flaky tests - -5. **Monitor Associations** - - Track external service reliability - - Set up alerts for association failures - - Maintain fallback strategies - -6. **Share Reports** - - Share reports with team members - - Include reports in CI/CD pipelines - - Use reports for sprint retrospectives - -## Exporting and Sharing - -- **Export Reports**: Download reports in various formats (PDF, CSV, JSON) -- **Share Links**: Generate shareable links to specific reports -- **Schedule Reports**: Set up automated report distribution -- **Integration**: Connect with project management tools - ## Benefits of Run Reports - **Comprehensive Testing Visibility**: Complete view of test execution results diff --git a/versioned_docs/version-4.0.0/running-keploy/api-testing-running-selective.md b/versioned_docs/version-4.0.0/running-keploy/api-testing-running-selective.md index 107438e12..d1e8756a0 100644 --- a/versioned_docs/version-4.0.0/running-keploy/api-testing-running-selective.md +++ b/versioned_docs/version-4.0.0/running-keploy/api-testing-running-selective.md @@ -15,7 +15,7 @@ import ProductTier from '@site/src/components/ProductTier'; -Keploy allows you to select specific test suites from your test collection and perform bulk actions like running tests, deleting suites, or adding labels. This selective approach helps you manage large test collections efficiently and run only the tests you need. +Keploy allows you to select specific test suites from your test collection and perform bulk actions like running tests, deleting suites, or adding labels. ## Overview @@ -24,25 +24,14 @@ The selective test suite feature provides: - **Checkbox Selection**: Choose individual test suites or select all - **Bulk Actions**: Perform actions on multiple suites simultaneously - **Filtered Execution**: Run only the tests you've selected -- **Efficient Management**: Handle large test collections with ease ## Selecting Test Suites ### Individual Selection 1. **Navigate to Test Suites** - - Go to your Keploy dashboard - - Click on the **Test Suites** section - -2. **Use Checkboxes** - - Each test suite has a checkbox on the left side - - Click the checkbox next to any suite you want to select - - Selected suites will be highlighted with a checkmark ✓ - -3. **Visual Indicators** - - Selected suites show a blue checkmark - - The suite row may be highlighted or have a colored border - - A selection counter appears showing "X suites selected" + - Go to your Test Suite dashboard + - The test suites have a checkbox on the top for multi selection ### Bulk Selection Options @@ -59,41 +48,19 @@ The selective test suite feature provides: 2. Use "Select All" to choose all filtered results 3. Only suites matching your criteria will be selected -#### Select by Pattern -- Use search functionality to find specific suites -- Select all results matching your search criteria -- Combine with filters for more precise selection - ## Available Actions Once you've selected test suites, several bulk actions become available: ### 1. Run Selected Tests -**Button**: **Run Selected** or **Execute Selected** +**Button**: **Run Selector** **What it does**: - Executes all test cases within the selected suites -- Runs tests in parallel or sequential order (configurable) +- Runs tests in sequential order - Provides consolidated results for all selected suites -**Usage**: -``` -1. Select desired test suites using checkboxes -2. Click "Run Selected" button -3. Choose execution options (if prompted): - - Parallel execution (faster) - - Sequential execution (more stable) - - Environment selection -4. Click "Start Execution" -``` - -**Execution Options**: -- **Environment**: Choose target environment (dev, staging, prod) -- **Parallel Runs**: Set number of concurrent executions -- **Timeout Settings**: Configure test timeout values -- **Retry Policy**: Set retry attempts for failed tests - ### 2. Delete Selected Suites **Button**: **Delete Selected** @@ -101,277 +68,29 @@ Once you've selected test suites, several bulk actions become available: **What it does**: - Permanently removes selected test suites - Deletes all test cases within those suites -- Cannot be undone (use with caution) **Safety Features**: - Confirmation dialog before deletion - Shows list of suites to be deleted -- Option to export suites before deletion - -**Usage**: -``` -1. Select test suites to delete -2. Click "Delete Selected" -3. Review the confirmation dialog -4. Type "DELETE" to confirm (if required) -5. Click "Confirm Deletion" -``` ### 3. Add Labels -**Button**: **Add Labels** or **Manage Tags** +**Button**: **Add Labels** **What it does**: - Adds labels/tags to selected test suites - Helps organize and categorize tests -- Enables better filtering and search -**Label Types**: -- **Environment**: `dev`, `staging`, `production` +**Sample Label Types**: - **Priority**: `high`, `medium`, `low` - **Category**: `smoke`, `regression`, `integration` -- **Owner**: `team-frontend`, `team-backend` - **Custom**: Any custom label you define -**Usage**: -``` -1. Select test suites to label -2. Click "Add Labels" -3. Choose from existing labels or create new ones -4. Select multiple labels if needed -5. Click "Apply Labels" -``` - -### 4. Additional Bulk Actions - -#### Export Selected -- Download selected suites as files -- Export in various formats (JSON, CSV, etc.) -- Backup before making changes - -#### Duplicate Selected -- Create copies of selected test suites -- Useful for creating variations or backups -- Maintains original test structure - -#### Move to Folder -- Organize suites into folders or categories -- Bulk organization for better management -- Maintain hierarchical structure - -## Selection Workflow Examples - -### Example 1: Running Smoke Tests - -**Scenario**: Run all smoke tests before deployment - -``` -1. Filter by label: "smoke" -2. Click "Select All" (selects all smoke test suites) -3. Click "Run Selected" -4. Choose "Production" environment -5. Set parallel execution: 5 concurrent runs -6. Click "Start Execution" -``` - -### Example 2: Cleaning Up Old Tests - -**Scenario**: Delete outdated test suites - -``` -1. Filter by creation date: "Older than 6 months" -2. Filter by status: "Not run in 30 days" -3. Review the filtered results -4. Select relevant suites (uncheck any you want to keep) -5. Click "Delete Selected" -6. Confirm deletion after review -``` - -### Example 3: Organizing by Team - -**Scenario**: Add team labels to categorize ownership - -``` -1. Search for suites containing "user-management" -2. Select all relevant suites -3. Click "Add Labels" -4. Add label: "team-backend" -5. Add label: "high-priority" -6. Click "Apply Labels" -``` - -## Selection Management - -### Selection Persistence - -- **Page Navigation**: Selections persist when moving between pages -- **Filter Changes**: Selections maintained when applying new filters -- **Session Duration**: Selections cleared when closing browser/tab - -### Selection Counter - -The interface shows: -``` -✓ 5 suites selected out of 23 total -``` - -### Clear Selection - -**Options to clear selection**: -- Click "Clear Selection" button -- Uncheck "Select All" checkbox -- Refresh the page - ## Best Practices -### Before Running Selected Tests - -1. **Review Selection** - ``` - Verify all intended suites are selected - Check that no critical tests are missing - - Confirm environment settings - ``` - -2. **Check Dependencies** - ``` - - Ensure selected tests don't have interdependencies - - Verify test data requirements - - Confirm service availability - ``` - -3. **Set Appropriate Timeouts** - ``` - - Consider total execution time - - Set realistic timeout values - - Plan for potential failures - ``` - -### Efficient Selection Strategies - -1. **Use Filters First** - - Apply relevant filters before selecting - - Reduce noise and focus on relevant suites - - Combine multiple filters for precision - -2. **Leverage Labels** - - Maintain good labeling practices - - Use consistent naming conventions - - Regular label cleanup and organization - -3. **Batch Operations** - - Group similar actions together - - Avoid frequent small operations - - Plan bulk changes in advance - -## Monitoring Execution - -### Real-time Progress - -When running selected tests: - -``` -Execution Progress: 3 of 5 suites completed -├── ✅ User Authentication Suite (Passed) -├── ✅ Payment Processing Suite (Passed) -├── ⚠️ Order Management Suite (Failed - 2 tests) -├── 🔄 Notification Suite (Running...) -└── ⏳ Report Generation Suite (Queued) -``` - -### Execution Summary - -After completion: -``` -Execution Results Summary -======================== -Total Suites: 5 -✅ Passed: 3 suites -❌ Failed: 2 suites -⏱️ Total Time: 4m 32s -📊 Success Rate: 60% -``` - -## Troubleshooting - -### Selection Issues - -**Problem**: Can't select certain suites -- **Solution**: Check permissions for those suites -- **Check**: Verify suites aren't currently running - -**Problem**: Selection doesn't persist -- **Solution**: Ensure browser cookies are enabled -- **Check**: Verify stable internet connection - -### Execution Issues - -**Problem**: Selected tests won't run -- **Solutions**: - - Verify all selected suites are valid - - Check environment connectivity - - Confirm sufficient system resources - - Review test dependencies - -**Problem**: Bulk actions fail -- **Solutions**: - - Reduce selection size and try again - - Check server capacity and load - - Verify permissions for bulk operations - -## Keyboard Shortcuts - -Enhance your workflow with keyboard shortcuts: - -``` -Ctrl/Cmd + A : Select all visible suites -Ctrl/Cmd + D : Deselect all suites -Spacebar : Toggle selection for highlighted suite -Enter : Run selected suites -Delete : Delete selected suites (with confirmation) -``` - -## Integration with CI/CD - -### API Endpoints for Selective Execution - -```bash -# Run specific test suites via API -curl -X POST "https://api.keploy.io/test-suites/run" \ - -H "Authorization: Bearer your-token" \ - -H "Content-Type: application/json" \ - -d '{ - "suite_ids": ["suite-1", "suite-2", "suite-3"], - "environment": "staging", - "parallel": true, - "max_concurrent": 3 - }' -``` - -### GitHub Actions Example - -```yaml -name: Run Selected API Tests -on: - workflow_dispatch: - inputs: - suite_labels: - description: 'Comma-separated list of suite labels to run' - required: true - default: 'smoke,critical' - -jobs: - run-selective-tests: - runs-on: ubuntu-latest - steps: - - name: Run Selected Test Suites - run: | - keploy test run \ - --labels ${{ github.event.inputs.suite_labels }} \ - --environment staging \ - --parallel 5 -``` - + ## Related Features - **[Test Suite Management](./api-testing-edit-suites.md)**: Edit and organize test suites diff --git a/versioned_docs/version-4.0.0/running-keploy/api-testing-schema-coverage.md b/versioned_docs/version-4.0.0/running-keploy/api-testing-schema-coverage.md index 0922fdcbb..e60b7f2fc 100644 --- a/versioned_docs/version-4.0.0/running-keploy/api-testing-schema-coverage.md +++ b/versioned_docs/version-4.0.0/running-keploy/api-testing-schema-coverage.md @@ -15,7 +15,7 @@ import ProductTier from '@site/src/components/ProductTier'; -This guide explains how to use the schema coverage page in Keploy to analyze your API schema coverage and automatically generate additional test suites to cover missing scenarios. +This guide explains how to use the schema coverage page to analyze your API schema coverage and automatically generate additional test suites to cover missing scenarios. ## Overview @@ -23,15 +23,12 @@ The schema coverage page provides a comprehensive view of how well your test sui ## Accessing Schema Coverage -### From Test Suite - 1. **Navigate to Test Suite** - Go to your test suite view - - Locate the test suite you want to analyze + - Click on the "Schema Coverage" button 2. **Click on Schema Coverage** - Click on the "Schema Coverage" button or link - - This will take you to the schema coverage page for that test suite ## Schema Coverage Page Features @@ -51,9 +48,6 @@ The original schema section displays: View comprehensive coverage statistics: - **Overall Coverage Percentage**: Total schema coverage across all endpoints - **Endpoint Coverage**: Coverage breakdown by API endpoint -- **Field Coverage**: Percentage of schema fields covered by tests -- **Method Coverage**: Coverage by HTTP methods (GET, POST, PUT, DELETE, etc.) -- **Status Code Coverage**: Which response codes are tested - **Covered Lines**: Number of schema lines with test coverage - **Missing Lines**: Number of schema lines without test coverage @@ -73,7 +67,7 @@ View original and generated schemas side by side: │ Schema Coverage Analysis │ ├──────────────────────────────────────────────────────────────────┤ │ │ -│ Total Coverage: 78% ▓▓▓▓▓▓▓▓▓▓▓▓▓▓▓░░░░░ │ +│ Total Coverage: 78% ▓▓▓▓▓▓▓▓▓▓▓▓▓▓▓░░░░░ │ │ │ │ ┌─────────────────────────────┬──────────────────────────────┐ │ │ │ Original Schema │ Keploy Generated Schema │ │ @@ -93,26 +87,17 @@ View original and generated schemas side by side: │ │ address: ❌ Not Covered │ address: ❌ Missing │ │ │ │ role: ⚠️ Partial │ role: ⚠️ Limited values │ │ │ │ │ │ │ -│ └─────────────────────────────┴──────────────────────────────┘ │ -│ │ -│ Missing Coverage: │ -│ • DELETE /api/v1/users/{id} - Not tested │ -│ • User.phone field - No test cases │ -│ • User.address field - No test cases │ -│ • User.role - Only 'user' value tested, missing 'admin', 'guest' │ -│ │ -│ [Cover Missing Lines] │ -│ │ -└──────────────────────────────────────────────────────────────────┘ +│ └─────────────────────────────┴──────────────────────────────┘ │ +│ │ +│ [Cover Missing Lines] │ +│ │ +└─────────────────────────────────────────────────────────────────┘ ``` ## Covering Missing Lines -### Generate Tests for Uncovered Schema - 1. **Click "Cover Missing Lines"** - Locate the "Cover Missing Lines" button on the schema coverage page - - Click to open the test generation dialog 2. **Specify Coverage Requirements** - Define what you want to cover: @@ -123,57 +108,8 @@ View original and generated schemas side by side: - **Status Codes**: Target specific response codes to test - **Data Variations**: Specify value ranges or combinations -3. **Configure Generation Options** - - Example configuration: - ``` - ┌──────────────────────────────────────────────────────────────┐ - │ Generate Tests for Missing Coverage │ - ├──────────────────────────────────────────────────────────────┤ - │ │ - │ Select Endpoints to Cover: │ - │ ☑ DELETE /api/v1/users/{id} │ - │ ☑ PUT /api/v1/users/{id} │ - │ │ - │ Select Fields to Cover: │ - │ ☑ User.phone │ - │ ☑ User.address │ - │ ☑ User.role (all values) │ - │ │ - │ HTTP Methods: │ - │ ☑ GET ☑ POST ☑ PUT ☑ DELETE │ - │ │ - │ Conditions to Test: │ - │ • Valid user deletion │ - │ • Delete non-existent user (404) │ - │ • Unauthorized deletion (401) │ - │ • Update with phone number │ - │ • Update with address │ - │ • Test all role values: admin, user, guest │ - │ │ - │ Expected Status Codes: │ - │ ☑ 200 OK ☑ 201 Created ☑ 204 No Content │ - │ ☑ 400 Bad Request ☑ 401 Unauthorized ☑ 404 Not Found │ - │ │ - │ Additional Options: │ - │ ☑ Generate edge cases │ - │ ☑ Include validation errors │ - │ ☑ Test field combinations │ - │ │ - │ [Cancel] [Generate Test Suites] │ - │ │ - └──────────────────────────────────────────────────────────────┘ - ``` -4. **Generate Additional Test Suites** - - Click "Generate Test Suites" - - Keploy will automatically create tests based on your specifications - - New test suites will be added to your test suite list - - Coverage metrics will be updated - -## Coverage Analysis Features - -### Coverage Visualization +## Coverage Visualization - **Heat Map View**: Visual representation of coverage density - **Color Coding**: @@ -199,21 +135,6 @@ View original and generated schemas side by side: └─ DELETE ✅ 100% ``` -#### Field-Level Coverage -``` -User Schema: -├─ id ✅ 100% (Tested in all operations) -├─ name ✅ 100% (Valid, empty, special chars) -├─ email ✅ 100% (Valid, invalid formats) -├─ phone ❌ 0% (Not tested) -├─ address ❌ 0% (Not tested) -├─ role ⚠️ 33% (Only 'user' tested) -│ ├─ user ✅ Covered -│ ├─ admin ❌ Not covered -│ └─ guest ❌ Not covered -└─ createdAt ✅ 100% -``` - ### Coverage Gaps Identification Keploy automatically identifies: @@ -221,145 +142,5 @@ Keploy automatically identifies: 2. **Missing HTTP Methods**: CRUD operations not tested 3. **Uncovered Fields**: Schema fields never validated 4. **Missing Edge Cases**: Boundary conditions not tested -5. **Incomplete Enum Values**: Not all possible values tested -6. **Error Scenarios**: Missing negative test cases -7. **Optional Fields**: Optional parameters not tested - -## Example Use Cases - -### Use Case 1: Complete CRUD Coverage - -**Current State:** -- GET and POST endpoints covered -- PUT and DELETE not tested - -**Action:** -1. Click "Cover Missing Lines" -2. Select PUT and DELETE endpoints -3. Specify conditions: - - Valid updates - - Non-existent resource updates - - Unauthorized access -4. Generate test suites - -**Result:** -- Coverage increases from 50% to 100% -- All CRUD operations tested - -### Use Case 2: Field Coverage - -**Current State:** -- Basic user fields covered (id, name, email) -- Advanced fields not tested (phone, address) - -**Action:** -1. Click "Cover Missing Lines" -2. Select missing fields: phone, address -3. Specify conditions: - - Valid phone formats - - Invalid phone formats - - International addresses - - Empty addresses -4. Generate test suites - -**Result:** -- Field coverage increases from 60% to 100% -- All user fields validated - -### Use Case 3: Enum Value Coverage - -**Current State:** -- User role field only tested with 'user' value -- Missing tests for 'admin' and 'guest' - -**Action:** -1. Click "Cover Missing Lines" -2. Select role field -3. Specify all enum values: admin, user, guest -4. Define conditions for each role's permissions -5. Generate test suites - -**Result:** -- Role coverage increases from 33% to 100% -- All role-based scenarios tested - -## Benefits of Schema Coverage - -### Quality Assurance -- **Comprehensive Testing**: Ensure all API contracts are validated -- **Catch Breaking Changes**: Detect schema violations early -- **Contract Compliance**: Verify API matches specification - -### Development Efficiency -- **Automated Test Generation**: Generate tests automatically for missing coverage -- **Gap Identification**: Quickly identify untested scenarios -- **Prioritized Testing**: Focus on areas with low coverage - -### Documentation -- **Living Documentation**: Schema coverage serves as API documentation -- **Coverage Reports**: Share coverage metrics with stakeholders -- **Trend Analysis**: Track coverage improvements over time - -## Best Practices - -1. **Regular Coverage Review** - - Check schema coverage after adding new endpoints - - Review coverage before releases - - Set coverage targets (e.g., 80% minimum) - -2. **Incremental Coverage Improvement** - - Start with critical endpoints - - Gradually increase coverage over time - - Focus on high-impact areas first - -3. **Meaningful Test Generation** - - Specify realistic conditions when generating tests - - Include both positive and negative scenarios - - Test edge cases and boundary conditions - -4. **Keep Schema Updated** - - Update original schema when API changes - - Re-run coverage analysis after updates - - Archive old coverage reports for comparison - -5. **Combine with Manual Testing** - - Use auto-generation for basic coverage - - Add manual tests for complex scenarios - - Review and refine generated tests - -## Coverage Metrics and Goals - -### Recommended Coverage Targets - -- **Critical Endpoints**: 95-100% coverage -- **User-Facing APIs**: 90-95% coverage -- **Internal APIs**: 80-90% coverage -- **Experimental Features**: 70-80% coverage - -### Monitoring Coverage Trends - -Track coverage over time: -``` -Coverage History: -├─ Jan 2026: 45% ────────────────────────▒▒▒▒▒▒▒▒▒▒▒ -├─ Feb 2026: 62% ──────────────────────────────▒▒▒▒▒ -└─ Mar 2026: 78% ────────────────────────────────────▒▒ - Goal: 90% ────────────────────────────────────────── -``` - -## Integration with Test Workflow - -1. **Record API Calls** → Test suites created -2. **View Schema Coverage** → Identify gaps -3. **Generate Missing Tests** → Fill coverage gaps -4. **Run Tests** → Validate coverage -5. **Review Results** → Iterate and improve - -## Exporting Coverage Reports - -- **Export Options**: PDF, HTML, JSON, CSV -- **Include in CI/CD**: Generate coverage reports in pipelines -- **Share with Team**: Distribute coverage metrics -- **Compliance Reports**: Document API testing completeness -By leveraging schema coverage analysis and automated test generation, you can ensure comprehensive API testing, maintain high code quality, and quickly identify and address testing gaps in your application. \ No newline at end of file +By leveraging schema coverage analysis and automated test generation, you can ensure comprehensive API testing, maintain high code quality. \ No newline at end of file diff --git a/versioned_docs/version-4.0.0/running-keploy/api-testing-sharing-reports.md b/versioned_docs/version-4.0.0/running-keploy/api-testing-sharing-reports.md index e3387e775..63e4b0cad 100644 --- a/versioned_docs/version-4.0.0/running-keploy/api-testing-sharing-reports.md +++ b/versioned_docs/version-4.0.0/running-keploy/api-testing-sharing-reports.md @@ -21,8 +21,6 @@ import ProductTier from '@site/src/components/ProductTier'; -## Sharing Reports - Keploy allows you to securely share test execution reports with members inside your workspace. ## How Report Sharing Works @@ -39,7 +37,6 @@ Reports can be shared in two ways: The selected user will gain access to view the report inside their dashboard. - ### 2. Add a New User and Share If the person is not yet part of your workspace: @@ -51,7 +48,6 @@ If the person is not yet part of your workspace: Once added, they become a workspace member and can access shared reports based on permissions. - ## What Shared Reports Include When you share a report, the recipient can view: @@ -60,7 +56,6 @@ When you share a report, the recipient can view: - Total test cases executed - Passed / Failed count - Execution duration -- Environment details - Step-Level Results - Request & Response Details @@ -69,5 +64,4 @@ When you share a report, the recipient can view: - Share reports instead of exporting logs - Add relevant team members directly from the dashboard - Maintain proper role-based access control -- Review assertion-level failures before escalating issues -- Remove access when no longer required + diff --git a/versioned_docs/version-4.0.0/running-keploy/api-testing-suite-settings.md b/versioned_docs/version-4.0.0/running-keploy/api-testing-suite-settings.md index e51f893de..f55a1418b 100644 --- a/versioned_docs/version-4.0.0/running-keploy/api-testing-suite-settings.md +++ b/versioned_docs/version-4.0.0/running-keploy/api-testing-suite-settings.md @@ -14,7 +14,7 @@ import ProductTier from '@site/src/components/ProductTier'; -The test suite panel in Keploy provides a comprehensive set of actions and settings to manage your test suites effectively. From basic operations like running and sharing tests to advanced features like bulk schema editing and global configurations, the suite panel offers everything you need for efficient test management. +The test suite panel provides a comprehensive set of actions and settings to manage basic operations like running and sharing tests to advanced features like bulk schema editing and global configurations. ## Overview of Available Actions @@ -23,197 +23,33 @@ The test suite panel provides access to the following key actions: - **Share Test Suite**: Collaborate with team members by sharing test suites - **Run Test Suite**: Execute all tests within the suite - **Bulk Edit Schema Assertions**: Modify assertions across multiple tests -- **Add Global Variables**: Define variables accessible across all tests - **Run in CI**: Configure continuous integration execution - **Global Functions**: Create reusable functions for test suites +- **Add Global Variables**: Define variables accessible across all tests ## Accessing the Test Suite Panel - -1. **Navigate to Test Suites** - - Go to your Keploy dashboard - Click on **Test Suites** from the main navigation - -2. **Open Suite Panel** - - Click on any test suite to open its details - The suite panel opens with various action buttons and settings tabs -3. **Panel Layout** - ``` - Test Suite: User Authentication API - ===================================== - [Share] [Run] [Settings] [⋮ More Actions] - - Tabs: [Tests] [Variables] [Functions] [Assertions] [CI/CD] - ``` - ## Action 1: Sharing Test Suites -### Share Options - **Access**: Click the **Share** button in the suite panel **Sharing Methods**: - **Team Members**: Share with specific users in your organization - **Public Link**: Generate a public link for external sharing -- **Export**: Download suite as a file for offline sharing - -### Sharing Process - -1. **Click Share Button** - ``` - Share "User Authentication API" Suite - ==================================== - - Share with: - ☐ Team Members - ☐ External Users - ☐ Generate Public Link - ☐ Export as File - ``` - -2. **Configure Sharing Settings** - ``` - Permissions: - ☐ View Only (read-only access) - ☐ Edit (can modify tests) - ☐ Execute (can run tests) - ☐ Admin (full control) - - Expiration: [30 days ▼] - Password Protection: [Optional] - ``` - -3. **Generate Share Link** - ``` - Generated Link: - https://app.keploy.io/shared/suite/abc123xyz - - Actions: - [Copy Link] [Send Email] [Download QR Code] - ``` ## Action 2: Running Test Suites - -### Run Configuration - **Access**: Click the **Run** button in the suite panel -**Execution Options**: -``` -Run Configuration -================= - -Environment: [Staging ▼] -Execution Mode: - ☐ Sequential (one test at a time) - ☑ Parallel (multiple tests simultaneously) - -Parallel Settings: - Max Concurrent Tests: [5] - Timeout per Test: [30 seconds] - -Retry Policy: - Failed Tests: [Retry 2 times] - Retry Delay: [5 seconds] - -Data Options: - ☐ Use Test Data - ☐ Generate Random Data - ☑ Use Global Variables -``` - -### Execution Monitoring - -Real-time execution progress: -``` -Execution Progress: 15 of 20 tests completed -========================================= - -✅ Login API Test (0.8s) -✅ Register User Test (1.2s) -✅ Password Reset Test (0.9s) -🔄 Profile Update Test (running...) -⏳ Logout Test (queued) -⏳ Delete Account Test (queued) - -Success Rate: 85% | Avg Response Time: 1.1s -``` - ## Action 3: Bulk Edit Schema Assertions - -### Schema Assertion Editor - -**Access**: Go to **Assertions** tab in the suite panel +**Access**: Go to **Schema Assertions** tab in the suite panel **Bulk Operations Available**: - **Add Assertions**: Apply new assertions to multiple tests -- **Modify Assertions**: Update existing assertions across tests -- **Remove Assertions**: Delete specific assertions from multiple tests - **Template Application**: Apply assertion templates to selected tests - -### Bulk Editing Process - -1. **Select Tests for Bulk Edit** - ``` - Tests in Suite (20 total) - ======================== - ☑ Select All - ☑ Login API Test - ☑ Register User Test - ☑ Password Reset Test - ☐ Profile Update Test - ☐ Logout Test - - Selected: 3 tests - ``` - -2. **Choose Assertion Type** - ``` - Assertion Categories - =================== - - 📊 Response Validation: - ├── Status Code Assertions - ├── Response Time Assertions - ├── Header Validations - └── Content-Type Checks - - 🔍 Content Validation: - ├── JSON Schema Validation - ├── Required Fields Check - ├── Data Type Validation - └── Value Range Validation - - 🔐 Security Assertions: - ├── Authentication Headers - ├── HTTPS Enforcement - └── CORS Validation - ``` - -3. **Configure Assertions** - ``` - JSON Schema Assertion - ==================== - - Field: response.user.id - Type: [number ▼] - Required: ☑ Yes - Validation Rules: - Min Value: [1] - Max Value: [999999] - - Field: response.user.email - Type: [string ▼] - Required: ☑ Yes - Pattern: [^[^\s@]+@[^\s@]+\.[^\s@]+$] - - Apply to: 3 selected tests - ``` - ## Action 4: Add Global Variables -### Global Variable Management - **Access**: Go to **Variables** tab in the suite panel **Variable Types**: @@ -222,79 +58,7 @@ Success Rate: 85% | Avg Response Time: 1.1s - **Dynamic Variables**: Generated at runtime - **Secret Variables**: Encrypted sensitive data -### Adding Global Variables - -1. **Create New Variable** - ``` - Add Global Variable - ================== - - Variable Name: [api_base_url] - Variable Type: [Environment ▼] - - Environment Values: - Development: https://api-dev.example.com - Staging: https://api-staging.example.com - Production: https://api.example.com - - Description: Base URL for API endpoints - ``` - -2. **Variable Categories** - ``` - 🌍 Environment Variables: - ├── api_base_url - ├── database_host - └── auth_service_url - - 🔐 Authentication: - ├── api_key (secret) - ├── auth_token (dynamic) - └── client_secret (secret) - - 📊 Test Data: - ├── test_user_id - ├── sample_email - └── default_timeout - - ⚙️ Configuration: - ├── max_retry_attempts - ├── request_timeout - └── parallel_execution_count - ``` - -3. **Variable Usage in Tests** - ``` - Example Usage in Test Request: - ============================= - - URL: {{api_base_url}}/users/{{test_user_id}} - Headers: - Authorization: Bearer {{auth_token}} - Content-Type: application/json - - Body: - { - "email": "{{sample_email}}", - "timeout": {{default_timeout}} - } - ``` - -## Action 5: Run in CI - -### CI/CD Integration Setup - -**Access**: Go to **CI/CD** tab in the suite panel - -**Available CI Platforms**: -- GitHub Actions -- GitLab CI/CD -- Jenkins -- Azure DevOps -- CircleCI -- Custom Webhooks - -### CI Configuration Process +## Action 5: Add to CI 1. **Select CI Platform** ``` @@ -308,64 +72,10 @@ Success Rate: 85% | Avg Response Time: 1.1s ☐ CircleCI ☐ Custom Webhook ``` - -2. **Generate CI Configuration** - ```yaml - # Generated GitHub Actions Workflow - name: API Tests - User Authentication Suite - - on: - push: - branches: [ main, develop ] - pull_request: - branches: [ main ] - schedule: - - cron: '0 6 * * *' # Daily at 6 AM - - jobs: - api-tests: - runs-on: ubuntu-latest - steps: - - uses: actions/checkout@v3 - - - name: Run Keploy Test Suite - uses: keploy/test-action@v1 - with: - suite-id: 'user-auth-suite-123' - environment: 'staging' - parallel: true - max-concurrent: 5 - env: - KEPLOY_API_KEY: ${{ secrets.KEPLOY_API_KEY }} - ``` - -3. **CI Execution Settings** - ``` - CI Execution Configuration - ========================= - - Trigger Conditions: - ☑ On Push to Main Branch - ☑ On Pull Request - ☑ Scheduled (Daily at 6 AM) - ☐ Manual Trigger Only - - Execution Environment: - Environment: [Staging ▼] - Parallel Execution: ☑ Enabled - Max Workers: [5] - Timeout: [10 minutes] - - Failure Handling: - ☑ Fail build on test failure - ☑ Send notifications on failure - ☐ Auto-retry failed tests - ``` - +- Use the Generated CI Configuration** + ## Action 6: Global Functions -### Function Management - **Access**: Go to **Functions** tab in the suite panel **Function Types**: @@ -373,229 +83,6 @@ Success Rate: 85% | Avg Response Time: 1.1s - **Post-response Functions**: Execute after each test response - **Utility Functions**: Reusable helper functions - **Validation Functions**: Custom assertion logic - -### Creating Global Functions - -1. **Add New Function** - ``` - Create Global Function - ===================== - - Function Name: [generateAuthToken] - Function Type: [Pre-request ▼] - - Function Code: - ```javascript - function generateAuthToken(request, context) { - const timestamp = Date.now(); - const signature = crypto.createHmac('sha256', context.secret_key) - .update(`${timestamp}${request.method}${request.url}`) - .digest('hex'); - - return { - 'X-Auth-Token': `${timestamp}.${signature}`, - 'X-Timestamp': timestamp - }; - } - ``` - -2. **Function Categories** - ``` - 🔧 Utility Functions: - ├── generateRandomId() - ├── formatTimestamp() - ├── encodeBase64() - └── validateEmail() - - 🔐 Authentication: - ├── generateAuthToken() - ├── refreshToken() - └── validateSession() - - 📊 Data Processing: - ├── normalizeResponse() - ├── extractErrorCode() - └── calculateChecksum() - - ✅ Validation: - ├── validateSchema() - ├── checkResponseTime() - └── verifyHeaders() - ``` - -3. **Function Usage Examples** - ```javascript - // Pre-request function usage - function beforeRequest(request, context) { - // Add authentication - const authHeaders = generateAuthToken(request, context); - request.headers = { ...request.headers, ...authHeaders }; - - // Add request ID for tracking - request.headers['X-Request-ID'] = generateRandomId(); - - return request; - } - - // Post-response validation - function afterResponse(response, context) { - // Validate response schema - const isValid = validateSchema(response.body, context.expectedSchema); - if (!isValid) { - throw new Error('Response schema validation failed'); - } - - // Check performance - if (response.time > context.maxResponseTime) { - console.warn(`Slow response: ${response.time}ms`); - } - - return response; - } - ``` - -## Advanced Suite Configuration - -### Suite-Level Settings - -**Access**: Click **Settings** button in suite panel - -**Configuration Options**: -``` -Suite Configuration -================== - -General Settings: - Suite Name: [User Authentication API] - Description: [Complete authentication flow tests] - Owner: [team-backend] - -Execution Settings: - Default Environment: [Staging] - Default Timeout: [30 seconds] - Max Retry Attempts: [3] - Parallel Execution: ☑ Enabled - -Data Management: - ☑ Preserve test data between runs - ☑ Auto-cleanup temporary data - ☐ Use production data (warning) - -Notifications: - ☑ Email on failure - ☑ Slack integration - ☐ SMS alerts - -Security: - ☑ Encrypt sensitive variables - ☑ Audit log access - ☑ Require approval for modifications -``` - -### Suite Templates - -Save and reuse suite configurations: -``` -Save as Template -=============== - -Template Name: [Standard API Test Suite] -Description: [Default configuration for API testing] - -Include in Template: -☑ Variable definitions -☑ Global functions -☑ Assertion templates -☑ CI/CD configuration -☐ Test data (large datasets) - -Apply Template to: -☐ New test suites only -☐ Existing suites (with confirmation) -``` - -## Monitoring and Analytics - -### Suite Performance Dashboard - -``` -Suite Analytics Dashboard -======================== - -📊 Execution Statistics (Last 30 Days): -├── Total Runs: 1,247 -├── Success Rate: 94.2% -├── Average Duration: 4m 32s -└── Most Common Failures: Authentication timeout - -📈 Trends: -├── Success Rate: ↗️ +2.1% (improving) -├── Response Time: ↘️ -120ms (faster) -└── Test Coverage: ↗️ +5 new assertions - -🔍 Top Issues: -├── Flaky Test: "Password Reset" (12% failure rate) -├── Slow Endpoint: "/users/profile" (avg 2.1s) -└── Missing Assertion: Response headers validation -``` - -## Best Practices - -### Suite Organization - -1. **Logical Grouping** - - Group related API endpoints together - - Separate by functional areas (auth, payments, etc.) - - Use consistent naming conventions - -2. **Variable Management** - - Use environment-specific variables - - Avoid hardcoding sensitive data - - Document variable purposes - -3. **Function Reusability** - - Create modular, single-purpose functions - - Use descriptive function names - - Include error handling - -### Performance Optimization - -1. **Execution Efficiency** - - Enable parallel execution for independent tests - - Set appropriate timeouts - - Use test data factories - -2. **Resource Management** - - Clean up test data after execution - - Monitor suite execution times - - Optimize slow-running tests - -## Troubleshooting - -### Common Issues - -1. **Suite Won't Run** - - Check environment connectivity - - Verify variable values - - Review function syntax - -2. **Bulk Operations Failing** - - Reduce operation scope - - Check individual test permissions - - Verify schema compatibility - -3. **CI Integration Issues** - - Validate API keys and secrets - - Check network connectivity - - Review execution logs - -### Getting Help - -- **Documentation**: Review individual feature guides -- **Support**: Contact support with suite execution logs -- **Community**: Ask questions in Keploy forums -- **API Reference**: Check API documentation for programmatic access - ## Related Features - **[Individual Test Management](./api-testing-edit-suites.md)**: Edit specific tests diff --git a/versioned_sidebars/version-4.0.0-sidebars.json b/versioned_sidebars/version-4.0.0-sidebars.json index e600cc7a2..ceec9fe79 100644 --- a/versioned_sidebars/version-4.0.0-sidebars.json +++ b/versioned_sidebars/version-4.0.0-sidebars.json @@ -172,6 +172,7 @@ "running-keploy/run-ai-generated-api-tests", "running-keploy/api-testing-cicd", "running-keploy/api-testing-webhook", + "running-keploy/api-testing-run-report", "running-keploy/api-testing-add-suite", "running-keploy/api-testing-edit-suites", "running-keploy/api-testing-buggy-suites", @@ -187,7 +188,6 @@ "running-keploy/api-testing-suite-settings", "running-keploy/api-testing-filter-suites", "running-keploy/api-testing-generation-history", - "running-keploy/api-testing-run-report", { "type": "doc", "label": "FAQs", From 9db5f334ff7d2ef74c2864db2e35ee54b07a01d3 Mon Sep 17 00:00:00 2001 From: Pratham Sikka Date: Wed, 18 Feb 2026 18:03:35 +0530 Subject: [PATCH 07/14] docs: add guides for global functions and variables --- .../running-keploy/api-testing-functions.md | 64 +++++++++++++++++++ .../running-keploy/api-testing-variables.md | 63 ++++++++++++++++++ 2 files changed, 127 insertions(+) create mode 100644 versioned_docs/version-4.0.0/running-keploy/api-testing-functions.md create mode 100644 versioned_docs/version-4.0.0/running-keploy/api-testing-variables.md diff --git a/versioned_docs/version-4.0.0/running-keploy/api-testing-functions.md b/versioned_docs/version-4.0.0/running-keploy/api-testing-functions.md new file mode 100644 index 000000000..66c533116 --- /dev/null +++ b/versioned_docs/version-4.0.0/running-keploy/api-testing-functions.md @@ -0,0 +1,64 @@ +--- +id: api-testing-functions +title: Functions & Schema Assertions +sidebar_label: Functions & Assertions +description: Enforce response integrity with schema validation and extend testing logic with Global Custom Functions. +tags: + - API testing + - schema assertions + - custom functions + - javascript validation +keywords: + - keploy assertions + - schema validation + - global functions + - api testing logic +--- + +## ⚡ Why Use Advanced Assertions? + +| Challenge | ROI & Impact | +| --------------------------------------- | ------------------------------------------------------------------------- | +| Responses change structure unexpectedly | Schema assertions catch "breaking changes" in data types or missing keys. | +| Business logic requires complex math | Custom JS functions allow you to validate logic (e.g., A + B = C). | +| Flaky timestamps cause test failures | Use functions to ignore or normalize dynamic data before comparison. | + +## 💥 Assertions vs. Global Functions + +| Capability | Schema Assertions | Global Custom Functions | +| :--- | :--- | :--- | +| **Primary Goal** | Validate Data Structure (Types). | Validate Custom Logic/Workflows. | +| **Input** | Selected Response Fields (JSON). | Full Request and Response Objects. | +| **Coding** | No-Code (Select via UI). | JavaScript (Pro-Code). | + +## 🚀 Hands-On: Setting Assertions + +### **1. Schema Assertions (No-Code)** +Validate that your API consistently returns the correct data types (e.g., `id` is always a number). +1. **Select Endpoint**: Choose the path (e.g., `/pettypes`) and method (e.g., `POST 201`). +2. **Select Fields**: Use the field picker to choose exactly which keys to validate (e.g., `name` [string]). +3. **Save**: Keploy will now enforce these types during every replay. + + + +### **2. Global Custom Functions (JS)** +For validations that require logic beyond simple matching: +* **Create New**: Define a function using the signature `function customFunction(request, response)`. +* **Global Access**: Once saved, these functions can be applied as an assertion type across any suite in your workspace. + +## 🛠️ How It Works + +| Integration Method | When to Use | How Keploy Works? | +| :--- | :--- | :--- | +| **Field-Level Selection** | When only specific fields matter | Choose specific body fields to check for exact matches, ignoring irrelevant noise. | +| **Status Code Checks** | For basic "Happy Path" testing | Asserts that the response code matches the expected value (e.g., 200 vs 201). | +| **Custom JS Logic** | For dynamic or complex rules | Executes your JavaScript in a secure sandbox during the assertion phase. | + +## ✨ Key Features +- **Visual Hierarchy**: Browse your response structure in a nested "Response Fields" tree for easy selection. +- **Bulk Edits**: Apply assertions or status code checks across multiple test steps simultaneously. +- **Fix with AI**: Use AI-assisted repair to normalize failing assertions or suggest logic fixes. + +## ✅ Best Practices +- **Minimize Exact Matches**: Use schema assertions for dynamic fields (like IDs) to reduce flakiness. +- **Centralize Logic**: Store repeatable validation rules in **Global Custom Functions** to keep individual tests clean. \ No newline at end of file diff --git a/versioned_docs/version-4.0.0/running-keploy/api-testing-variables.md b/versioned_docs/version-4.0.0/running-keploy/api-testing-variables.md new file mode 100644 index 000000000..5422ea203 --- /dev/null +++ b/versioned_docs/version-4.0.0/running-keploy/api-testing-variables.md @@ -0,0 +1,63 @@ +--- +id: api-testing-variables +title: Variables in API Testing +sidebar_label: Variables +description: Capture, store, and reuse dynamic data across test steps to build complex API workflows. +tags: + - API testing + - context variables + - global variables + - test automation + - dynamic data +keywords: + - keploy variables + - test data reuse + - api chaining + - environment variables +--- + +## 🔗 Why Use Variables? + +| Challenge | ROI & Impact | +| --------------------------------------- | ---------------------------------------------------------------------------- | +| Hard-coded IDs lead to brittle tests | Dynamic IDs allow tests to run repeatedly without manual updates | +| Manual token management for every run | Automated auth flow using context variables across steps | +| Inconsistent data across environments | Environment variables allow seamless switching between Dev and Staging | + +## 💥 Understanding Variable Scope + +Variables in Keploy follow a hierarchy to ensure the right data is used at the right time: + +| Scope | Description | Priority | +| :--- | :--- | :--- | +| **Suite (Context)** | Captured from current or previous test steps (e.g., `steps["Create Vet"].response.body.id`). | **High** (Overrides Global) | +| **Global** | Environment-level constants like `baseUrl` or `apiKey`. | **Medium** | + +## 🚀 Hands-On: Managing Variables + +AI-powered data management ensures your API flows are connected and dynamic. Use the `{{variable_name}}` syntax to reference any defined variable in your Headers, URL, or Body. + +### **Capturing Data from Steps** +In the **Edit Test Step** panel, you can map response fields to variables: +1. Navigate to the **Variables** tab in a specific test step. +2. Define a name (e.g., `vet_id`). +3. Map it to a response path using the syntax: `steps["Step Name"].response.body.path`. + + + +## 🛠️ How It Works + +| Integration Method | When to Use | How Keploy Works? | +| :--- | :--- | :--- | +| **Automatic Chaining** | When Step B needs an ID from Step A | Keploy "extracts" the field from the first response and injects it into the next request. | +| **Global Definitions** | For static URLs and Keys | Defined in Workspace Settings; accessible by every suite in your project. | +| **Environment Profiles** | Switching between local and hosted | Group variables into profiles to swap entire sets of configurations instantly. | + +## ✨ Key Features +- **Unused Variable Detection**: The UI flags variables that aren't being referenced in your current step. +- **Inline Editing**: Update request details, headers, and bodies directly while managing variables. +- **Auto-interpolation**: References like `{{vet_id}}` are resolved at runtime. + +## ✅ Best Practices +- **Standardized Naming**: Use descriptive names like `adminUserToken` instead of `token1`. +- **camelCase Consistency**: Stick to `userId` for all variable names to avoid PR conflicts. \ No newline at end of file From 80f7e17f5ec640fe3c664386918420b95087b796 Mon Sep 17 00:00:00 2001 From: Pratham Sikka Date: Wed, 18 Feb 2026 21:54:10 +0530 Subject: [PATCH 08/14] docs: added technical theory and screenshots to functions and variables --- static/img/custom-function.png | Bin 0 -> 90714 bytes static/img/global-functions.png | Bin 0 -> 85527 bytes static/img/global-vars.png | Bin 0 -> 161665 bytes static/img/multi-assertion.png | Bin 0 -> 76900 bytes static/img/schema-assertion.png | Bin 0 -> 117079 bytes static/img/var-extraction.png | Bin 0 -> 67855 bytes static/img/var-injection.png | Bin 0 -> 95616 bytes .../running-keploy/api-testing-functions.md | 69 ++++++------------ .../running-keploy/api-testing-variables.md | 62 ++++------------ 9 files changed, 40 insertions(+), 91 deletions(-) create mode 100644 static/img/custom-function.png create mode 100644 static/img/global-functions.png create mode 100644 static/img/global-vars.png create mode 100644 static/img/multi-assertion.png create mode 100644 static/img/schema-assertion.png create mode 100644 static/img/var-extraction.png create mode 100644 static/img/var-injection.png diff --git a/static/img/custom-function.png b/static/img/custom-function.png new file mode 100644 index 0000000000000000000000000000000000000000..f747d03bea5ddcf61f67c1d01862c85a5a13e107 GIT binary patch literal 90714 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 literal 0 HcmV?d00001 diff --git a/static/img/global-functions.png b/static/img/global-functions.png new file mode 100644 index 0000000000000000000000000000000000000000..ad98ac8aaab410bc769a8851a826b5be2dff8af8 GIT binary patch literal 85527 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

1GDVEVJrQs8u^?WMAc!&KCv1+>RrYLA+x13uN1 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 literal 0 HcmV?d00001 diff --git a/static/img/global-vars.png b/static/img/global-vars.png new file mode 100644 index 0000000000000000000000000000000000000000..6d2225f051b7c45f28a8593cfc9fd47223c44ddb GIT binary patch literal 161665 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

nx8ZATckXor1j8+{L4UAe9*Qw}pPgYl1 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 literal 0 HcmV?d00001 diff --git a/static/img/var-extraction.png b/static/img/var-extraction.png new file mode 100644 index 0000000000000000000000000000000000000000..c8e2079c86fba140c527a5cfc178a40ef6557135 GIT binary patch literal 67855 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

n& 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—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

K6jXUCUp?}*K;t=?_2NjEn4j#EhGGU+nB5^RLgR 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 W_(2i9&zo+5KTsJJ>2gWq!2brmVlRLI literal 0 HcmV?d00001 diff --git a/versioned_docs/version-4.0.0/running-keploy/api-testing-functions.md b/versioned_docs/version-4.0.0/running-keploy/api-testing-functions.md index 66c533116..d0ddc20b6 100644 --- a/versioned_docs/version-4.0.0/running-keploy/api-testing-functions.md +++ b/versioned_docs/version-4.0.0/running-keploy/api-testing-functions.md @@ -3,62 +3,41 @@ id: api-testing-functions title: Functions & Schema Assertions sidebar_label: Functions & Assertions description: Enforce response integrity with schema validation and extend testing logic with Global Custom Functions. -tags: - - API testing - - schema assertions - - custom functions - - javascript validation -keywords: - - keploy assertions - - schema validation - - global functions - - api testing logic --- -## ⚡ Why Use Advanced Assertions? +## B. Functions & Assertions: Logic & Integrity -| Challenge | ROI & Impact | -| --------------------------------------- | ------------------------------------------------------------------------- | -| Responses change structure unexpectedly | Schema assertions catch "breaking changes" in data types or missing keys. | -| Business logic requires complex math | Custom JS functions allow you to validate logic (e.g., A + B = C). | -| Flaky timestamps cause test failures | Use functions to ignore or normalize dynamic data before comparison. | +Assertions define the **"Pass/Fail"** criteria. While standard checks confirm status codes, deep-tech auditing requires validating data integrity through **Schema** and **Logical** validations. -## 💥 Assertions vs. Global Functions +- **Schema Assertions**: These verify that an API consistently returns the correct data types, preventing breaking changes from reaching production. +- **Custom Functions**: Use these for complex logic that simple matching cannot handle, such as verifying if a timestamp falls within a specific range. +- **Global Functions**: Repeatable logic can be saved to the Global library for team-wide reuse. -| Capability | Schema Assertions | Global Custom Functions | -| :--- | :--- | :--- | -| **Primary Goal** | Validate Data Structure (Types). | Validate Custom Logic/Workflows. | -| **Input** | Selected Response Fields (JSON). | Full Request and Response Objects. | -| **Coding** | No-Code (Select via UI). | JavaScript (Pro-Code). | -## 🚀 Hands-On: Setting Assertions -### **1. Schema Assertions (No-Code)** -Validate that your API consistently returns the correct data types (e.g., `id` is always a number). -1. **Select Endpoint**: Choose the path (e.g., `/pettypes`) and method (e.g., `POST 201`). -2. **Select Fields**: Use the field picker to choose exactly which keys to validate (e.g., `name` [string]). -3. **Save**: Keploy will now enforce these types during every replay. +## Hands-On: Schema Assertions +### 1. Selecting Fields to Assert +Choose specifically which parts of a JSON response Keploy should validate during a replay. +![Schema Assertion UI](/static/img/schema-assertion.png) -### **2. Global Custom Functions (JS)** -For validations that require logic beyond simple matching: -* **Create New**: Define a function using the signature `function customFunction(request, response)`. -* **Global Access**: Once saved, these functions can be applied as an assertion type across any suite in your workspace. +- **API Configuration**: Select the specific endpoint and status code (e.g., `GET 400`) to enforce. +- **Response Fields**: Use the visual tree to toggle checkboxes for mandatory fields. -## 🛠️ How It Works +### 2. Multi-Type Assertions +Stack different assertion types, such as verifying a status code while simultaneously checking if a specific field contains a certain value. -| Integration Method | When to Use | How Keploy Works? | -| :--- | :--- | :--- | -| **Field-Level Selection** | When only specific fields matter | Choose specific body fields to check for exact matches, ignoring irrelevant noise. | -| **Status Code Checks** | For basic "Happy Path" testing | Asserts that the response code matches the expected value (e.g., 200 vs 201). | -| **Custom JS Logic** | For dynamic or complex rules | Executes your JavaScript in a secure sandbox during the assertion phase. | +![Multi-Assertion Setup](/static/img/multi-assertion.png) -## ✨ Key Features -- **Visual Hierarchy**: Browse your response structure in a nested "Response Fields" tree for easy selection. -- **Bulk Edits**: Apply assertions or status code checks across multiple test steps simultaneously. -- **Fix with AI**: Use AI-assisted repair to normalize failing assertions or suggest logic fixes. +## Custom & Global Functions -## ✅ Best Practices -- **Minimize Exact Matches**: Use schema assertions for dynamic fields (like IDs) to reduce flakiness. -- **Centralize Logic**: Store repeatable validation rules in **Global Custom Functions** to keep individual tests clean. \ No newline at end of file +### 1. Writing Inline Logic +Access the `request` and `response` objects directly to create complex rules within the assertion panel. + +![Custom Function Editor](/static/img/custom-function.png) + +### 2. Global Function Library +Save repeatable validation rules to the Global Custom Functions library so they can be reused across your entire development team. + +![Global Function Library](/static/img/global-functions.png) \ No newline at end of file diff --git a/versioned_docs/version-4.0.0/running-keploy/api-testing-variables.md b/versioned_docs/version-4.0.0/running-keploy/api-testing-variables.md index 5422ea203..467821243 100644 --- a/versioned_docs/version-4.0.0/running-keploy/api-testing-variables.md +++ b/versioned_docs/version-4.0.0/running-keploy/api-testing-variables.md @@ -3,61 +3,31 @@ id: api-testing-variables title: Variables in API Testing sidebar_label: Variables description: Capture, store, and reuse dynamic data across test steps to build complex API workflows. -tags: - - API testing - - context variables - - global variables - - test automation - - dynamic data -keywords: - - keploy variables - - test data reuse - - api chaining - - environment variables --- -## 🔗 Why Use Variables? +## A. Variables: Implementation & Data Chaining -| Challenge | ROI & Impact | -| --------------------------------------- | ---------------------------------------------------------------------------- | -| Hard-coded IDs lead to brittle tests | Dynamic IDs allow tests to run repeatedly without manual updates | -| Manual token management for every run | Automated auth flow using context variables across steps | -| Inconsistent data across environments | Environment variables allow seamless switching between Dev and Staging | +Variables in Keploy act as placeholders for dynamic data that changes between test executions, primarily facilitating **"Data Chaining."** This is a deep-tech requirement where the response from one API (like an `owner_id`) provides the necessary input for a subsequent request. -## 💥 Understanding Variable Scope +- **Extraction**: You must map response fields to variable names in the **Variables** tab of the **Edit Test Step** panel. +- **Injection**: Reference these values in URLs or headers using the double-curly brace syntax: `{{variable_name}}`. +- **Global vs. Suite Scope**: Suite variables are captured from previous steps, while Global variables are persistent constants like base URLs or environment keys. -Variables in Keploy follow a hierarchy to ensure the right data is used at the right time: +## Hands-On: Implementation -| Scope | Description | Priority | -| :--- | :--- | :--- | -| **Suite (Context)** | Captured from current or previous test steps (e.g., `steps["Create Vet"].response.body.id`). | **High** (Overrides Global) | -| **Global** | Environment-level constants like `baseUrl` or `apiKey`. | **Medium** | +### 1. Extraction from Responses +To reuse data from a response, map it in the Variables tab of a test step. Use the syntax `steps["Step_Name"].response.body.path` to target specific data. -## 🚀 Hands-On: Managing Variables +![Variable Extraction](/static/img/var-extraction.png) -AI-powered data management ensures your API flows are connected and dynamic. Use the `{{variable_name}}` syntax to reference any defined variable in your Headers, URL, or Body. +Keploy automatically flags variables that are defined but not yet referenced in your request to help maintain clean test suites. -### **Capturing Data from Steps** -In the **Edit Test Step** panel, you can map response fields to variables: -1. Navigate to the **Variables** tab in a specific test step. -2. Define a name (e.g., `vet_id`). -3. Map it to a response path using the syntax: `steps["Step Name"].response.body.path`. +### 2. Injection into Requests +Once defined, variables can be injected into URLs, Headers, or Request Bodies using the double-curly brace syntax. +![Variable Injection](/static/img/var-injection.png) +### 3. Global Variable Management +Global variables serve as the source of truth for your environment. They can be static strings or dynamic functions that generate data on the fly. -## 🛠️ How It Works - -| Integration Method | When to Use | How Keploy Works? | -| :--- | :--- | :--- | -| **Automatic Chaining** | When Step B needs an ID from Step A | Keploy "extracts" the field from the first response and injects it into the next request. | -| **Global Definitions** | For static URLs and Keys | Defined in Workspace Settings; accessible by every suite in your project. | -| **Environment Profiles** | Switching between local and hosted | Group variables into profiles to swap entire sets of configurations instantly. | - -## ✨ Key Features -- **Unused Variable Detection**: The UI flags variables that aren't being referenced in your current step. -- **Inline Editing**: Update request details, headers, and bodies directly while managing variables. -- **Auto-interpolation**: References like `{{vet_id}}` are resolved at runtime. - -## ✅ Best Practices -- **Standardized Naming**: Use descriptive names like `adminUserToken` instead of `token1`. -- **camelCase Consistency**: Stick to `userId` for all variable names to avoid PR conflicts. \ No newline at end of file +![Global Variables](/static/img/global-vars.png) \ No newline at end of file From 74eb305b8c26bb003b79d0021ac20f2640467702 Mon Sep 17 00:00:00 2001 From: Pratham Sikka Date: Thu, 19 Feb 2026 11:49:24 +0530 Subject: [PATCH 09/14] docs: updated technical theory and screenshots to functions and variables --- .../running-keploy/api-testing-functions.md | 17 +++++++++---- .../running-keploy/api-testing-variables.md | 24 ++++++++++++------- 2 files changed, 27 insertions(+), 14 deletions(-) diff --git a/versioned_docs/version-4.0.0/running-keploy/api-testing-functions.md b/versioned_docs/version-4.0.0/running-keploy/api-testing-functions.md index d0ddc20b6..e2bc760b7 100644 --- a/versioned_docs/version-4.0.0/running-keploy/api-testing-functions.md +++ b/versioned_docs/version-4.0.0/running-keploy/api-testing-functions.md @@ -7,9 +7,9 @@ description: Enforce response integrity with schema validation and extend testin ## B. Functions & Assertions: Logic & Integrity -Assertions define the **"Pass/Fail"** criteria. While standard checks confirm status codes, deep-tech auditing requires validating data integrity through **Schema** and **Logical** validations. +Assertions define the **"Pass/Fail"** criteria for your tests. While standard checks confirm status codes, comprehensive auditing requires validating data integrity through **Schema** and **Logical** validations. -- **Schema Assertions**: These verify that an API consistently returns the correct data types, preventing breaking changes from reaching production. +- **Schema Assertions**: These verify that an API consistently returns the correct data types (e.g., string, integer), preventing breaking changes from reaching production. - **Custom Functions**: Use these for complex logic that simple matching cannot handle, such as verifying if a timestamp falls within a specific range. - **Global Functions**: Repeatable logic can be saved to the Global library for team-wide reuse. @@ -22,14 +22,17 @@ Choose specifically which parts of a JSON response Keploy should validate during ![Schema Assertion UI](/static/img/schema-assertion.png) -- **API Configuration**: Select the specific endpoint and status code (e.g., `GET 400`) to enforce. -- **Response Fields**: Use the visual tree to toggle checkboxes for mandatory fields. +**Example Context:** In this window, we are targeting a `GET` request on the `/visits/-1` endpoint that expects a `400` status code. Under **Response Fields**, specific keys like `className` and `exMessage` are selected. Toggling these ensures Keploy validates that these fields are returned as the correct data type (strings) during every replay. ### 2. Multi-Type Assertions Stack different assertion types, such as verifying a status code while simultaneously checking if a specific field contains a certain value. ![Multi-Assertion Setup](/static/img/multi-assertion.png) +**Example Context:** This setup enforces two rules simultaneously: +1. **Status Code**: Validates that the server returns a `201` (Created). +2. **JSON Contains**: Specifically checks the `city` header/field to ensure it matches the expected value `"sometown"`. + ## Custom & Global Functions ### 1. Writing Inline Logic @@ -37,7 +40,11 @@ Access the `request` and `response` objects directly to create complex rules wit ![Custom Function Editor](/static/img/custom-function.png) +**Example Context:** The editor shows a function signature: `function customFunction(request, response)`. This gives you direct access to the full objects, allowing you to write JavaScript logic to determine if the test should pass based on dynamic conditions. + ### 2. Global Function Library Save repeatable validation rules to the Global Custom Functions library so they can be reused across your entire development team. -![Global Function Library](/static/img/global-functions.png) \ No newline at end of file +![Global Function Library](/static/img/global-functions.png) + +**Example Context:** The library shows reusable logic stored globally. For example, the `customFunction` at the bottom demonstrates an `assert.greater(response.status, 399)` utility, creating a standardized rule to verify error-level status codes across multiple suites. \ No newline at end of file diff --git a/versioned_docs/version-4.0.0/running-keploy/api-testing-variables.md b/versioned_docs/version-4.0.0/running-keploy/api-testing-variables.md index 467821243..98bb18a69 100644 --- a/versioned_docs/version-4.0.0/running-keploy/api-testing-variables.md +++ b/versioned_docs/version-4.0.0/running-keploy/api-testing-variables.md @@ -7,27 +7,33 @@ description: Capture, store, and reuse dynamic data across test steps to build c ## A. Variables: Implementation & Data Chaining -Variables in Keploy act as placeholders for dynamic data that changes between test executions, primarily facilitating **"Data Chaining."** This is a deep-tech requirement where the response from one API (like an `owner_id`) provides the necessary input for a subsequent request. +Variables in Keploy act as placeholders for dynamic data that changes between test executions, primarily facilitating **"Data Chaining."** This allows you to create advanced workflows where the response from one API (such as an `owner_id` generated during a creation step) provides the necessary input for a subsequent request, such as updating or deleting that specific record. -- **Extraction**: You must map response fields to variable names in the **Variables** tab of the **Edit Test Step** panel. -- **Injection**: Reference these values in URLs or headers using the double-curly brace syntax: `{{variable_name}}`. -- **Global vs. Suite Scope**: Suite variables are captured from previous steps, while Global variables are persistent constants like base URLs or environment keys. +- **Extraction**: This involves identifying specific data points within an API response—such as an ID, a token, or a status string—and mapping them to a unique variable name in the **Variables** tab of the **Edit Test Step** panel. +- **Injection**: Once a variable is captured, it can be dynamically inserted into subsequent URLs, Headers, or Request Bodies using the double-curly brace syntax: `{{variable_name}}`. +- **Global vs. Suite Scope**: + - **Suite Variables**: These are ephemeral and captured from previous steps within a specific test suite run to maintain state across a single workflow. + - **Global Variables**: These are persistent constants, such as base URLs, environment-specific keys, or static authentication tokens, available across all suites in the workspace. ## Hands-On: Implementation ### 1. Extraction from Responses -To reuse data from a response, map it in the Variables tab of a test step. Use the syntax `steps["Step_Name"].response.body.path` to target specific data. +To reuse data, you define a mapping that tells Keploy exactly where to look in a previous response. ![Variable Extraction](/static/img/var-extraction.png) -Keploy automatically flags variables that are defined but not yet referenced in your request to help maintain clean test suites. +**Example Context:** In the view above, we are extracting the unique ID of a record. The mapping `steps["Create_Owner"].response.body.id` captures the value from the **Create_Owner** step. Note the **Unused** badge; Keploy provides this visual hint when a variable has been defined but hasn't been injected into any subsequent request yet. ### 2. Injection into Requests -Once defined, variables can be injected into URLs, Headers, or Request Bodies using the double-curly brace syntax. +Injection allows you to replace static values with dynamic variables, ensuring your tests remain flexible across different environments and data states. ![Variable Injection](/static/img/var-injection.png) +**Example Context:** This view shows the **Request Details** for an API call to the `/owners` endpoint. By defining the method (e.g., **POST**), you can then use placeholders like `{{owner_id}}` in the URL path or body. Keploy will automatically swap the placeholder with the actual value captured during test execution. + ### 3. Global Variable Management -Global variables serve as the source of truth for your environment. They can be static strings or dynamic functions that generate data on the fly. +Global variables serve as the centralized source of truth for your testing environment. + +![Global Variables](/static/img/global-vars.png) -![Global Variables](/static/img/global-vars.png) \ No newline at end of file +**Example Context:** The **Global Variables** dashboard allows you to manage workspace-wide data. This includes static entries like the **base URL** and dynamic **Global Custom Functions**. For instance, `generateCompanyId()` is a function that returns a unique string starting with `COMP_` followed by a timestamp, ensuring unique identifiers for every test run. \ No newline at end of file From 0e1c6a4ffd5949fa807e833401b9f09a111a87b7 Mon Sep 17 00:00:00 2001 From: Pratham Sikka Date: Thu, 19 Feb 2026 14:23:00 +0530 Subject: [PATCH 10/14] docs: updated docs for generate-api-testing-using-ai --- .../running-keploy/generate-api-tests-using-ai.md | 9 ++++++--- 1 file changed, 6 insertions(+), 3 deletions(-) diff --git a/versioned_docs/version-3.0.0/running-keploy/generate-api-tests-using-ai.md b/versioned_docs/version-3.0.0/running-keploy/generate-api-tests-using-ai.md index abc6d846c..359c777a5 100644 --- a/versioned_docs/version-3.0.0/running-keploy/generate-api-tests-using-ai.md +++ b/versioned_docs/version-3.0.0/running-keploy/generate-api-tests-using-ai.md @@ -17,13 +17,15 @@ This guide will help you generate automated API tests using Keploy's AI-based te - Go to the [Keploy Console](https://app.keploy.io/api-testing/generate) - Upload your API input (schema, collection, or curl) -- 👊 Hit **Generate Tests** and Keploy will parse your input, hit the API, and generate validated test flows with response-based assertions. +- 👊 Keploy’s engine triggers live requests against your target environment to capture the full execution context—including the API response and the resulting + dependency interactions (DB queries, internal gRPC calls)—creating a deterministic 'Digital Twin' of the transaction. - If private endpoints are detected, follow the agent setup prompt - Review and edit your generated tests ## ⚠️ Private Endpoint API Warning -If your API is not publicly accessible, Keploy will show a warning when attempting to reach those endpoints. **To resolve this**, install the Keploy Agent proxy locally +If your API is not publicly accessible, Keploy will show a warning when attempting to reach those endpoints. **To resolve this**, install the Keploy Agent proxy locally. +The Agent acts as a local interceptor that uses eBPF to record your service's interactions with its dependencies (Databases, APIs), ensuring tests can be replayed without environment setup. ### Keploy Agent Installation @@ -33,7 +35,8 @@ If your API is not publicly accessible, Keploy will show a warning when attempti | **Linux** | - Run the following in your terminal:

`curl -L -O https://keploy-enterprise.s3.us-west-2.amazonaws.com/releases/latest/keploy-agent-linux-amd64.tar.gz`

`tar -xzf keploy-agent-linux-amd64.tar.gz`

`./keploy-agent`

| | **Windows** | - [Download](https://keploy-enterprise.s3.us-west-2.amazonaws.com/releases/latest/Keploy+Agent-windows_amd64.zip)

Extract the zip file and Launch the Keploy Agent.
| -> ✅ Once installed and running, return to the Keploy Console and hit **Generate API Tests**. The agent will proxy your local API to allow secure test generation. +> ✅ Once installed and running, return to the Keploy Console and hit **Generate API Tests**. The Keploy Agent creates a secure bridge to your local or private + environment, enabling our engine to interact with your service as if it were in production, capturing the underlying dependency calls (DB, 3rd party APIs) without code changes. ## BEST Practices for BEST Test Output From f9cb4d717a6b3cbe381e76881772f827ce68a2fb Mon Sep 17 00:00:00 2001 From: Pratham Sikka Date: Thu, 19 Feb 2026 14:29:43 +0530 Subject: [PATCH 11/14] docs: updated docs for api-testing chrome extension.md --- .../running-keploy/api-testing-chrome-extension.md | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/versioned_docs/version-4.0.0/running-keploy/api-testing-chrome-extension.md b/versioned_docs/version-4.0.0/running-keploy/api-testing-chrome-extension.md index 587c8e4ec..64c8f8dcb 100644 --- a/versioned_docs/version-4.0.0/running-keploy/api-testing-chrome-extension.md +++ b/versioned_docs/version-4.0.0/running-keploy/api-testing-chrome-extension.md @@ -15,7 +15,7 @@ Install the extension, hit **Record API Calls**, exercise your web app, then pre ## What the API Test Recorder does -**Browser-side traffic capture** — Sniffs XHR / fetch calls as you click around. +**Browser-side traffic capture** — Captures full-stack XHR/fetch traffic, including headers, cookies, and authentication context, ensuring the recorded flows are ready for authenticated replay. **Instant replay formats** — Export the captured calls as cURL, JSON, or native Keploy YAML. @@ -43,7 +43,7 @@ Install the extension, hit **Record API Calls**, exercise your web app, then pre 4. Watch the live counters: - **Captured calls** – total XHR/fetch requests intercepted. - **Complete req/resp** – pairs where both request _and_ response were fully captured. -5. If the count of req/res is lower than expected, hit **Debug** to repair missing pairs. +5. Keploy automatically synchronizes asynchronous background requests. Use the **Debug** feature to repair any pending request/response pairs before generating your suite. Example : ``` From d3d394d96b7f916b14055d5272cdd1590e6b5460 Mon Sep 17 00:00:00 2001 From: Pratham Sikka Date: Thu, 19 Feb 2026 14:33:37 +0530 Subject: [PATCH 12/14] docs: updated docs for share-tests.md --- versioned_docs/version-4.0.0/running-keploy/share-tests.md | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/versioned_docs/version-4.0.0/running-keploy/share-tests.md b/versioned_docs/version-4.0.0/running-keploy/share-tests.md index 4baaf2c52..5a62e2f6a 100644 --- a/versioned_docs/version-4.0.0/running-keploy/share-tests.md +++ b/versioned_docs/version-4.0.0/running-keploy/share-tests.md @@ -19,7 +19,7 @@ In the **Test Suites** list, hover over a suite row and click the **Share** icon The **Share Test Suites** modal appears with two tabs: -- **Find People** – Search existing workspace members. +- **Find People** – Search for colleagues already in your Organization/Workspace. Permissions are inherited from your Team settings. - **Add New User** – Invite someone via email. ## Confirm & Notify From 9e397cfc665d91f2abc8835c7ae2ecaa4e003795 Mon Sep 17 00:00:00 2001 From: Pratham Sikka Date: Thu, 19 Feb 2026 14:37:35 +0530 Subject: [PATCH 13/14] docs: updated docs for self-healing-ai-api-tests.md --- .../running-keploy/self-healing-ai-api-tests.md | 5 +++-- 1 file changed, 3 insertions(+), 2 deletions(-) diff --git a/versioned_docs/version-4.0.0/running-keploy/self-healing-ai-api-tests.md b/versioned_docs/version-4.0.0/running-keploy/self-healing-ai-api-tests.md index 21644c20c..8bc872c96 100644 --- a/versioned_docs/version-4.0.0/running-keploy/self-healing-ai-api-tests.md +++ b/versioned_docs/version-4.0.0/running-keploy/self-healing-ai-api-tests.md @@ -22,7 +22,7 @@ import ProductTier from '@site/src/components/ProductTier'; Keploy can automatically fix failing test cases using its built-in AI engine. This is useful when: - Your API responses have changed slightly (e.g. new fields, formats) -- Assertion mismatches are minor +- You're handling schema changes, such as added fields, changed date formats, or updated static metadata. - You want to fix many tests without editing them one-by-one ### 🔧 How to Use Self-Healing @@ -37,7 +37,8 @@ Keploy can automatically fix failing test cases using its built-in AI engine. Th 3. **Click "Fix with AI"** - - This will trigger Keploy AI to update the assertions based on the current API response. + - Keploy AI analyzes the diff between the expected and actual response. It then proposes updated assertions, allowing you to review and accept the 'healed' version as + the new source of truth. 4. _(Optional)_ **Add Context** From 060d0b0c433bc059c5656d9193832a361485f58e Mon Sep 17 00:00:00 2001 From: Pratham Sikka Date: Thu, 19 Feb 2026 18:51:22 +0530 Subject: [PATCH 14/14] docs: updated docs.md --- .../running-keploy/api-testing-functions.md | 9 +++++---- .../running-keploy/api-testing-variables.md | 7 ++++--- versioned_sidebars/version-4.0.0-sidebars.json | 2 ++ 3 files changed, 11 insertions(+), 7 deletions(-) diff --git a/versioned_docs/version-4.0.0/running-keploy/api-testing-functions.md b/versioned_docs/version-4.0.0/running-keploy/api-testing-functions.md index e2bc760b7..5c0d4066d 100644 --- a/versioned_docs/version-4.0.0/running-keploy/api-testing-functions.md +++ b/versioned_docs/version-4.0.0/running-keploy/api-testing-functions.md @@ -20,14 +20,14 @@ Assertions define the **"Pass/Fail"** criteria for your tests. While standard ch ### 1. Selecting Fields to Assert Choose specifically which parts of a JSON response Keploy should validate during a replay. -![Schema Assertion UI](/static/img/schema-assertion.png) + **Example Context:** In this window, we are targeting a `GET` request on the `/visits/-1` endpoint that expects a `400` status code. Under **Response Fields**, specific keys like `className` and `exMessage` are selected. Toggling these ensures Keploy validates that these fields are returned as the correct data type (strings) during every replay. ### 2. Multi-Type Assertions Stack different assertion types, such as verifying a status code while simultaneously checking if a specific field contains a certain value. -![Multi-Assertion Setup](/static/img/multi-assertion.png) + **Example Context:** This setup enforces two rules simultaneously: 1. **Status Code**: Validates that the server returns a `201` (Created). @@ -38,13 +38,14 @@ Stack different assertion types, such as verifying a status code while simultane ### 1. Writing Inline Logic Access the `request` and `response` objects directly to create complex rules within the assertion panel. -![Custom Function Editor](/static/img/custom-function.png) +Custom Functions **Example Context:** The editor shows a function signature: `function customFunction(request, response)`. This gives you direct access to the full objects, allowing you to write JavaScript logic to determine if the test should pass based on dynamic conditions. ### 2. Global Function Library Save repeatable validation rules to the Global Custom Functions library so they can be reused across your entire development team. -![Global Function Library](/static/img/global-functions.png) +Global Functions + **Example Context:** The library shows reusable logic stored globally. For example, the `customFunction` at the bottom demonstrates an `assert.greater(response.status, 399)` utility, creating a standardized rule to verify error-level status codes across multiple suites. \ No newline at end of file diff --git a/versioned_docs/version-4.0.0/running-keploy/api-testing-variables.md b/versioned_docs/version-4.0.0/running-keploy/api-testing-variables.md index 98bb18a69..bcfa44af5 100644 --- a/versioned_docs/version-4.0.0/running-keploy/api-testing-variables.md +++ b/versioned_docs/version-4.0.0/running-keploy/api-testing-variables.md @@ -20,20 +20,21 @@ Variables in Keploy act as placeholders for dynamic data that changes between te ### 1. Extraction from Responses To reuse data, you define a mapping that tells Keploy exactly where to look in a previous response. -![Variable Extraction](/static/img/var-extraction.png) +Keploy Architecture + **Example Context:** In the view above, we are extracting the unique ID of a record. The mapping `steps["Create_Owner"].response.body.id` captures the value from the **Create_Owner** step. Note the **Unused** badge; Keploy provides this visual hint when a variable has been defined but hasn't been injected into any subsequent request yet. ### 2. Injection into Requests Injection allows you to replace static values with dynamic variables, ensuring your tests remain flexible across different environments and data states. -![Variable Injection](/static/img/var-injection.png) + **Example Context:** This view shows the **Request Details** for an API call to the `/owners` endpoint. By defining the method (e.g., **POST**), you can then use placeholders like `{{owner_id}}` in the URL path or body. Keploy will automatically swap the placeholder with the actual value captured during test execution. ### 3. Global Variable Management Global variables serve as the centralized source of truth for your testing environment. -![Global Variables](/static/img/global-vars.png) + **Example Context:** The **Global Variables** dashboard allows you to manage workspace-wide data. This includes static entries like the **base URL** and dynamic **Global Custom Functions**. For instance, `generateCompanyId()` is a function that returns a unique string starting with `COMP_` followed by a timestamp, ensuring unique identifiers for every test run. \ No newline at end of file diff --git a/versioned_sidebars/version-4.0.0-sidebars.json b/versioned_sidebars/version-4.0.0-sidebars.json index ceec9fe79..e53f63b06 100644 --- a/versioned_sidebars/version-4.0.0-sidebars.json +++ b/versioned_sidebars/version-4.0.0-sidebars.json @@ -173,6 +173,8 @@ "running-keploy/api-testing-cicd", "running-keploy/api-testing-webhook", "running-keploy/api-testing-run-report", + "running-keploy/api-testing-functions", + "running-keploy/api-testing-variables", "running-keploy/api-testing-add-suite", "running-keploy/api-testing-edit-suites", "running-keploy/api-testing-buggy-suites",