# Using ABTasty QA Assistant

This guide explains how to use the ABTasty QA Assistant to test campaigns and feature flags. For integration instructions, see the :

* [React Native Integration Guide.](/server-side/sdks/react-native/abtasty-qa-assistant-for-react-native.md)

### Overview

### What is ABTasty QA Assistant?

The **ABTasty QA Assistant** is a visual testing tool that integrates with ABTasty Feature Experimentation. It provides a floating UI overlay that allows developers and QA engineers to test campaign variations and feature flags without backend changes or app redeployment.

{% hint style="danger" %}
The QA Assistant should **NEVER** be included in production builds. Exposing QA mode in production allows anyone to:\
\- View all campaign configurations\
\- Force any variation\
\- See internal feature flags\
\- Monitor SDK events
{% endhint %}

### Getting started

#### Opening the QA Assistant

1. Look for the **floating button** at the configured position (default: bottom-right corner)
2. **Tap the button** to open the full-screen QA Assistant modal
3. Use the **tab navigation** at the top to switch between sections

<div align="left"><figure><img src="/files/kmMucE9jWZ9H0wgpovzx" alt="" width="188"><figcaption></figcaption></figure></div>

*The floating button appears as an overlay on your app*

#### Main interface

<div align="left"><figure><img src="/files/Z2aHAP6zprphEj1xEPWF" alt="QA Assistant main interface showing three tabs" width="188"><figcaption></figcaption></figure></div>

*Main interface with Campaigns, Events, and Context tabs*

The QA Assistant has three main tabs:

| Tab           | Purpose                                              |
| ------------- | ---------------------------------------------------- |
| **Campaigns** | View all campaigns, force variations and allocations |
| **Events**    | Monitor SDK events in real-time                      |
| **Context**   | Inspect visitor ID and context attributes            |

***

### Dismissing the panel vs. disabling QA mode

There are two distinct ways to stop interacting with the QA Assistant:

| Action                | How                                                    | Effect                                                                           |
| --------------------- | ------------------------------------------------------ | -------------------------------------------------------------------------------- |
| **Dismiss the panel** | Tap the dismiss button or use the dismiss gesture      | Hides the UI panel; QA mode stays active and all forced states are preserved     |
| **Disable QA mode**   | Remove or disable QA mode at the SDK/integration level | Permanently hides the floating button and resets all forced states automatically |

{% hint style="info" %}
Disabling QA mode varies by platform. See your integration guide for detailed steps.
{% endhint %}

### Campaigns tab

{% hint style="warning" %}
All forced variations, allocations, and hidden campaigns are **temporary** and everything returns to normal allocation automatically when:

* Reset when you **disable QA mode**
* Reset when you **restart the app**
  {% endhint %}

### Understanding campaign status

<div align="left"><figure><img src="/files/DuN03Wn8PqkWb9bkRVMn" alt="" width="188"><figcaption></figcaption></figure></div>

*Campaigns organized by status: Accepted (green) and Rejected (red). Search bar at top for filtering.*

**Accepted campaigns** (Green badge or Yellow "Hide" badge)

* Green "Accepted" badge: Allocated campaigns
* Yellow "Hide" badge: Excluded campaigns

**Rejected campaigns** (Red badge or Yellow "Forced" badge)

* Red "Rejected" badge: Cannot force variations
* Yellow "Forced" badge: Allocation forced - can now force variations

#### Viewing campaign details

Each campaign contains three tabs with detailed information to help you understand why campaigns are accepted or rejected.

<div align="left"><figure><img src="/files/LOpR7nlNwWlGMjSz6ofY" alt="Campaign details with three tabs" width="188"><figcaption></figcaption></figure></div>

*Tap any campaign to view Variations, Targeting, and Allocations tabs*

#### Understanding variations

**What you see:**

* **Current variation**: Shows "Your version" badge (green background)
* **Other variations**: Show "View" button to force, or "Reset" button if already forced
* **Flag values**: Feature flag modifications (strings, numbers, booleans, objects)

### Understanding targeting

**Targeting logic:**

* **Targeting groups** linked by OR (match ANY group)
* **Conditions** linked by AND (match ALL in a group)
* Campaign is **Accepted** if ANY group is fully matched

**Common operators:**

* `EQUALS` / `NOT_EQUALS` - Exact match
* `CONTAINS` / `NOT_CONTAINS` - Substring
* `GREATER_THAN` / `LOWER_THAN` - Numeric

**Visual Indicators:**

* ✅ Green checkmarks for matched conditions
* ❌ Red X for unmatched conditions

### Understanding allocations

**What it shows:**

* Traffic distribution across variations with percentage
* If you're in the unallocated portion, campaign is rejected

### How to force a variation

Switch between variations within an accepted campaign (or forced campaign).

{% hint style="info" %}
You can only force variations for campaigns that are **Accepted** (normal allocation) or have been **forced to display** (forced allocation).
{% endhint %}

{% stepper %}
{% step %}

#### Open campaign → Variations tab

<div align="left"><figure><img src="/files/l19qvJcaxXeB3UunmtH1" alt="" width="188"><figcaption></figcaption></figure></div>
{% endstep %}

{% step %}

#### Tap "View" on desired variation → now shows "Your version" badge

<div align="left"><figure><img src="/files/0HuTvWBlEiGgx4ZNw4CJ" alt="" width="188"><figcaption></figcaption></figure></div>
{% endstep %}

{% step %}

#### Dismiss the QA Assistant panel when ready to test (you can force multiple variations/campaigns first)

<div align="left"><figure><img src="/files/Jr0JarXGYivt9RyJJeo1" alt="" width="188"><figcaption></figcaption></figure></div>
{% endstep %}

{% step %}

#### When done testing, reopen QA Assistant and tap "Reset" to revert

<div align="left"><figure><img src="/files/YExekj9czHfSUmlfWEws" alt="" width="188"><figcaption></figcaption></figure></div>
{% endstep %}
{% endstepper %}

**Detailed workflow:**

1. Open campaign from Accepted Campaigns (or force allocation first if rejected)
2. Go to **Variations** tab
3. Tap **"View"** button on **any variation** you want to force
4. Variation now shows **"Your version"** badge
5. Optionally force other variations/campaigns as needed
6. **Dismiss the QA Assistant panel** when ready to test all forced changes
7. Test your app - it displays all forced variations/campaigns
8. Reopen QA Assistant and tap **"Reset"** button to revert

### How to force an allocation

Test rejected campaigns without them meeting targeting rules. **After forcing allocation, you can force variations.**

{% stepper %}
{% step %}

#### Find "Force display" button next to rejected campaign

<div align="left"><figure><img src="/files/dTz3zx0v6TE7o0AQJZSD" alt="" width="188"><figcaption></figcaption></figure></div>
{% endstep %}

{% step %}

#### Badge changes to "Forced" (yellow) - campaign is now forced and you can force variations

<div align="left"><figure><img src="/files/OxQ7UHVr2ytIe2AEdjYu" alt="" width="188"><figcaption></figcaption></figure></div>
{% endstep %}

{% step %}

#### Dismiss the QA Assistant panel when ready to test (you can force other allocations/variations first)

<div align="left"><figure><img src="/files/Jr0JarXGYivt9RyJJeo1" alt="" width="188"><figcaption></figcaption></figure></div>
{% endstep %}

{% step %}

#### When done testing, reopen QA Assistant and tap "Initial state" to revert

<div align="left"><figure><img src="/files/V88A1JP5DTVQy3HE0LDN" alt="" width="188"><figcaption></figcaption></figure></div>
{% endstep %}
{% endstepper %}

**Detailed workflow:**

1. Find campaign in **Rejected Campaigns** section
2. Tap **"Force display"** button
3. Badge changes from "Rejected" (red) to **"Forced"** (yellow)
4. Campaign **stays in Rejected section** but you can **now force variations**
5. Optionally force other allocations/variations as needed
6. **Dismiss the QA Assistant panel** when ready to test all forced changes
7. Test the forced campaign in your app
8. Reopen QA Assistant and tap **"Initial state"** to revert to rejected

### How to hide a campaign

Hide accepted campaigns to test exclusion scenarios.

{% stepper %}
{% step %}

#### Find "Hide" button next to accepted campaign

<div align="left"><figure><img src="/files/tmMLHNwjOOPDjFTH38Ty" alt="" width="188"><figcaption></figcaption></figure></div>
{% endstep %}

{% step %}

#### Badge changes to "Hidden" (yellow) - campaign is now hidden

<div align="left"><figure><img src="/files/uZQsl50QRAtI5XBTYbeh" alt="" width="188"><figcaption></figcaption></figure></div>
{% endstep %}

{% step %}

#### Dismiss the QA Assistant panel when ready to test (you can hide multiple campaigns first)

<div align="left"><figure><img src="/files/Jr0JarXGYivt9RyJJeo1" alt="" width="188"><figcaption></figcaption></figure></div>
{% endstep %}

{% step %}

#### When done testing, reopen QA Assistant and tap "Initial state" to restore

<div align="left"><figure><img src="/files/myEcSvMEvvgFndmRJCJy" alt="" width="188"><figcaption></figcaption></figure></div>

{% endstep %}
{% endstepper %}

**Detailed workflow:**

1. Find campaign in **Accepted Campaigns** section
2. Tap **"Hide"** button
3. Badge changes from "Accepted" (green) to **"Hidden"** (yellow)
4. Optionally hide other campaigns as needed
5. **Dismiss the QA Assistant panel** when ready to test all exclusions
6. Test your app's fallback behavior - app behaves as if campaigns were rejected
7. Reopen QA Assistant and tap **"Initial state"** to restore

**Use cases:**

* Test fallback behavior when features are disabled
* Verify app works without specific campaigns
* Ensure dependent features handle missing campaigns

### Resetting forced allocations

<div align="left"><figure><img src="/files/wWWYeeUf3aPmAK08oVJ4" alt="" width="188"><figcaption></figcaption></figure></div>

*"Reset All" button clears all forced states*

**Per-Campaign reset:**

1. Tap **"Initial state"** button on campaign
2. Only that campaign reverts to normal state

**Global reset:**

1. Tap **"Reset All"** button
2. All campaigns revert to normal state

**Automatic reset:**

All forced states automatically reset when you:

* Disable QA mode&#x20;
* Restart the app

{% hint style="info" %}
**Remember**: All forced states are temporary and return to normal allocation automatically when QA mode is disabled or the app restarts.
{% endhint %}

### Events tab

Monitor all SDK events in real-time.

<div align="left"><figure><img src="/files/XXiJprPfNuSGlMNyhtEa" alt="" width="188"><figcaption></figcaption></figure></div>

*Events shown with icons: Page, Screen, Event, Transaction, and Activate . Search bar at top, Clear button to remove all events.*

#### Viewing Event details

*Tap any event to view type, timestamp, action, category, label, and properties*

**When to clear Events:**

* Starting a new test scenario
* Isolating specific event sequences

{% hint style="info" %}
Events fired while QA mode is active are **not recorded in your ABTasty reporting dashboards**. This is intentional, it prevents test traffic from polluting your campaign analytics and conversion reports.
{% endhint %}

### Context tab

View current visitor information and context attributes.

<div align="left"><figure><img src="/files/F9qxILqMm8ReExYVSbZS" alt="" width="188"><figcaption></figcaption></figure></div>

*Visitor ID and context attributes in JSON format*

#### Why Context matters

* **Targeting**: Context values determine campaign eligibility
* **Personalization**: Affects which variations you see
* **Testing**: Change context to test different scenarios

{% hint style="info" %}
Use Context tab with Targeting tab to understand campaign acceptance/rejection.
{% endhint %}

### Glossary

**Accepted Campaign**: A campaign that the visitor is allocated to and currently active for them.

**Rejected Campaign**: A campaign the visitor is NOT allocated to due to targeting rules or traffic allocation.

**Forced Allocation**: Manual override enabling variation forcing for rejected campaigns. Campaign stays in Rejected section but badge changes to "Forced" (yellow), allowing you to force variations. **Session-only** - resets on app restart.

**Forced Variation**: Manual override switching to a specific variation within an accepted campaign or forced campaign. **Session-only** - resets on app restart.

**Hide Campaign**: Manual override hiding an accepted campaign, allowing testing of exclusion scenarios. **Session-only** - resets on app restart.

**QA Mode**: Special SDK mode enabling the QA Assistant interface.


---

# Agent Instructions: Querying This Documentation

If you need additional information that is not directly available in this page, you can query the documentation dynamically by asking a question.

Perform an HTTP GET request on the current page URL with the `ask` query parameter:

```
GET https://docs.abtasty.com/server-side/integrations/using-abtasty-qa-assistant.md?ask=<question>
```

The question should be specific, self-contained, and written in natural language.
The response will contain a direct answer to the question and relevant excerpts and sources from the documentation.

Use this mechanism when the answer is not explicitly present in the current page, you need clarification or additional context, or you want to retrieve related documentation sections.
