7.1 - Integrations

Integrations — 07 - Integrations documentation.

Azure DevOps Integration for AIQ

Use this article when integrating AIQ with Azure DevOps repositories, pipelines, work items, or release workflows.

What changed in this article

Validation workflow

  1. Confirm the Azure DevOps organization, project, repository or pipeline, and integration owner.
  2. Validate token scope, branch/path settings, artifact access, and pipeline/work item behavior with a controlled test.
  3. Document the integration owner and rotation process for credentials or tokens.

Review note: This page now distinguishes current Azure DevOps guidance from the legacy TFS reference.


Last updated: October 5, 2026

If you have feedback on this topic, contact documentation@appvance.ai.

Azure Monitor Integration for AIQ

Use this article when connecting AIQ workflows or performance tests with Azure Monitor metrics, logs, or alerts.

What changed in this article

Validation workflow

  1. Identify the Azure resources, metrics, logs, and time windows that should be correlated with AIQ runs.
  2. Validate authentication, permissions, workspace access, and query results with a small execution.
  3. Review AIQ results and Azure Monitor data together before diagnosing bottlenecks.

Review note: This page now supports observability correlation instead of a generic Azure Monitor mention.


Last updated: October 5, 2026

If you have feedback on this topic, contact documentation@appvance.ai.

Azure Active Directory Authentication for AIQ

Azure Active Directory Authentication for AIQ

Use this article when integrating AIQ authentication with Azure Active Directory, now Microsoft Entra ID. Confirm tenant, application registration, redirect URL, claims, and user/group assignments before enabling the integration for users.

Configuration checklist

Validation workflow

  1. Confirm login redirects from AIQ to the expected tenant.
  2. Validate successful login, failed-login behavior, and role/group mapping.
  3. Check that logout and session timeout behavior match policy.
  4. Document tenant ID, app registration owner, secret expiration, and support contact.

Last updated: October 8, 2026

Configure Bitbucket Repository Integration in AIQ

Use this article when AIQ needs to connect to a Bitbucket repository for source-controlled test assets.

Validation workflow

  1. Identify whether the repository is hosted in Bitbucket Cloud or Bitbucket Server/Data Center.
  2. Validate repository URL, branch, authentication method, and network access from AIQ.
  3. Run a small repository sync or checkout and verify the expected AIQ assets are available.

Last updated: September 29, 2026

CircleCI

Operate an Appvance Test Scenario from CircleCI using the Appvance IQ Plugin.

Appvance IQ Test scenarios can be run from CircleCI integration using a CIPlugin that Appvance provides. CIPlugin enabled you to start test scenarios from the YAML tag (CI Tools).

Prerequisites

Running the test scenario

  1. Create a project in your GitHub account.
  2. Create a folder called CircleCI with the file called config.yml.
    y4WrP2glg7TUKvQj-b4f73cb2c2d4.png
  3. Config.yml should have the minimum following details in it:
    # Python CircleCI 2.0 configuration file                        #                        # Check https://circleci.com/docs/2.0/language-python/ for more details                        #                        jobs:                        build:                        docker:                        - image: circleci/java:8-jdk                        working_directory: ~/repo                        steps:                        - checkout                        - run:                        name: Install ant                        command: |                        sudo apt-get install -y ant                        echo 'ant installed.'                        cd /home/circleci/repo/appvance/scenario1                        ant -buildfile build.xml -DbuildNumber=$CIRCLE_WORKFLOW_ID executeScenario                        cd /home/circleci/repo/appvance/scenario2                        ant -buildfile build.xml -DbuildNumber=$CIRCLE_WORKFLOW_ID executeScenario                        no_output_timeout: 2h                        - save_cache:                        key: deps1_{{ .Revision }}                        paths:                        - ~/repo                        workflows:                        version: 2                        build_and_test:                        jobs:                        - build                        - dev:                        requires:                        - build                        filters:                        branches:                        only:                    - /feature-.*/
  4. This is going to install JDK 8, Install ant that is required to build AppvanceRestClientWithDeps.jar, and call the build.xml which internally runs the scenarios that are mentioned
  5. Create a folder called appvance and inside have build.xml file and localhost.json files per scenario for better organizing
    Lyt5Xr8jTsCTNI6n-f7e72eda39b2.png
    sUNIRZWEq3r8pVdd-f03ee025c338.png

build.xml would have the following details.


<project name="Lead Genius CI" default="addDeps" basedir=".">        <description>Lead Genius Blueprint Circle CI</description>        <property name="aiqCreds" value="localhost.json" />        <property name="scenarioName" value="ScenarioFiles/Scenario1.scenario"/>        <property name="resourcesDir" value="."/>        <target name="init">        <path id="IvyPath">        <pathelement location="AppvanceRestClientWithDeps.jar"/>        </path>        </target>        <target name="setup" depends="init">        <get src="https://s3-us-west-2.amazonaws.com/appvanceivy/projects/AppvanceRestClientWithDeps/master/latest/ivy" dest="AppvanceRestClientWithDeps.jar"/>        <taskdef name="blueprintEcho" classname="com.appvance.blueprint.BlueprintEcho" >        <classpath refid="IvyPath"/>        </taskdef>        <blueprintEcho message="Setting up blueprint ant tasks ..." />        </target>        <target name="executeScenario" depends="setup">        <taskdef name="runScenario" classname="com.appvance.ci.ExecuteScenario" >        <classpath refid="IvyPath"/>        </taskdef>        <runScenario scenario="${scenarioName}"        aiqCreds="${aiqCreds}"        dir="${resourcesDir}"/>        </target>        </project>


The file is self-explanatory and the scenario name is something that needs to be changed along with the path.

localhost.json would have the following details


{        "controller":{        "url":"http://ec2-x-x-x-x.us-west-2.compute.amazonaws.com:8080",        "username":"appvance",        "password":"appvance",        "workFolder":"/MyWorkdirectory/"        }        }


URL of the controller has to be changed and also the workFolder of the scenarios to be changed.

Any changes done to the files will initiate a build-in CircleCI.

You can go to your CircleCI Account after all these configurations are done in Github and the jobs can be run from CircleCI.

NTXzcGpaie69DeIH-b203a5bb5ca5.png

After the successful execution, go to the Install Ant section which will display all the logs and the link to navigate to Reports of the test run.

You can copy-paste the link in your favorite browser to check the results in details

TvBdi2MN0Z32Uqo9-93b8e7f98a70.png

Last updated: October 15, 2026

If you have any feedback on this topic, please contact us at documentation@appvance.ai

Using OWASP Top Ten results

Treat the OWASP Top Ten as a risk-awareness taxonomy for organizing findings, not as a substitute for application-specific threat modeling. Run scans only within written scope, preserve the affected request and response evidence, and have the application owner validate severity and remediation.

Elasticsearch and OpenSearch Integration

Use this article when configuring or maintaining AIQ integrations that send, read, or validate data through Elasticsearch or OpenSearch.

What changed in this article

Validation workflow

  1. Confirm whether the environment uses Elasticsearch, OpenSearch, or a compatible managed service.
  2. Validate endpoint URL, TLS, authentication, index pattern, permissions, and network reachability.
  3. Run a controlled query or write test and verify results without exposing sensitive data.

Review note: This page now focuses on safe integration maintenance rather than a bare product-name reference.


Last updated: October 2, 2026

If you have feedback on this topic, contact documentation@appvance.ai.

Amazon AWS

Amazon AWS

Amazon AWS

Contents:

Amazon AWS

Access a Windows EC2 Machine Through Windows Firewall

Use this article when a local machine needs to reach a Windows EC2 instance that has Windows Firewall enabled.

Validation workflow

  1. Confirm the EC2 security group allows the required port from the local source IP.
  2. Confirm Windows Firewall allows the same service inside the instance.
  3. Test connectivity with the approved access method and then narrow any temporary rule changes.

Last updated: September 25, 2026

Amazon AWS

Amazon EC2 Instance has no public DNS assigned to it

Please follow the below steps to add dns hostnames to your EC2 Instances.

Hope this helps.


Last updated: October 15, 2026

If you have any feedback on this topic, please contact us at documentation@appvance.ai

Readiness outcome

Complete the checklist before installation begins and record any exception with an owner and remediation date. Keep platform requirements separate from procedural readiness so changes to hosts, certificates, credentials, or integrations can be reviewed without losing the deployment baseline.

Amazon AWS

Attaching an Amazon EBS Volume to an Windows Instance

Attaching an Amazon EBS Volume to an Windows Instance.
You can attach an EBS volume to one of your instances that is in the same Availability Zone as the volume.
Prerequisites

To attach an EBS volume to an instance using the console
1. Open the Amazon EC2 console.
2. Click Volumes in the navigation pane.
3. Select a volume and then click Attach Volume.
4. In the Attach Volume dialog box, start typing the name or ID of the instance to attach the volume to in the Instance box, and select it from the list of suggestion options (only instances that are in the same Availability Zone as the volume are displayed).
5. You can keep the suggested device name, or enter a different supported device name.


Important The block device driver for the instance assigns the actual volume name when mounting the volume, and the name assigned can be different from the name that Amazon EC2 recommends.
6. Click Attach.
7. Connect to your instance and make the volume available.

Making an Amazon EBS Volume Available for Use

After you attach an Amazon EBS volume to your instance, it is exposed as a block device. You can format the volume with any file system and then mount it. After you make the EBS volume available for use, you can access it in the same ways that you access any other volume. Any data written to this file system is written to the EBS volume and is transparent to applications using the device.
Note that you can take snapshots of your EBS volume for backup purposes or to use as a baseline when you create another volume.

Making the Volume Available on Windows

Use the following procedure to make the volume available.
1.Log in to your Windows instance using Remote Desktop.
2. Start the Disk Management utility. On Windows Server 2012, on the taskbar, right-click the Windows logo, and then select Disk Management. On Windows Server 2003/2008, click Start, point to Administrative Tools, select Computer Management, and then select Disk Management.
3. Select the disk that represents the new EBS volume.


4UXqvu6ACiTSrtyN-ce1029bbaf1a.png


4. On the Disk Management menu, select Action - All Tasks - Online.


2gG0lRZHkpLrveO6-fe9f17877a74.png


5. A new disk needs to be initialized before it can be used.
Caution:
If you're mounting a volume that already has data on it (for example, a public data set), make sure that you don't reformat the volume and delete the existing data.
To initialize a new disk:
a. In the Disk Management utility, select the new EBS volume disk.
b. On the Disk Management menu, select Action - All Tasks - Initialize Disk. Attaching Volume to the instance Page 4
c. In the Initialize Disk dialog, select the disk to initialize, select the desired partition style, and press OK.
Restart your Amazon Instance.


Last updated: October 16, 2026

If you have any feedback on this topic, please contact us at documentation@appvance.ai

Amazon AWS

Best Practices: Running Appvance IQ testing using EC2 cloud file

The Best Practices that needs to be followed are below:


Last updated: October 15, 2026

If you have any feedback on this topic, please contact us at documentation@appvance.ai

Using the DPL categories

Choose a DPL type based on how its data is produced and consumed at runtime. Confirm the DPL’s schema, mutability, and distribution behavior in the related Operational Test Data documentation before referencing it from a scenario. This page had no technical body content; the overview now directs customers to the supported DPL workflow without inventing additional product behavior.

Amazon AWS

Creating EC2 instances

via Scenario Builder and running the tests, the first run's response times are on a higher side compared to consecutive runs by using the instances that are already running

Creating EC2 instances via Scenario Builder and running the tests, the first run's (where Appvance IQ creates requested instances from the Scenario builder using an AMI) response times are on a higher side compared to consecutive runs by using the instances that are already running.

AWS has a lazy start up, only required part of the hard disk is copied from the AMI to the run time hard disk.

Because of this, the machine starts up very fast, but accessing some parts of the hard disk could be very slow.

This affects Appvance IQ during the first scenario execution. The response times reported could be on the higher side.

Amazon provides a workaround which is reading the hard disk, in order to avoid this slowness during production.

Nevertheless the proposed solution is for Linux platform only.

Amazon documentation is located here.

http://docs.aws.amazon.com/AWSEC2/latest/UserGuide/ebs-initialize.html

Appvance IQ now has the capability to read the hard disk the first time the machine is created (This is for windows platforms)

This will be done just the first time the AMI is created.

Note: Still there could be little difference in the response times when the test is started for the first time to create instance and run the scenario than compared to the subsequent scenario runs using the same started instance.


Last updated: October 15, 2026

If you have any feedback on this topic, please contact us at documentation@appvance.ai

Interpreting the workflow

The example separates login, purchase, and logout requests so the scanner can receive the authenticated session while the functional flow continues. Use test-only accounts and data, verify that session cookies are handled as intended, and compare the scan run with a clean functional run to distinguish scanner effects from application behavior.

Amazon AWS

Use AWS Reserved Instances for AIQ Infrastructure

AWS Reserved Instances can reduce infrastructure cost for stable AIQ workloads, but they should be planned with finance, cloud operations, and environment owners. Do not reserve capacity without confirming usage, region, instance family, term, and ownership.

Before reserving

Operational guidance

  1. Track which AIQ environments are intended to consume the reservation.
  2. Review utilization regularly to avoid unused commitment.
  3. Document renewal dates and ownership.
  4. Re-evaluate reservations before AIQ upgrades, scaling changes, or cloud architecture changes.

Last updated: October 6, 2026

Amazon AWS

Supported Instance Types

What are the Instance types that are supported from Amazon EC2 that can be used in Appvance to run tests?

Following are the list of supported Instance Types.


Last updated: March 25, 2024

If you have any feedback on this topic, please contact us at documentation@appvance.ai

Amazon AWS

Changing your IP in the security group with aws cli.

First of all take install aws cli from this link:

https://docs.aws.amazon.com/cli/latest/userguide/getting-started-install.html

Secondly, open the terminal and setup the default profile:

aws configure

insert AWS access Key ID:

insert AWS Secret Access Key:

Default region name:

Default output format: type <json>

After having to make the profile in config and credentials.

Instructions are here:

https://docs.aws.amazon.com/cli/latest/userguide/cli-configure-profiles.html

Download the script from the repository:

https://gitlab.appvance.net/Appvance/devops/patch-rules-on-aws

https://gitlab.appvance.net/Appvance/devops/patch-rules-on-aws/-/blob/master/patch_my_ruls.sh - for Unix machine.

https://gitlab.appvance.net/Appvance/devops/patch-rules-on-aws/-/blob/master/patch_my_ruls.ps1 - for Windows machine.

Go to the AWS console where your EC2 instance:

Open preferred security group:

8q3NGxhjTcrQ8tm4-4b726b176179.png mX14QGqJvIJlJhZS-d53bf004a029.png

Check marked values:

nNAt4J2zZlBwFp9T-a7b0846dd3c6.png

Open the file under your OS in your favorite redactor and change the value:

IXr3yQ1T6ExwnByu-8a5f7cd380f5.png

From now, when the IP is changed, and breaks ties with EC2 instance. Launch script it changes IP fast.

https://gitlab.appvance.net/Appvance/devops/patch-rules-on-aws/-/blob/master/patch_my_ruls.sh - for Unix.

https://gitlab.appvance.net/Appvance/devops/patch-rules-on-aws/-/blob/master/patch_my_ruls.ps1 - for Windows.


Last updated: October 16, 2026

If you have any feedback on this topic, please contact us at documentation@appvance.ai

Amazon AWS

AWS WorkSpace and Google Chrome

AWS WorkSpaces is a cloud-based virtual desktop infrastructure (VDI) service that lets users access desktop applications and data from devices with internet access. When AWS WorkSpaces is used for AIQ testing, review the browser’s third-party-cookie and Chrome policy settings.

Enable third-party cookies

Enable third-party cookies in the browser used to record and run AIQ test scenarios. AIQ tests may need to store and retrieve cookies from domains other than the domain currently open. This is important for authentication and other workflows that rely on cross-domain cookies.

For example, if the application uses a third-party identity provider, disabling third-party cookies can prevent the browser from storing the provider’s authentication cookie and cause login to fail. It can also prevent accurate simulation of workflows that depend on third-party tracking cookies.

Chrome policies

Amazon WorkSpaces supports Google Chrome, and administrators can enforce Chrome policies such as:

For AWS WorkSpaces browser-policy details, see AWS browser policies documentation.

Inspect Chrome policies

Use either of the following methods to review the policies applied to the Chrome browser in the WorkSpace.

Export policies to a text file

  1. Open a new Chrome tab.
  2. Enter chrome://policy in the address bar and press Enter.
  3. Review the policies currently applied, including user and system policies configured by your IT administrator.
  4. Select the policy text and copy it with Ctrl+C on Windows or Command+C on macOS.
  5. Paste the copied text into a text editor or another application for analysis or sharing with your IT administrator.

Export policies to a JSON file

  1. Sign in to the AWS Management Console and open the Amazon WorkSpaces console.
  2. Select the WorkSpaces directory whose Chrome policies you want to export.
  3. Open the Group Policy tab and select the group policy containing the Chrome settings.
  4. Click Edit beside the Chrome Policies section.
  5. In the Chrome policies editor, click Download.
  6. Choose a local destination and click Save.
  7. Use the JSON file to import the policies into another Amazon WorkSpaces directory or share it with IT administrators.

Last updated: October 15, 2026

If you have feedback on this topic, contact documentation@appvance.ai.

Amazon AWS

Create an AWS IAM Access Key for AIQ Integrations

Create an AWS IAM Access Key for AIQ Integrations

Create an AWS IAM access key only when an AIQ integration requires programmatic AWS access and a role-based approach is not available. Follow the customer's cloud security policy and use the minimum permissions required.

Security checklist

Validation workflow

  1. Test the integration with the minimum required permissions.
  2. Confirm logs do not print the access key or secret.
  3. Document key owner, purpose, creation date, rotation date, and AWS account.
  4. Disable the key if the integration is retired or replaced by a role-based method.

Last updated: October 8, 2026

Amazon AWS

Set Up IAM Role Permissions for an AWS EC2 AIQ Controller

Set Up IAM Role Permissions for an AWS EC2 AIQ Controller

Use an IAM role for an EC2-hosted AIQ Controller when the controller must access AWS services without long-lived access keys. Scope permissions to the exact services and resources required by the integration.

Security checklist

Validation workflow

  1. Attach the IAM role or instance profile to the EC2 Controller.
  2. Restart or refresh the integration if required by the workflow.
  3. Run a small AIQ operation that uses the AWS permission.
  4. Confirm access succeeds and no broader permissions are required.
  5. Document role name, policy owner, AWS account, and review date.

Last updated: October 8, 2026

Amazon AWS

Amazon S3 Cross-Account Repository

This document explains how a client sets up an Amazon S3 bucket in their own AWS account so that it can be used as an S3 repository by an AppvanceIQ (AIQ) Controller that is hosted in Appvance's AWS account, using AIQ's cross-account S3 mode.

Overview

In this setup:

This is the recommended pattern because the client never has to share IAM access keys/secrets with Appvance, access is scoped to a single role with only the S3 permissions needed, and the client retains full control (revocable at any time by deleting/disabling the role or its trust policy).

High-level flow

  1. Client creates an S3 bucket in their account.
  2. Client creates an IAM role in their account with a trust policy allowing the Appvance Controller's specific IAM role to assume the role, and a permissions policy scoping access to just that bucket.
  3. Client shares the Role ARN (and, if used, the External ID) with Appvance.
  4. Appvance configures the AIQ Controller's S3 repository settings to use cross-account mode with that Role ARN.
  5. At runtime, the Controller's AWS integration layer calls sts:AssumeRole, receives temporary credentials, and uses those for all S3 operations against the bucket.

Prerequisites

Step 1 — Create the S3 Bucket

  1. In the client AWS account, go to S3 → Create bucket.
  2. Choose a globally unique bucket name, e.g. clientname-aiq-repo.
  3. Select the AWS region (ideally the same or nearest region to the Appvance Controller for latency).
  4. Recommended settings:
    • Block Public Access: Keep all four options enabled (bucket should never be public).
    • Bucket Versioning: Enable (protects against accidental overwrite/delete of test artifacts).
    • Default encryption: Enable SSE-S3 (AES256), or SSE-KMS — either the AWS-managed default key (alias/aws/s3) or a customer-managed key — if the client prefers KMS-based encryption.
    • Object Ownership: Bucket owner enforced (ACLs disabled).
  5. Create the bucket.

Step 2 — Create the Cross-Account IAM Role

This role is what the AIQ Controller in the Appvance account will assume.

  1. Go to IAM → Roles → Create role.
  2. Choose Custom trust policy and enter a trust policy that allows the Appvance Controller's specific IAM role to assume this role. This is the default recommendation — Appvance provisions a dedicated controller role per customer (e.g. arn:aws:iam::650030447088:role/clientname-aiq-controller-role), and scoping the trust policy to that exact role is tighter than trusting the whole Appvance account. Example (using an External ID, recommended):

{
  "Version": "2012-10-17",
  "Statement": [
    {
      "Effect": "Allow",
      "Principal": {
        "AWS": "arn:aws:iam::650030447088:role/clientname-aiq-controller-role"
      },
      "Action": "sts:AssumeRole",
      "Condition": {
        "StringEquals": {
          "sts:ExternalId": "REPLACE_WITH_AGREED_EXTERNAL_ID"
        }
      }
    }
  ]
}

Replace clientname-aiq-controller-role with the actual Controller role ARN Appvance provides for this customer. If Appvance instead indicates the integration should trust the account as a whole (less common), use arn:aws:iam::650030447088:root as the Principal instead. Confirm the exact principal with the Appvance team before finalizing.

  1. Skip attaching AWS managed permission policies at this step — a custom least-privilege policy will be attached next.
  2. Name the role, e.g. clientname-aiq-crossaccount-role.
  3. Create the role.

Step 3 — Attach a Least-Privilege S3 Permissions Policy

Create and attach a customer-managed policy scoped to only the bucket created in Step 1.

{
  "Version": "2012-10-17",
  "Statement": [
    {
      "Sid": "AllowListBucket",
      "Effect": "Allow",
      "Action": [
        "s3:ListBucket",
        "s3:GetBucketLocation"
      ],
      "Resource": "arn:aws:s3:::clientname-aiq-repo"
    },
    {
      "Sid": "AllowObjectReadWriteDelete",
      "Effect": "Allow",
      "Action": [
        "s3:GetObject",
        "s3:PutObject",
        "s3:DeleteObject",
        "s3:GetObjectVersion",
        "s3:AbortMultipartUpload",
        "s3:ListMultipartUploadParts"
      ],
      "Resource": "arn:aws:s3:::clientname-aiq-repo/*"
    }
  ]
}

Notes:

Attach this policy to the role created in Step 2.

Step 4 — (Optional but Recommended) Restrict the Bucket Policy

In addition to the IAM role's permissions policy, add a bucket policy on the S3 bucket itself that only allows access from the specific cross-account role. This provides defense-in-depth: even if the IAM policy were ever broadened by mistake, the bucket policy still limits who can touch it.

{
  "Version": "2012-10-17",
  "Statement": [
    {
      "Sid": "AllowAIQCrossAccountRoleOnly",
      "Effect": "Allow",
      "Principal": {
        "AWS": "arn:aws:iam::CLIENT_ACCOUNT_ID:role/clientname-aiq-crossaccount-role"
      },
      "Action": [
        "s3:ListBucket",
        "s3:GetBucketLocation",
        "s3:GetObject",
        "s3:PutObject",
        "s3:DeleteObject",
        "s3:GetObjectVersion"
      ],
      "Resource": [
        "arn:aws:s3:::clientname-aiq-repo",
        "arn:aws:s3:::clientname-aiq-repo/*"
      ]
    }
  ]
}

Replace CLIENT_ACCOUNT_ID with the client's own AWS account ID.

Step 5 — Share the Connection Details with Appvance

Once the bucket, role, and policies are created, share the following with the Appvance team so the AIQ Controller can be configured:

Item

Example

Notes

Bucket name

clientname-aiq-repo

 

Bucket region

us-east-1

Must match what's configured in AIQ

Role ARN

arn:aws:iam::CLIENT_ACCOUNT_ID:role/clientname-aiq-crossaccount-role

Used by the Controller for sts:AssumeRole

External ID

REPLACE_WITH_AGREED_EXTERNAL_ID

Only if used in the trust policy

KMS Key ARN (if applicable)

arn:aws:kms:...

Required if bucket uses SSE-KMS — either the resolved default key ARN or a customer-managed key ARN

These details should be shared through a secure channel (not plaintext email), since the Role ARN plus External ID together control access to the bucket.

Step 6 — Configure the AIQ Controller (Appvance side)

On the AIQ Controller, the S3 repository is configured in cross-account mode, providing:

Internally, AIQ's AWS integration layer performs an sts:AssumeRole call against the client's role, receives short-lived temporary credentials, and uses those credentials for all S3 operations (list, get, put, delete) against the bucket — no long-lived client credentials are ever stored in the Controller.

Step 7 — Validate the Setup

  1. From the Controller, trigger a test scenario/run that writes to the S3 repo.
  2. Confirm the object appears in the client's bucket (via S3 Console or CLI: aws s3 ls s3://clientname-aiq-repo/).
  3. Confirm the Controller can list and read back existing objects from the bucket.
  4. Check CloudTrail in the client account for AssumeRole and s3:* events from the Controller to confirm access is going through the intended role.

Security Recommendations

Troubleshooting

Symptom

Likely Cause

Fix

AccessDenied on AssumeRole

Trust policy principal or External ID mismatch

Confirm the exact Principal ARN Appvance uses, and that the External ID matches exactly on both sides

AccessDenied on S3 operations after successful AssumeRole

IAM policy or bucket policy too narrow (wrong bucket name/prefix)

Verify Resource ARNs in both the role's permissions policy and the bucket policy match the actual bucket/prefix

Objects upload but can't be read back

KMS permissions missing on the cross-account role — this applies to both customer-managed keys and the AWS-managed default key (alias/aws/s3)

Add kms:Decrypt/kms:GenerateDataKey/kms:DescribeKey to the role's IAM policy scoped to the resolved key ARN, and for customer-managed keys also add the role as a key user in the KMS key policy

Intermittent ExpiredToken errors

Temporary credentials from AssumeRole expired mid-operation on long-running jobs

Confirm the Controller's AWS SDK layer is refreshing/re-assuming the role rather than caching credentials indefinitely

FAQ

Is IMDSv1 required on the client side for this setup?

No. Neither IMDSv1 nor IMDSv2 is required in the client's AWS account for this integration, and clients can safely leave IMDSv1 disabled.

This setup does not involve any EC2 instances running in the client's AWS account. It consists entirely of an IAM role, a trust policy, an S3 bucket policy, and STS AssumeRole calls initiated from the Appvance side. The AIQ Controller runs in Appvance's AWS account (650030447088) and calls sts:AssumeRole against the client's role to obtain temporary credentials — no compute resource in the client's account is ever involved, so there is no instance in the client's environment that would query the Instance Metadata Service (IMDS) as part of this flow.

Whatever IMDS credential-fetching occurs for the Controller itself happens on Appvance's own EC2 instance, in Appvance's own AWS account, and is entirely independent of and invisible to the client's environment.

For a client's security review: AWS's current guidance favors IMDSv2-only (with IMDSv1 disabled) as the more secure default, since it protects against SSRF-based credential theft. Leaving IMDSv1 off is aligned with AWS best practice, not against it.

This answer is scoped specifically to the S3 cross-account repository integration described in this document. If a client is also running other AIQ components inside their own AWS account — for example, self-hosted TestNodes or agents on their own EC2 instances — those are separate compute resources with their own IMDS considerations, unrelated to this S3 cross-account setup.

Summary

The client only needs to create an S3 bucket, an IAM role with a scoped trust + permissions policy, and share the Role ARN (and External ID) with Appvance. No credentials ever leave the client's account — the AIQ Controller in Appvance's AWS account (650030447088) uses temporary, audit-able STS credentials obtained by assuming that role, keeping the client in full control of their own data at all times.

Atlassian Jira

Atlassian Jira

Atlassian Jira

Appvance IQ supports integration with Jira Cloud and Jira hosted on a server. The following sections detail how to set up each type of integration and how to configure Appvance IQ Global Options.


Last updated: October 15, 2026

If you have any feedback on this topic, please contact us at documentation@appvance.ai

Start with a recorded DS3 script, inspect its accessors and waits, then parameterize data before adding it to a Scenario. Run a small validation execution first; only after the script is stable should you configure distributed users, reports, or performance workloads.

Atlassian Jira

Configure AIQ Jira Cloud Integration


Use the Jira Cloud integration to connect AIQ execution findings with Jira tracking. Configuration details can vary by Jira tenant and AIQ release, so confirm the approved authentication and permission model before setup.

Before configuring

Validation workflow

  1. Configure the Jira Cloud connection in AIQ using approved credentials.
  2. Create or update a test issue from a non-production execution.
  3. Confirm required fields, links, and attachments are populated as expected.
  4. Record troubleshooting notes for permission or field-mapping errors.

Last updated: September 18, 2026

Atlassian Jira

Configure AIQ Jira Server Integration

Use this article when AIQ needs to connect to an on-premises or self-managed Jira Server/Data Center instance.

Validation workflow

  1. Confirm whether the customer uses Jira Server/Data Center rather than Jira Cloud.
  2. Validate AIQ can reach the Jira base URL and authenticate with the approved account.
  3. Create a test issue and verify required fields, attachments, and status transitions.

Last updated: September 29, 2026

Atlassian Jira

Jira Integration API Notes

Jira Integration API Notes

This page keeps API-level notes for Jira integration. Use the main Jira Cloud integration article as the canonical setup guide for configuration, permissions, and troubleshooting.

Use this page for

Maintenance guidance

  1. Do not duplicate the full Jira Cloud setup procedure here.
  2. Keep endpoint and permission notes aligned with the maintained Jira Cloud integration article.
  3. Remove examples that expose tokens, tenant-specific URLs, or internal project keys.

Last updated: September 18, 2026

Bamboo

Bamboo

Bamboo

Setup Build to run tests in Bamboo (Windows - localhost)

  1. Download and install Atlassian Bamboo on one of your servers
  2. Before you install Bamboo, check that you're running a supported Java version and that the JAVA_HOME (pointing to JDK) and JRE_HOME (pointing to JRE) environment variable is set correctly

Download Bamboo

  1. Download Bamboo from the Atlassian download site.
    Note: It is highly recommended to avoid placing the Bamboo home directory in any Windows security controlled directory, for example, C:\Program Files
  2. Launch the Bamboo Windows installer to begin the installation wizard
  3. The installer requires you to specify two directories:
    Destination directory— This is the directory where Bamboo's application files will be installed. The default is:
    C:\Program Files\Bamboo
  4. Bamboo home directory— This is the directory where Bamboo will store its configuration data. If the directory you specify doesn't exist, Bamboo will create the directory when it launches. The default is:
    C:\Users\<current-user>\Bamboo-home
  5. Ensure that the Bamboo home directory is not located inside the <Bamboo installation directory>

Start Bamboo

  1. In the command line, change the directory to <Bamboo installation directory> and run the following command:
    bin\start-bamboo.bat
  2. In your Web browser, enter the following address: http://localhost:8085/

Configure Bamboo

When you launch Bamboo for the first time, the Bamboo setup wizard will display. The wizard will lead you through the Bamboo settings that you need to configure before you can start using it.

K7w89lJv103tgkkL-c2a46f02a66f.png

Bamboo Plug-in, Create test plan, configure and run Appvance IQ Scenario

NOTE: To avoid possible errors when trying to access the result page, the scenarios used for triggering from bamboo should NOT have the database set in the scenario XML. So it will use the default settings of the AIQ console.

  1. Create a new Test Plan in Bamboo and fill out all the required fields
    iHGVwUZrkJhwzDyW-5887e3baffbd.png
  2. Once the project has been created, Click Crete Plan
    XiScyBqyrnjc6xNZ-228adc2fd4a6.png
  3. Create a new Test Plan in Bamboo and fill out all the required field
    hQwY76eyrgCtsL2O-f4852ff42a7f.png
  4. Click any Repository options and click Configure plan. (Ex:- Git)
    6ou18auOkdOPDqUw-578853ada597.png
  5. Configure the Job
    PGhYoMWdDKzNpTwO-2c95a8b10587.png
  6. Add the Ant Task by Clicking Add Task
    9q4YoHLHV0AQjn6B-beb7c07b3e49.png
  7. Search Ant in Search Bar
    rvt7zfZdSOrPq1bp-6ad0653c28e8.png
  8. Create a new Task in Bamboo and fill out all the required fields
    T7CwOB3lzX7D6jN0-53c676fd3f89.png
  9. Once the Task is created Click Projects and click the Created Project
    wyEXn4F5rpKdAxcF-e39dcf2993ae.png
  10. Enable the Plan by clicking Edit and Click Actions > Enable Plan
    jEtmPjqKfTXW29N1-54e471d3bfe4.png
    hVDjAJN49eTT7WJn-e0f3c77fee5a.png
  11. Run the Plan by Clicking Run > Run Plan
    1d4L5i9rOHV05HmB-8ae814956fbb.png
  12. View the Build Result Summary
    cghrZYfeDzNtnIjZ-a602324ca6aa.png

Last updated: October 15, 2026

If you have any feedback on this topic, please contact us at documentation@appvance.ai

Data flow and scope

TheLocker is the hand-off point for values produced by one tool or step and consumed by another. Define the value name and expected format before the producing step runs, then retrieve and validate it in the consuming step. Keep sensitive values scoped to the test and avoid logging secrets.

Governing Services

Governing Services

Governing Services

Appvance IQ is architected to the surface performance, interoperability, and functional issues in service environments. It should be natural to expect that Appvance runs as a service itself.

Governing Services Using Registry/Repository And Test Automation

Software developers, QA technicians, and IT managers are learning how SOA governance and test automation tools benefit their organization's ability to develop, manage and deliver services to determine quality levels. Examples of these governance platforms include SoftwareAG's X-Registry, BEA AquaLogic Enterprise Repository, and IONA Repository. Appvance publishes a commercial test automation tool that when combined with the power of an SOA repository delivers SOA governance benefits. Appvance IQ delivers an inter-operability mechanism between the Appvance test automation run-time and a repository platform:

  1. Delivers immediate useful test automation functions to governance platform users
  2. Provides metadata for services being governed, including service up / down status, time-since-last-failure data, service deployment correct validation status, and service reliability history
  3. Provides a mechanism to do service monitoring, scalability, and performance tests managed by a governance platform
  4. Provides a widely-adopted test API, test runtime environment, and test development toolkit to governance platform users

An SOA governance platform provides controls and functions enabling enterprises to manage a set of interdependent information services. From the developer's perspective, a governance platform gives a developer a way to discover a service that implements a particular function which therefore won't need to be written. In an SOA context, governance adds a registry, enabling developers to search for services, a database of metadata about the services' qualities, and a set of policies to control the service's use at development and deployment time. For example, a policy attached to a service creating new employee email accounts requires a developer to also use service authorizing requests. Inter-operability between a governance and test automation platform, an example policy says, "You must run a test script successfully to verify this service is correctly configured before deploying this service to a production environment". In this inter-operability, the governance tool manages policies, stores the functional tests scripts, issues a call for Appvance to run a test, and saves the results as metadata for the service entry in the repository. The inter-operability provides a way to accomplish "test by policy" methods.


If you have any feedback on this topic, please contact us at documentation@appvance.ai

Last updated: October 15, 2026

Governing Services

A Practical Example

A governance platform can help software developers and IT managers understand the policies, dependencies, and services used within an application. By exposing service dependencies, the platform helps teams evaluate service reliability and identify opportunities to build redundancy into the application when an upstream service becomes unavailable.

This type of knowledge can also be shared informally between developers. For example, one developer may recommend a U.S. Postal Service ZIP Code lookup service for a product registration page, allowing users to enter their ZIP code and automatically populate the city and state fields. The developer may also mention that the service has been observed to return errors on weekends.

This developer-to-developer exchange provides several pieces of useful information:

  1. The existence and location of the ZIP Code lookup service.
  2. The service's reliability varies depending on the time of use.
  3. The service behaves according to its published schema.

An ideal governance platform provides this information in a centralized and accessible way. For example, a service catalog can display available services and their metadata, including their current availability status.

Integration with the Appvance runtime provides additional insight into service functionality, reliability, and quality. In a service-oriented environment, Appvance can use native protocols to test composite applications and evaluate their functionality, scalability, performance, and availability.

Appvance IQ can also leverage existing unit and functional tests to perform service-level functional, scalability, performance, and monitoring tests. Because Appvance is a distributed test automation platform, tests can run on remote TestNodes across multiple networks and machines.

These tests can provide valuable data for governance and monitoring systems, including:

  1. Availability Feed — Provides data for evaluating Service Level Agreement (SLA) compliance.
  2. Functionality Feed — Helps identify service regressions and functional issues.
  3. Reliability Feed — Provides data for measuring service reliability over time.

Last updated: August 13, 2026

If you have any feedback on this topic, please contact us at documentation@appvance.ai.

Governing Services

Governing Services Using Registry/Repository and Test Automation

Software developers, QA technicians, and IT managers are learning how SOA governance and test automation tools benefit their organization's ability to develop, manage and deliver services to determine quality levels. Examples of these governance platforms include SoftwareAG's X-Registry, BEA AquaLogic Enterprise Repository, and IONA Repository. Appvance publishes a commercial test automation tool that when combined with the power of an SOA repository delivers SOA governance benefits. Appvance IQ delivers an inter-operability mechanism between the Appvance test automation run-time and a repository platform:

  1. Delivers immediate useful test automation functions to governance platform users
  2. Provides metadata for services being governed, including service up / down status, time-since-last-failure data, service deployment correct validation status, and service reliability history
  3. Provides a mechanism to do service monitoring, scalability, and performance tests managed by a governance platform
  4. Provides a widely-adopted test API, test runtime environment, and test development toolkit to governance platform users

An SOA governance platform provides controls and functions enabling enterprises to manage a set of interdependent information services. From the developer's perspective, a governance platform gives a developer a way to discover a service that implements a particular function which therefore won't need to be written. In an SOA context, governance adds a registry, enabling developers to search for services, a database of metadata about the services' qualities, and a set of policies to control the service's use at development and deployment time. For example, a policy attached to a service creating new employee email accounts requires a developer to also use service authorizing requests. Inter-operability between a governance and test automation platform, an example policy says, "You must run a test script successfully to verify this service is correctly configured before deploying this service to a production environment". In this inter-operability, the governance tool manages policies, stores the functional tests scripts, issues a call for Appvance to run a test, and saves the results as metadata for the service entry in the repository. The inter-operability provides a way to accomplish "test by policy" methods.


If you have any feedback on this topic, please contact us at documentation@appvance.ai

Last updated: October 15, 2026

Governing Services

Legacy SoftwareAG X-Registry Integration Reference

This page is retained as a legacy reference for the historical SoftwareAG X-Registry proof of concept that connected AIQ governance results to an SOA registry.

Validation workflow

  1. Confirm the customer still has a SoftwareAG X-Registry dependency before using this article.
  2. Validate the service endpoint, registry access, and governance result format outside production first.
  3. Document any remaining X-Registry dependency as migration or legacy-support work.

Last updated: September 28, 2026

Governing Services

The PAAS Interface

Appvance IQ is an automation framework with a distributed test environment to test services for functionality, scalability, and performance. The AIQ Console sends required information to specialized and optimized TestNodes (located on several computers), runs the tests, and sends results back to the Console. The Console processes the results to create statistics files, charts, and reports. A simplified workflow of AIQ.

DbiaRLbi6ACxV9j9-948a015529b1.png

Appvance IQ enables the Console to receive soap-based Web service requests to operate a Test Scenario. AIQ has been upgraded to allow any application using a connector class to connect to the Console and run a test, with Appvance As A Service. The upgraded work-flow of AIQ;

cJkbrTZbnhbaieVA-0740facaf832.png

Modify the TestNodes to Allow Them to Operate Multiple Tests Concurrently.

In previous versions of the Appvance IQ TestNetwork architecture, TestNodes could receive instructions from only one Console. The new Appvance IQ architecture allows TestNodes to receive instructions from multiple applications (Consoles), which have been checked for availability, stability, and confidentiality.

  1. Availability means a scenario can access all of its resources
    To accomplish this, each scenario is given a unique ID in the form of ID_ plus an ID number. Using the ID as its name, a directory (the application's root directory) is created and contains all the resources of each test
  2. Stability means any process can not affect any other process.
    To accomplish this, each monitor is run as an isolated thread with its own variable and ClassLoader, used to load the new required jar resources for a JAVA test
  3. Confidentiality means any scenario can not access any other scenario's data.
    To accomplish this, each scenario only knows its own root directory

Develop a Class that Becomes a Service

  1. The goal was to create a new class and use Apache Axis to turn it into a Web Service. This involved two tasks, compiling the new class and configuring tomcat to accept the new service
  2. The new class needed to be simple, yet functional and complete as described in Classes

Classes

zYzobpWxT4fF6o1L-98af31b62c7e.png

Configuring Axis to accept the new class as a new service was surprisingly easy; simply add a new service tag to the Axis configuration file (server-config.wsdd)

c03uPewuDTQIdjHf-b0329e6aeb3a.png

Develop a Class to Connect to PAAS

This is an interface between the application and PAAS. It is available as a standalone library for clients to connect their applications to PAAS Farms. Class Method describes the class methods:

Class Method

rKs69jlDk9NvEQnB-a88599e386cd.png

Example implementation

This code snippet shows a simple communication connection between an application and PAAS:

eXdLtczmepr7dHXF-787b34cb6502.png

We found these resources helpful while implementing PAAS:

Microsoft Developer Network: Software as a service

Microsoft Developer Network: Architecture Strategies for Catching the Long Tail

Anderson, Chris: The Long Tail

PAAS Response

Each PAAS request to Appvance IQ generates a PAAS response:

PAAS Request / Appvance IQ Response

sKgSUHJtJ2SRsKxa-98c4eaa10218.png

The corresponding Web service result values are:

Web Service Result Values

anzLSz40jzmxdKMb-041e53eedd05.png

Governance Statistics ResultSet (GSRS)

Appvance executes a test and returns a Governance Statistics Results Set (GSRS) response document.

A sample GSRS response:

ULJwyQWwwJGr3I3D-44dda0df2546.png


If you have any feedback on this topic, please contact us at documentation@appvance.ai

Last updated: October 15, 2026

GitHub

GitHub

GitHub

Contents:

Glass Box

Glass Box

Glass Box

Java Enterprise Application Monitoring with Glassbox

Glassbox is a utility that monitors Java enterprise applications (WAR or EAR.) Glassbox identifies thread contention, excess memory usage, and slow database connections. Appvance IQ(AIQ) integrates with Glassbox to correlate monitored performance problems to AIQ's load test operations. Used in combination, AIQ and Glassbox deliver root cause analysis and mitigation of performance bottlenecks in Java enterprise applications.

Glassbox locates the reasons for an enterprise application failure, performance bottleneck, or functional issue without requiring changes or instrumentation to your application. Glassbox uses Aspect-Oriented Programming (AOP) and Java Management technology. Glassbox is safe to use in production environments. Glassbox uses less than 1% of your server's CPU bandwidth. Glassbox supports Apache Tomcat, IBM WebSphere, Oracle BEA WebLogic, RedHat JBoss, and Jetty.

You may still need network and application "sniffers," test harnesses, and probes, but thankfully these can now be focused on exotic problems and their complexity avoided when dealing with day-to-day application performance issues.

The Glassbox Project maintains Glassbox. Appvance integrates and ships Glassbox in Appvance PerformanceCloud Edition. Appvance Global Services provides professional support, training, and consulting for Glassbox.


If you have any feedback on this topic, please contact us at documentation@appvance.ai

Last updated: October 15, 2026

Glass Box

Architecture

AIQ is a distributed test and monitor environment. As a load and performance test operates Glassbox observes performance metrics of a Java enterprise application, including memory use, thread contention, database connections, and object operation. Appvance Monitor (Appvance Monitor) communicates with Glassbox over Java management (JMX) protocols. AIQ gathers Glassbox data and correlates Glassbox findings into AIQ reports.

UmhuWLFZtMeKg2kF-e4927ca61ecd.jpg

For example, Appvance operates a load and performance test on one or more TestNodes. A TestNode is a Web service that receives and operates a test. The TestNode is in your QA lab, data center, cloud computing environment, or both. Glassbox installs on a Java application server and uses Aspect-Oriented Technology to observe enterprise applications. The AIQ monitor system (Appvance Monitor) communicates over JMX protocols to Glassbox as the test operates. The Appvance Enterprise Results Analysis Engine correlates the Glassbox observations to the load test results for root cause analysis and mitigation.

Glassbox provides a Troubleshooter to view the live monitored data and performance alerts for your application. The following shows the Glassbox Troubleshooter interface.

qK3I97yqtbCVsMc3-756fae864552.png

Glassbox Troubleshooter highlights problems with your application achieving your criteria for acceptable performance criteria. For example, Glassbox identifies slow object performance by setting a threshold in milliseconds. Use the Glassbox com (Hyperlink) figuration to set the criteria.

Appvance designed AIQ's Results Analysis Engine to provide drill-down functions on any of the Glassbox performance observations. Contact Appvance Global Services to learn about additional charting and analysis functions.

Glassbox provides a Java management (JMX) interface to the Troubleshooter's extended performance monitor data. Access this data through the Java Management Console (JConsole). JConsole comes with the Java Development Kit (JDK.) With the JDK installed run the JConsol in a shell or terminal window by typing the following:

jconsole service:jmx:rmi:///jndi/rmi://localhost:7232/GlassboxTroubleshooter

JConsole connects to the Glassbox Troubleshooter and displays a graphical interface shown in the following.

y5voiiCQOwL0EF5L-300d3f33d86a.png


Last updated: October 15, 2026

If you have any feedback on this topic, please contact us at documentation@appvance.ai

Cloud execution flow

Use the Ant tasks in dependency order: provision or start the node, wait for AIQ, create or generate the scenario, execute it, collect results, and shut down resources. Confirm that credentials, endpoints, and workspace paths are supplied by the build environment and review cleanup tasks after both successful and failed runs.

Glass Box

Glassbox Features and Benefits

Release-candidate improvements

Faults identified out of the box

Supported technology

Check with Appvance for support status for additional platforms; support was being expanded.


Last updated: October 15, 2026

If you have feedback on this topic, contact documentation@appvance.ai.

Glass Box

Legacy Glassbox Installation Reference

This page is retained as a legacy reference for environments that still require Glassbox integration or installation notes.

Validation workflow

  1. Confirm the customer still uses Glassbox and identify the required version.
  2. Validate prerequisites and access with the Glassbox owner before installation work.
  3. After installation, run a small validation flow and capture evidence that AIQ and Glassbox data align.

Last updated: September 25, 2026

Glass Box

Install Glassbox on an AIQ Test Node

Install Glassbox on an AIQ Test Node only when the integration is approved for the target environment and the Test Node owner understands the performance, privacy, and monitoring impact. Coordinate installation with application, security, and observability teams.

Before installation

Post-install validation

  1. Restart only the required services or host components.
  2. Run a small Scenario Editor smoke test.
  3. Confirm Glassbox captures expected sessions without exposing sensitive data.
  4. Monitor Test Node CPU, memory, browser stability, and execution time after installation.

Last updated: October 6, 2026

Glass Box

Resources

Appvance and Glassbox provide the following resources:


Last updated: October 15, 2026

If you have feedback on this topic, contact documentation@appvance.ai.

HAR

HAR

HAR

Contents:

HAR

Creating a HAR Script and Running it

About HAR

HAR, which stands for HTTP Archive Format, is an archive file derived through interactions within a web browser. The file contains protocol-level GET and POST request logging, as well as performance information and web page load times.

Why HAR

HAR files are quick and simple to produce. When used with Appvance IQ, HAR files provide detailed performance data and load testing capabilities.

Steps to be followed to create HAR script:

  1. Open Google Chrome Browser.
  2. Navigate to the web application that you wish to record.
  3. Press F12 or right-click the page and click the Network tab.
  4. Click the clear button, Refresh the page and click the Preserve Log check box.
    6UoCSgG3vHxmn44r-f4cda7bcbd72.png
  5. Perform the desired actions of the web application
  6. The network tab records all the protocol level GET and POST request logging
  7. Once complete with the actions, right-click the requests and select 'Save as HAR with content'
  8. Save the file to your machine with a .har extension
Gw3X0sdSQ3zsvG4b-82d975180553.png

Run the HAR script in Appvance Scenario Builder:

  1. Login to Appvance IQ.
  2. Click in Build
  3. Click File→New
  4. Chose any Test Type(Ex: Functional)
  5. Click the Test Case tab and click Add Test cases for Test Execution
  6. Select Script type as HAR and Browse the HAR Script.
  7. Save the scenario and Play the scenario to see the results in the controller window.

It's that simple!

65gFr9zOAmZHH4e9-0c8b00d21f0b.png

Last updated: October 16, 2026

If you have any feedback on this topic, please contact us at documentation@appvance.ai

HAR

Data Enabling HAR Script

Data enabling HAR scripts for Web applications:

Appvance IQ implements a Data Production Library (DPL) as an extensible framework to provide operational test data to test script runners at test runtime. The DPL framework is general in that data may be input from a variety of sources, including a relational database, comma-separated-value file, and data generating objects. A DPL also provides a safe way to store data between test steps. Appvance IQ comes with pre-built DPLs and makes it easy for software developers to add their own custom DPLs.

In our case, we will be using the "CSV" datasheet to data enable the HAR script.

The steps that need to be followed while data enabling HAR scripts are as below:

  1. Record the script with username and password on the Chrome Browser and save the script
    oQTBK8NN7pMvshm3-9794e169ffeb.png
  2. Open the saved script and search for the username/password you have entered in the URL and create a .CSV sheet with the entered username and password as a header in the CSV sheet and give the desired number of usernames and passwords below the headers.
    For example:
    If the user has used appleuser1 as the Username and appleuser@123 as the password. Then the user needs to replace 'appleuser1' and 'appleuser%40123' (please see the below instruction for any special character used in the password) in the HAR script which will be used as a Header in the CSV sheet.
    ubrCAMb9e1x9xsx3-79e9b4a11d4e.png
    Also, make sure if there are any special characters in the password we need to replace it with the corresponding value with respect to the HAR script
    For example:
    1. ! = %21
    2. @= %40
    NOTE: If the Password is appleuser@123 the entry in the csv sheet should be appleuser%40123
    For more information on the special characters and the corresponding value to be used in the script refer to Special Character value to be replaced in HAR script.
  3. User can now upload the .HAR script and .csv sheet in Appvance Scenario Builder.
    LgIfD7VBlOKbdGtc-cc7ea9c6b434.pngvACso6odlb0m6ZCa-165f3a039b6d.png
    Choose the Script type as HAR and name the test
    Choose the HAR script and select
    Upload the CSV sheet in Resources Tab and choose the Action as "Next row of Data" by clicking Add DPL in Test Cases tab
    Save and play the scenario
  4. Check the script execution in the AIQ controller
    you can also monitor if the script is replacing the appropriate values through the Appvance IQ controller by Clicking on Test case(s) Executions and selecting the result and clicking on Output.
wCbDGKIwILlupbQo-d9e5e8454617.png

Last updated: October 16, 2026

If you have any feedback on this topic, please contact us at documentation@appvance.ai

HAR

HAR Options

Scenario Builder – HAR Options Usage

Appvance Scenario Builder provides some options which can be used in order to get different data or results when the user executes a HAR test scenario. These settings can be set and located in the "Options" panel of the Appvance Scenario Builder.

Below are the different options:

These options will allow you to establish some parameters settings different from standard Test Cases executing a HAR script. Users may find these options useful depending on what kind of test is being executed. i.e. If the user is testing a website, the user may want to have the default settings (unmarked options) for a HAR test, on the other hand, for a web service the user may find it useful to mark every single request as a step or validate the response code against the original HAR script.

T69fZGyTcRnlnLD6-8343c34abf15.png

Connection resets marks the whole Test Case as a failure

This option has to be used carefully depending on the desired results. The name of this option it's self-explanatory, it's used to mark the whole Test Case that's being executed as a failure when the connection resets.

Mark each request as a step

When this option is enabled, every single request retrieved from the HAR test is is being marked as a step–request key set instead of marking every request as a single request.

Also please make sure that this option is not used along with Autocorrelation.

4Wz37T0mRRXgM2mx-844e507c8a1b.png

Validate response code against original HAR response code

When enabled, the response codes received from the text case execution are going to be validated against the original HAR script response codes, otherwise, the usual response code for a request is passed as valid. Appvance Scenario Builder shows the response code for every request at the Test Case Execution tab in the results displays window as follows:

pPxjqcEtoCmkVaaH-ea9a3d82e412.png

Show headers, requests, and responses in each Test Case execution output.

Meaning that for every request, exists a "parent" step with the same name of the request contained in that step. In the results display you may see these changes, the step has the timing for the request and the step request has the request size.

Execute all HAR calls (even after a failure).

Checking this option will let the HAR script run even if it encounters an error in any step.


Last updated: October 16, 2026

If you have any feedback on this topic, please contact us at documentation@appvance.ai

HAR

HAR - Adding Descriptions

Please follow the below steps for adding step names/descriptions for each transaction in the HAR script

  1. Open the recorded script and search for "Pages" entry in the script.
    "pages": [{"startedDateTime": "2016-12-13T07:55:39.815Z","id": "page_1","title": "http://sahitest.com/demo/training/books.htm","pageTimings": {"onContentLoad": 859.9610000001121,"onLoad": 875.251000001299}},{"startedDateTime": "2016-12-13T07:56:42.819Z","id": "page_2",
    "title": "http://sahitest.com/demo/training/login.htm","pageTimings": {"onContentLoad": 29.318000000785105,"onLoad": 27.689000000464148}}]
    and replace the value for "title" with the desired name for ex:- here replacing with the step1,step2
    "pages": [{"startedDateTime": "2016-12-13T07:55:39.815Z","id": "page_1","title": "step1","pageTimings": {"onContentLoad": 859.9610000001121,"onLoad": 875.251000001299}},{"startedDateTime": "2016-12-13T07:56:42.819Z","id": "page_2","title": "step2","pageTimings": {"onContentLoad": 29.318000000785105,
    "onLoad": 27.689000000464148}}]
    After making changes save the updated script.
    Now we can go ahead and create a scenario under Appvance Scenario Builder by attaching the updated script and running it.
  2. The added step name should be reflected in the Appvance IQ controller window when the script completes.
    Before adding description:
    GUvVTXx7OBdymOaC-792b4bcaf27f.png

After adding description:

uyBmLS0LUOoeU0AB-e85c1ff6b2e6.png

Last updated: October 16, 2026

If you have any feedback on this topic, please contact us at documentation@appvance.ai

Jenkins

Jenkins

Jenkins

This section details how to configure and run scenarios from Jenkins. This is applicable for both Jenkins installed locally as well as in the cloud, such as using Cloudbees-Jenkins.


Last updated: June 01, 2023

If you have any feedback on this topic, please contact us at documentation@appvance.ai

Jenkins

Jenkins Configuration

Setup a build in Jenkins: Configuration and pre-requisite:


Configuration validation

  1. Verify that Jenkins can start on the configured HTTP port and that the service account can access the AIQ installation and ANT executable.
  2. After saving the Jenkins system configuration, run a small test job and review the console output before scheduling larger executions.
  3. Keep the AIQ controller URL, credentials, and workspace paths aligned with the environment used by the job.

Last updated: October 15, 2026

If you have any feedback on this topic, please contact us at documentation@appvance.ai

Jenkins

Jenkins File Reference for AIQ Integrations

Use this page to explain what the Jenkins files are for when AIQ test execution is triggered or coordinated from a CI pipeline.

Validation workflow

  1. Identify the Jenkinsfile or helper script used by the project.
  2. Confirm required parameters such as AIQ project, scenario, environment, and result handling.
  3. Run the job in a non-production folder before adopting it for scheduled execution.

Last updated: September 24, 2026

Jenkins

Required File Changes for AIQ Integrations

Required File Changes for AIQ Integrations

Track required integration file changes carefully and keep environment-specific values out of source files.

Last updated: September 8, 2026

Jenkins

Creating First Jenkins Project

Creating your first project and configuring GIT Repo:

  1. Once downloaded and installed launch http://localhost:8080 (or with the changed port number) in your browser or log in to your Jenkins cloud
    KFcP1XuoPw5T6rRh-c9b41d0c69f4.png
  2. Click on New Item from the left navigation
    GNwq59QghdS1WusD-109f121d3d65.png
  3. Provide a valid Job name
  4. Select “Build a free-style software project”
    XHRbBUmdqF2eW7SP-5ed1e752f25e.png
  5. Click on the OK button
    Qel9UqzetamkmDlW-c4758d093156.png
  6. Provide a description of the project
    xNI2I5TGtBIRzeuU-8e8501aa6b31.png
  7. Locate Source Code Management and choose Git, Provide the Repository URL with the credential details where all the above files reside and changes made
    2S0TN1zWkjo8iyje-75c250a9825a.png
  8. Mention the branch details from the files that reside
    FT87oQKLX9nOw3Xp-90b191c8f70e.png
  9. Build Environment - Check "Delete workspace before build starts", this will ensure the latest assets are uploading when running the Jenkins job
  10. Build - Add Build step > Invoke Ant and add the Ant Call as mentioned below
    cJbAVy8OoeSRvQ50-2ed4ca30415a.png


CTuIl6JDyePP9Tp6-da0808f94fe4.png

** If Ant is not configured in Jenkins but its installed on the Jenkins agent, the job still can be executed with the following command:


8m0FpvSeGLOlIYFQ-77ed00917653.png


Last updated: October 15, 2026

If you have any feedback on this topic, please contact us at documentation@appvance.ai

Alert review workflow

Use the linked ZAP alert catalog to understand the alert name and risk category, then review the affected URL, evidence, confidence, and supporting request/response details in the AIQ result. Confirm findings in an approved environment before assigning remediation priority.

Jenkins

Run AIQ Scenarios from Jenkins with Ant

Use Jenkins and Ant only when the project still requires an Ant-based automation pipeline. For new pipelines, confirm whether a newer CI/CD approach is available before extending legacy Ant jobs.

Before configuring the job

Pipeline checks

  1. Run the Ant target locally or on a controlled Jenkins agent before scheduling it.
  2. Capture AIQ execution IDs, Jenkins build numbers, logs, and artifacts.
  3. Fail the Jenkins job when the AIQ result fails, times out, or cannot be retrieved.
  4. Archive only the evidence required for troubleshooting and compliance.
  5. Review old Ant jobs periodically and retire duplicate or unused jobs.

Terminology note: Use Scenario Editor when referring to current AIQ scenarios. Keep legacy terms only when describing old job names, file names, or historical assets.

Last updated: October 5, 2026

Jenkins

Configure Ant to Run AISG from Jenkins

Similarly, projects can also be created to run AISG based on templates.

AISGDashboard would be the ant target that would be used to create a dashboard for the AISG which internally will call targets like report upload, AISG creation, etc.

Once the initial AISG is created, the AISG template exported from file menu options would be the input that would be used for the re-creation of the AISG in everyone runs or as scheduled.


Current terminology

In current AIQ terminology, the generated test definition is an AISG. The existing Ant target names and template-file workflow are retained; update only the label used in new Jenkins documentation and job descriptions.

Verification

Run the Ant target manually once from the Jenkins workspace and confirm that AISG creation, report upload, and dashboard creation complete before enabling a scheduled build.

Last updated: October 15, 2026

If you have any feedback on this topic, please contact us at documentation@appvance.ai

Jenkins

Configure a Parameterized Jenkins Project for AIQ


Use a parameterized Jenkins project when an AIQ-related automation job needs controlled runtime values such as environment, suite, branch, browser, or execution profile. Keep Jenkins as the orchestration layer and keep AIQ configuration, credentials, and test data in approved locations.

Good practices

  1. Use clear parameter names and defaults that are safe for non-production execution.
  2. Validate required parameters before starting the job.
  3. Do not store secrets directly in job descriptions, scripts, or documentation.
  4. Record the Jenkins build URL with the related AIQ execution or report.

Last updated: September 8, 2026

Jenkins

Scheduling Jobs in Jenkins

By setting the schedule period to 15 13 * * * you tell Jenkins to schedule the build every day of every month of every year at the 15th minute of the 13th hour of the day.

Jenkins uses a >cron expression, and the different fields are:

MINUTES Minutes in one hour (0-59)

HOURS Hours in one day (0-23)

DAYMONTH Day in a month (1-31)

MONTH Month in a year (1-12)

DAYWEEK Day of the week (0-7) where 0 and 7 are Sunday

If you want to schedule your build every 5 minutes, this will do the job : */5 * * * *

If you want to schedule your build every day at 8h00, this will do the job : 0 8 * * *

For the past few versions (2014), Jenkins has a new parameter, H (extract from the >Jenkins code documentation):

To allow periodically scheduled tasks to produce an even load on the system, the symbol H (for “hash”) should be used wherever possible.

For example, using 0 0 * * * for a dozen daily jobs will cause a large spike at midnight. In contrast, using H H * * * would still execute each job once a day, but not all at the same time, better using limited resources.

Note also that:

The H symbol can be thought of as a random value over a range, but it actually is a hash of the job name, not a random function, so that the value remains stable for any given project.



Schedule validation

Use Jenkins' “Build periodically” trigger and validate the cron expression with a test job before enabling a production pipeline. Jenkins evaluates the schedule in the controller's configured time zone unless a TZ= prefix is supplied. Prefer H for groups of similar jobs to distribute load, and avoid schedules that start many resource-intensive AIQ executions simultaneously.

Last updated: October 15, 2026


If you have any feedback on this topic, please contact us at documentation@appvance.ai

Jenkins

Changing Time Zones in Jenkins

By default, the timezone is in UTC.

If you want to change the timezone to a different one:

  1. Navigate to Build Triggers.
  2. Check the Build Periodically option.
  3. Define the Schedule as:
    TZ=EST5EDT
    0 16 * * 1-5
    t21eOqDbAyyhD2fg-91b73f3048c4.png
  4. This means we are setting the timezone to be EST and setting the run time at 16:00 PM from Monday to Friday.

For more timezone codes, please refer to>Time Zones information at Java Locale for “English (United States)” (en-US) at LocalePlanet.


Jenkins schedule behavior

Jenkins evaluates the TZ prefix for the cron entry. Keep the timezone identifier and cron expression together in the schedule field, and verify the resulting run time in the Jenkins job history after saving.

Example interpretation

In TZ=EST5EDT followed by 0 16 * * 1-5, Jenkins schedules the job at 16:00 on weekdays in the specified Eastern time rules. Confirm daylight-saving behavior for the timezone used by your environment.

Last updated: October 15, 2026

If you have any feedback on this topic, please contact us at documentation@appvance.ai

Jenkins

Jenkins Email Notification

  1. Login to Jenkins.
  2. Navigate to Manage Jenkins.
  3. Navigate to “Go to plugin manager”
  4. Search for “Email Extension” under filter section in plugin manager
    O5txKzCzwY3UN7FA-7cf9f9eea73d.png
  5. Download and Install the Email Extension
  6. Create APP Password for GMAIL account - Follow below steps to create App Password
  7. If you configure Jenkins e-mail please you should follow the below steps:
    1. first enable two step verification for reference click here
    2. generate an app password
    3. add the app password instead of your password
  8. After successfully creation of APP Password for GMAIL
  9. Go to Configure System in Manage Jenkins.
  10. Under Configure system go to “Extended Email Notification and add
    1. SMTP Server field - smtp.gmail.com
    2. SMTP Port - 465
      DnvQBJNlRoW2RcoJ-f8a5d6e821f7.png
  11. Click Advanced button below SMTP Port
    c7ab3GKZaGQXyvO5-89a38d399bd3.png
  12. Click Add button
  13. Go to Jenkins credentials provider and add the Username and APP Password ( Which was created on Step 6) and click Add button.
    nC5B2Q7PIamuGeF2-350b63c801eb.png
  14. Click save button in Configure system
  15. Go to the project and click configure
  16. Under post-build Actions Choose Editable Email notification under Build
    neWmcwcBhjC7bex7-660d4e948dbe.png
    JLhqCCjWrl9jnGop-f3081a1bc00b.png
  17. Under Editable Email notification add
  18. “Email id” under Project From
  19. Other field are by-default filled
  20. Click Advance settings
    9zpE3TibtRsGRxkT-815733524b35.png
  21. All the field are are by-default filled
  22. Click Add trigger under Triggers
    wfJBghj0HpwK8zlF-e073c3be2cf1.png
  23. Select Always (User can change as per requirement)
    jKxxxQgHgvd9BfxR-35867894e701.png
  24. Click Advanced under Triggers
    3ikTEvtzIJfRKUzc-71a54ed1e1b8.png
  25. Add Recipient Mail id under Recipient List
    OUd6QGXW8gt1hytH-998122944206.png
  26. Click Save and Apply
  27. Recipient user will start getting Email Notifications

If you have any feedback on this topic, please contact us at documentation@appvance.ai

Last updated: October 15, 2026

JMeter Integration and Testing

JMeter Integration and Testing

JMeter Integration and Testing

Contents:

JMeter Integration and Testing

Running JMeter Scripts

Appvance IQ is a system that supports running many test types like SoapUI, Selenium, Appvance Designer Script, Java, Groovy, and more.

SoapUI support was removed in release 5.2.0 of AIQ.

In addition to the above list, AIQ also supports running JMeter scripts. Below are the steps that we need to follow to run the JMeter scripts from AIQ.

  1. Navigate to the AIQ Home screen and click Build

  2. Click File ->New to create a new scenario

  3. Select Functional Test from the Scenario Test Type drop-down

  4. Click the Test Cases tab and click the link for Add test case as shown below in the screenshot

  5. Browse the JMeter script, the JMX file, and save the test case

  6. Navigate to Resources and make sure the JMeter bundle with version 3.2 is added by default

  7. Also make sure the resources are added with name, Type, and the correct path of the file as seen in the below screenshot

  8. Click Play Scenario from the top navigation bar and the Controller window will open in a new tab that displays the tests running and will display the pass/fail status of the tests upon the test completion as seen in the below screen-shot. The left part shows the steps and the duration in milliseconds and the right side shows the test run status under the Output tab. On The transactions tab, we can find the request/response and an error tab to drill down further

  9. Click the Click here link to get to the list of Reports that Unified Test Platform supports

  10. You can also cross verify the same by running the tests using Apache JMeter


Last updated: July 25, 2024

If you have any feedback on this topic, please contact us at documentation@appvance.ai

JMeter Integration and Testing

Correlation in JMeter with an Example

What is correlation and why it is required?

Correlation is the most important aspect of scripting. It generally includes fetching dynamic data from preceding requests/calls and posting it to the subsequent requests.

Let's take an example to find out why exactly we need correlation

Suppose we have recorded a scenario in which

Now, if we just playback this script, the test will fail even for a single user. This is because of the authentication mechanism used. When we log in to a website, session variables are dynamically created. These session variables are passed to the subsequent requests and help validation and authentication of the actions performed. So, one cannot just record and playback the requests having these variables. Here, we need to correlate the web requests with the dynamic variables. And for correlation, we need to use the "Regular Expression Extractor" which makes use of regular expressions.

A brief insight into regular expressions

Regular expressions are used to fetch data from a string based on a search pattern. Basically, what we do is in order to extract any value (generally a dynamically created value) from a string (text response), we define a left bound of the variable than some wildcard characters and then a right bound (Left Bound)(Wildcard Characters)(Right Bound)

For example: If we have a text response like;

.......__EVENTVALIDATION"value="weriudflsdfspdfusdjfsisdpfjpsdfohsdihffgdfgpdfjsdjfpj" />...

And we need to extract the value of the Event validation variable using regular expressions; the regular expression for the same will be

__EVENTVALIDATION" value="(.+?)" />

where, Left Bound = __EVENTVALIDATION" value="

Wildcard characters = (.+?)

Right Bound = " />

If you do not want to get deeper into regular expressions, then the wildcard characters (.+?) would suffice in most cases.

For more information on regular expressions and meaning of each wild card character visit;

http://www.regular-expressions.info/tutorialcnt.html

Regular Expression Extractor

Coming back to JMeter, consider an example where we have two operations-

  1. The user launch website
  2. The user fills in details and clicks on the OK button

Now, the call user launch website creates a dynamic variable event validation that we can check in the Response Data tab of the "View Result Tree" listener for the call. The value of this variable is then passed to a subsequent call related to "User fill details and click OK button" as an HTTP post parameter.

Steps for correlating the Event validation values

  1. Run the script containing both the above-stated operations
  2. Go to the Response tab (Text mode) in the "View Result Tree" listener of the "User launch website" operation. BTW, we see the second operation "User fill details and click OK button" in red because it is not yet correlated
    JkTAuSgmiSScP1gp-0d50e5560f69.png
  3. Create a Regular expression for extracting the value of the Event validation variable's value. As stated above the R.E. for this will be-
    __EVENTVALIDATION" value="(.+?)" />
  4. Go to HTTP request under "User Launch Website" transaction controller -> Add -> Post Processor -> Regular Expression Extractor.
    SpxiH96QJyDTD3eS-9c463a2adb2b.png
    Adding "Regular Expression Extractor" control
    agXErgXrR0QvgiLJ-72520df037cc.png
    R.E. Extractor Parameters Filled
  5. The reference name inserted is the name of the variable created that will capture the Event validation value generated by the HTTP request under the "User launch website" operation
  6. Now pass this variable to the subsequent HTTP request under "User fill details and click OK button" as a post request- overriding the already present hard-coded value of the Event Validation variable.
    ZRXSuMAtzBXRoRUu-91cc070b5a39.png
    Request without correlation (Hardcoded values)
    w2BZrcVKWMFOgy8G-87ae7227b462.png
    Request with correlation (Dynamic values)
  7. Run the test plan again. All green? That's it.
    This was all about correlation. In order to get a good understanding of correlation (or scripting for that matter), we need to have a good understanding of two things- the dynamic variables generated by the programming languages and Regular expressions.

SPREE APP

Let us take a working example of a Spree App where we will be recording the application and then correlating it

The URL for this Spree App is given below :

http://52.42.228.15:8888/

We will be using the above URL to record the below actions

  1. Navigating to the home page
  2. Navigating to the Login page
  3. Entering credentials and clicking on Submit
  4. Clicking on ruby-on-rails-tote
  5. Adding to Cart
  6. Clicking on Products
  7. Clicking on apache-baseball-jersey
  8. Adding to Cart
  9. Clicking on MyAccount
  10. Navigating to the Home page
  11. Logging out

Actions from Step 5 to Step 7 may be repeated depending on the requirement of the user. Once the above action is recorded user runs the recorded and checks the Output as shown below.

pcDQDIgydvayLQKM-39ae0a6a7eef.png

As you can see from the above screen-shot there are a few requests like “Submit”, “My Account” and “Logout” that have failed.

By Checking the “Login Page” response data we find that there is an authentication token that is generated that is unique and should be used for all the failed transactions. The screenshot is given below.

JnIrLCv86pHb9ELX-6033c9a4c6aa.png

As shown above we will have to use the Regular Expression extractor to extract the token and to be used in the Submit transaction.

D5aqsloxG2onuPES-2efe8163fdf5.png

The Reference name should be noted and the same should be used in the Submit transaction as shown below.

IS55SJ6QgwQ4Lm79-5f2dd486ff84.png

Replace the same in the transaction which needs the Authenticity token. Save the script and run the test again.

4hWEgw5wsOrRxKZj-7e591e3f9a6c.png

Since we have extracted the token and used it in the transactions wherever necessary all the steps would now pass.


Last updated: October 16, 2026

JMeter Integration and Testing

Data Enabling in JMeter

We will follow the below steps to Data enable the JMeter script and run it successfully in AIQ.

  1. Create a JMeter script that works fine in JMeter and run the same in AIQ to make sure that the script is working fine. The screenshot of the working script is given below
    xautdqMxjpjzHgyK-30746b786297.png
    As from the above example, there are multiple websites that are used in the script. We can store all the above websites in a CSV sheet and have JMeter access the websites from the CSV sheet. The next step would be to data enable the JMeter script and make sure it runs fine.
  2. The next step would be to remove all the individual websites and store that in a CSV sheet and create a single HTTP request and have it access the website from the CSV. Please follow the below steps
    Create a CSV sheet with "Sites" as the column name and all the website details below it as shown below
    2kzxaU1q5L03csUI-2e6a92bc337e.png
    Add a CSV Data set config and enter the following details
    Right-click the thread group - Select Add - Select Config element - Select CSV Data Set Config.
    Note: Please make sure to use the data.csv file in the same location as the .jmx project and also CSV Data Set Config should be available on top of HTTP Request.
    Filename: Enter the name of the file
    File encoding: Should be left blank
    Variable Names: Should be left blank, If given data will be picked from the first column and the first entry in the CSV "SItes" will be picked and the script will fail
    Delimiter: Comma
    Add a new HTTP Request Sampler and Use the column name of the CSV sheet in the "Server Name or IP" as shown below
    8OXacWky8O5Tk2gv-26c0c979253b.png
    Once the above setting is done the script is data enabled successfully. Run the script and check in the results tree
    ZJQHzniIGzHz3v1K-d0b54818de9f.png
    All the values from the CSV have been picked successfully.
  3. Run the Same script in AIQ. Steps are given below
    Login to AIQ and click Build and Click File→New
    Select the Scenario test type as the Performance test
    ovspmH3cfG6mMQLA-1c483b19e046.png
    Select the completion criteria as "Executions per user"
    Go to the Test cases tab and click "Edit" browse the JMeter script and select the JMeter file
    Go to Resources Click "Add Data Source" and browse the CSV file
    MugI71JXgPSeg6U7-151a234359d5.png
    Save the scenario and run the test.
    Check the controller page and verify if the data is getting pulled from the CSV
    DNNgg6CWn8q6Gw3P-55e80c53ee54.png
    For Appvance IQ Reporting purposes, instead of reporting different values of a data-enabled script that causes duplicate entries, the parametrized step can be displayed as a variable name that way it does not show them as different steps instead it shows as a summary of those steps just like Appvance IQ designer enabled scripts, below are the steps for the same:
    The usage recommendation for dynamic parameters on how to add parameters so the Appvance IQ report will report the variable and not the different values. Basically, you have the URL's path and a parameters section. You should not put the query part in the path if you want to get a proper report using variable in Appvance IQ. The URL query parameters should go in the parameter section, for both POST and GET requests.
    EGAc0GJDfubMDkcq-ef533607946d.png
    You can notice in the below reporting, it displays as one step else this would have been displayed as 4 different steps with 4 different values taken from the datasheet.
    gZeCQETg5txAGyS5-d101226f4add.png

Last updated: October 16, 2026

If you have any feedback on this topic, please contact us at documentation@appvance.ai

JMeter Integration and Testing

JMeter FAQ

  1. File Downloads from JMeter
  2. How to run Jmeter DB script in AIQ
  3. Jmeter - Java.lang.RuntimeException: Could not find the TestPlan class! Getting this error while running the scenario from AIQ.
  4. JMeter - Note able to see the transactions in the Reports or Test Controller.
  5. Jmeter - Steps Average duration calculation in Appvance IQ
  6. Jmeter: Error while running MySQL DB script
  7. Running JMeter Scripts in AIQ - Best Practices
  8. File Downloads from JMeter
    1. In JMeter, we need to add a "Save Responses to a file" listener to save the file downloads, we can provide a file name prefix or even the directory path for the download file.
      Please refer to below screenshot on how to add "Save Responses to a file" Listener
      1p69fIBbSkRzVXSY-3a00e621adc7.png
      For each sample in its scope, it will create a file of the response Data. The file name is created from the specified prefix, plus a number (unless this is disabled, see below). The file extension is created from the document type if known. If not known, the file extension is set to 'unknown'. If numbering is disabled, and adding a suffix is disabled, then the file prefix is taken as the entire file name. This allows a fixed file name to be generated if required. The generated file name is stored in the sample response and can be saved in the test log output file if required.
      The current sample is saved first, followed by any sub-samples (child samples). If a variable name is provided, then the names of the files are saved in the order that the sub-samples appear. See below.
      3YOFw80MIaMTxOyG-f0002422011f.png
      Please find below the detailed description of the parameters used
      WxsrbbcPcDKwOUTe-2749a3d779b9.png
      Without providing the path, the file gets saved in the "JMeter/bin" directory.
      We can mention the path in the "Save Responses to a file" listener as seen below and this script can be used in Appvance IQ.
      JlfhxU1zeOVH5ONA-2812687c08e9.png
      File downloaded after running the scenario from Appvance IQ
  9. bHGqCW6BYDRLcHBr-ee2b9dd5e78b.png
    How to run Jmeter DB script in AIQ
    1. We assume that the reader has knowledge of how to create a scenario and run the test in AIQ
      The user creates a new scenario and selects a functional test
      G3qtf7EpiVLvrty5-4293c688d85c.png
      Navigates to Test case tab and selects Test type as "Jmeter" and attaches the Jmeter script which ran successfully in Jmeter
      b5koXMjEa9gdxLBB-e4ed2be02539.png
      User now saves the scenario and runs the tests and navigates to Test Controller screen and verifies the output
      1o3vKYwlewrB1y2M-70083fc639e9.png
      In the above scenario we are running a simple functional test in AIQ. However if the user wants to run a Load test we will have to make some changes in the Jmeter script. The below screenshot highlights the changes that needs to be done to run the Load test in AIQ.
      haWjEn9ygLJF9FBa-ad1ba4afcf2a.png
      Need to check in the Thread Group the option Delay Thread Creation Until Needed. Once the changes is made we can go ahead and save the script.
      User creates a Load test scenario with 5 users and 100 executions
  10. QvmgBmDhxcXJrSkV-b529b13638cc.png
    Jmeter - Java.lang.RuntimeException: Could not find the TestPlan class! Getting this error while running the scenario from AIQ
    1. Solution : Please add htmlunit - 2.15.2648 bundle.
      Navigate to Scenario builder and open the scenario created.
      Navigate to Resource Panel and click Add bundle.
      Add htmlunit with version as 2.15.2648, Save and Re-run the scenario.
  11. JMeter - Note able to see the transactions in the Reports or Test Controller
    1. Resolution: Add a new bundle 'httpclient' with value '4.3.4' in the Resources panel of the Scenario Builder, Save and re-run the scenario to see the results in Reports as well as in Test Controller
  12. Jmeter - Steps Average duration calculation in Appvance IQ
    1. The below example gives a detailed explanation of how Step's average duration is calculated in the Jmeter-Appvance IQ combination.
      1.3 TC01_DealID_03 - Average duration is 1.33 secs
      All the requests below and calculations are shown below.
      Number of Success transaction * Average duration of each request
      72*10.92 = 786.24
      37*3.23 = 119.51
      36*2.15 = 77.4
      37*0.93 = 34.41
      36*0.9 = 32.4
      580*0.04 = 23.2
      36*0.48 = 17.28
      36*1.88 = 67.68
      Addition of all the successful transactions.
      72+37+36+37+36+580+36+36 = 870
      786.24 + 119.51 + 77.4 + 34.41 + 32.4 + 23.2 + 17.28 + 67.68 = 1158.2
      1158.2/870 = 1.33
  13. Jmeter: Error while running MySQL DB script
    1. The user tries to run a MySQL DB script in Jmeter and receives the below error
      Java.sql.SQLException: No suitable driver found for jdbc:mysql://localhost:3306/apc
      The error message is self-explanatory stating that there is no suitable driver for running the MySQL script. For the script to run successfully we need to download the MySQL connector jar file and place it under the lib folder of Jmeter
      For Ex:
      If the Jmeter is in the C folder we need to place the mysql-connector-java-5.1.37-bin.jar in C:\Program Files\apache-jmeter-2.13\lib
      Download link :
      http://dev.mysql.com/downloads/connector/j/
      and download the Zip file, Extract the file and copy the mysql-connector-java-5.1.37-bin.jar and place it in the lib folder of Jmeter
  14. Running JMeter Scripts in AIQ - Best Practices
    1. Disable the "View Result Tree" listener during the Load test in AIQ. Because it consumes more memory and causes JMeter running to run out of memory
      1. Disable any other listeners from the Jmeter script before running it in AIQ
      2. The number of Threads should be given 1 in Jmeter when running performance tests in AIQ because this will add up to the iterations
      3. Better to give Ramp-up as 0 in Jmeter
      4. Same as Number of Threads, loop count to be given as 1 by default
      5. Thread group - Use continue, Stop test now accordingly, using stop now will stop all other remaining threads when a thread is a failure

Last updated: October 16, 2026

If you have any feedback on this topic, please contact us at documentation@appvance.ai

Selenium

Selenium

Selenium Integration Reference for AIQ

Last reviewed: October 2, 2026

Use this article as a high-level reference for maintaining Selenium-based assets that still interact with AIQ workflows.

What changed in this article

Validation workflow

  1. Confirm what Selenium asset is being integrated and who owns its maintenance.
  2. Validate browser/driver compatibility, framework dependencies, test data, and result handoff into AIQ.
  3. Document whether the Selenium asset will be maintained, migrated, or retired.

Review note: This article now avoids presenting Selenium as a blank standalone topic.


Last updated: October 2, 2026

If you have feedback on this topic, contact documentation@appvance.ai.

Selenium

Features and Benefits of Selenium

AIQ integrates Selenium to provide the following features and benefits:


Last updated: June 02, 2023

If you have any feedback on this topic, please contact us at documentation@appvance.ai

Selenium

Repurposing Methodology and Architecture for AIQ Integrations

Use this article to plan when existing automation assets can be repurposed for AIQ integrations instead of rebuilt from scratch.

Validation workflow

  1. Inventory the existing asset, its owner, runtime, dependencies, data inputs, and known limitations.
  2. Decide whether the asset should be reused as-is, refactored, migrated, or retired.
  3. Validate the repurposed asset in AIQ with clear evidence and a maintenance owner.

Last updated: October 2, 2026

Selenium

Test Workshop Tutorial

Use workshop tutorials to teach a focused AIQ workflow with clear prerequisites, expected outcomes, and cleanup steps. Keep tutorials current with Scenario Editor, Service Suite, AISG, and Test Node terminology.

Tutorial structure

Quality checks

  1. Run the tutorial end-to-end before publishing updates.
  2. Remove obsolete screenshots, old navigation labels, and unsupported feature names.
  3. Use sample data that does not expose customer information.
  4. Document follow-up learning paths or related articles.

Last updated: October 7, 2026

Selenium

Data-Driven Test Development in AIQ

Use this article to plan AIQ tests that separate reusable scenario logic from controlled test data.

Validation workflow

  1. Identify which values belong in the scenario and which should come from controlled data sources.
  2. Choose the data source that matches the refresh, security, and ownership requirements.
  3. Run at least one positive, negative, and boundary row and confirm each row is visible in results.

Last updated: September 30, 2026

Selenium

Legacy Selenium IDE Import Reference

Use this article only when a team still needs to understand older Selenium IDE assets in relation to AIQ.

Validation workflow

  1. Confirm whether the Selenium IDE artifact is still needed or can be rebuilt in Scenario Editor.
  2. Validate exported commands and locators before importing or translating them.
  3. Run a small playback and review failures caused by outdated Selenium IDE commands.

Last updated: September 28, 2026

Selenium

Review Selenium Commands and Results in AIQ


Use Selenium command and result details when troubleshooting imported or integrated Selenium executions. This content is legacy-adjacent and should support maintenance of existing Selenium assets, while new functional automation should prefer current Scenario Editor guidance where appropriate.

What to review

Maintenance notes

  1. Update brittle locators before rerunning under load or in a suite.
  2. Replace fixed sleeps with waits that prove the application is ready.
  3. Document whether the asset remains maintained or is being migrated to Scenario Editor.

Last updated: September 8, 2026

Selenium

Maintain TestNG Framework Scripts in AIQ

Maintain TestNG Framework Scripts in AIQ

Use this article for existing TestNG framework scripts that still need to run through AIQ integrations. Treat this as maintenance guidance for legacy or specialized assets, not as the default path for new Scenario Editor tests.

Validation workflow

  1. Run the TestNG suite locally or in CI before executing from AIQ.
  2. Confirm required dependencies are packaged or available on the execution host.
  3. Review AIQ output for classpath, browser, data, or environment failures.
  4. Document migration candidates when Scenario Editor can cover the same flow.

Last updated: September 8, 2026

Selenium

Selenium Integration FAQ for AIQ

Use this FAQ to answer common questions about maintaining Selenium-based assets that interact with AIQ workflows.

Validation workflow

  1. Confirm the Selenium asset, framework, browser driver, and owner before troubleshooting.
  2. Validate the asset outside and inside the AIQ workflow so failures are assigned to the right layer.
  3. Document whether the Selenium coverage will be maintained, migrated to Scenario Editor, or retired.

Last updated: October 2, 2026

Continous Integration

Continous Integration

Continous Integration

Configuring Bamboo, Hudson, Jenkins, and AIQ

Run AIQ tests from continuous-integration environments. Appvance has verified compatibility with Hudson, Bamboo, and Jenkins.

Product Version Details


Last updated: October 15, 2026

If you have feedback on this topic, contact documentation@appvance.ai.

Continous Integration

Legacy Hudson Integration Reference

Legacy Hudson Integration Reference

Hudson integration content is retained only as a legacy reference. New CI/CD work should use current Jenkins, GitHub Actions, or supported command-line/API integrations.

When to use this guidance

  1. Inventory any Hudson jobs that still trigger AIQ tests.
  2. Capture job parameters, credentials, triggers, and report locations.
  3. Recreate the workflow in a supported CI/CD platform.
  4. Validate the migrated job with a small AIQ execution.
  5. Mark Hudson-specific instructions as legacy or remove them when no longer needed.

Note: Hudson is obsolete for current AIQ documentation. Prefer Jenkins or another supported CI/CD platform.

Last updated: September 21, 2026

Continous Integration

Legacy Team Foundation Server Integration Reference

This page is retained as a legacy reference for teams that still maintain AIQ integrations with Team Foundation Server or Azure DevOps Server-era workflows.

Validation workflow

  1. Confirm whether the environment still uses TFS/Azure DevOps Server or should migrate to a current integration path.
  2. Validate repository access, token scope, branch/path settings, and artifact retrieval with a controlled test.
  3. Document ownership and migration status so legacy TFS dependencies are not expanded accidentally.

Last updated: September 30, 2026

Continous Integration

Run AIQ Tests from the Command Line

Run AIQ Tests from the Command Line

Use command-line execution when AIQ tests need to run from scripts, schedulers, or CI/CD agents. Keep commands repeatable and avoid embedding secrets in scripts.

When to use this guidance

  1. Confirm the supported AIQ command-line or API entry point for your version.
  2. Create a dedicated service account or token with least-privilege access.
  3. Parameterize project, scenario, environment, dataset, and threshold settings.
  4. Capture execution output, logs, and reports in the automation system.
  5. Handle non-zero exit codes and failed quality gates clearly.

Note: Do not commit credentials, tokens, or environment-specific secrets into source control.

Last updated: September 21, 2026

Continous Integration

CICD - TeamCity Integration

Setup a build in TeamCity: Configuration and pre-requisite:

TeamCity can be downloaded from this location

8WuxGQStcRfhL6m2-f96551a9b3a8.png

Above is the screenshot of the project that was configured in Jenkins.

Build.xml File: Build.xml file and other files and the folder structure can be downloaded from here.

creds.json File:

{

"controller": {

"instances": ["i-0a8ede7xxxxx"],

"ec2Creds": "ec2.creds",

"timeOut": 60,

"username": "AIQUSERNAME",

"password": "AIQPASSWORD",

"workFolder": "."

}

}

Basically has details about the controller machine and the credentials. Above can be used when we have the EC2 setup.

When we are running AIQ local builds, instances in the 2nd line could be replaced with "URL" and the full URL of the AIQ controller could be provided.

ec2.creds will have details of the Ec2 account: This can be used when we are using AIQ Controller on the EC2 machine and when your tests are run in the AWS cloud.

AWS_ACCESS_KEY_ID=YOURAWSACCESSKEY

AWS_SECRET_ACCESS_KEY=YOURAWSSECRETKEY

REGION:us-west-2.ec2.amazonaws.com

Look for Build Triggers and look for Invoke Ant.

Under Targets, call

Note: All the above are case-sensitive


Last updated: October 16, 2026

If you have any feedback on this topic, please contact us at documentation@appvance.ai

Continous Integration

CICD - Repository Alone

This guide shows CI/CD Integration without the use of any cloud services like S3 buckets to store the results and create the dashboard.

You can configure the repository to store test assets, the same Repository (Which could be any flavors of GIT or SVN) can be used to store all the test results and create dashboards.

Below are the steps that need to be followed.

  1. Configure repository in AIQ under preferences > Repository. Please visit the Repository chapter to know more about how to configure repositories using HTTP or SSH
  2. Below is the required folder structure and files
    PcLugZlULNIEI9cS-158e2e87cfdd.png
    • lib will hold the Restclient.jar file.
    • The scenario folder holds all the scenario files that are required to be run.
    • scenarioReports and scenarioResults are the files that are required to store the results that will be uploaded to the git repo that is configured
    • build.xml is the file that holds all the configuration details and the ant targets
    • creds.json file holds the server details and login details of AIQ
    • githttp.json file holds details of git repo to use along with HTTP credentials and branch details.
    • gitSsh.json file holds details of the git repo, the URL, ssh credentials, and the branch details.
    Here is the zip of the above folder structure to download for reference
  3. Configure build.xml with buildversion to use, specify product, specify customer name, specify an environment, specify dir, and the scenario file to use
    If the AISG is going to be run, make changes accordingly and point to the abpt file from the freshly run AISG
  4. creds.json - provide the URL of AIQ services running, provide credentials of AIQ
  5. Depending on SSH or HTTP, provide the details of the Repo, credentials, branch, sshPhrase, and sshKey in either githttp.json or gitSsh.json
    Note: Depending on which file is being used, make the reference of that file in build.xml for the below-mentioned property
    <property name="gitCredentials" value="githttp.json" />
    Once all the changes are made and saved
    Open command prompt of if this is driven from any CICD tools, run "blueprintDashboard" for creating dashboard report and "scenarioDashboard" for creating scenario dashboards
    j2WdD15sBFus2U42-fa7540f61a5d.pngBm4ZBSYuwBdg662d-5561c5908e42.png
  6. Once the build is successfully run, go to AIQ > Preferences > Repository
  7. Click Explore Repository
    whDYs4d9cE8jfl3d-83a87dfbbda4.png
  8. Look for the folder called reports
    KT10wpjMi9zUs7G7-75abcd087b66.png
  9. Click Reports> Products > main.html to have the dashboards created
    ftRQF3wcbzTgDAhx-a4c6fdfd669c.png

Last updated: October 16, 2026

If you have any feedback on this topic, please contact us at documentation@appvance.ai

Continous Integration

CICD- AntTags

Appvance IQ - CICD - All about Ant tags

Below is the list of all Ant tags/Java Class that is defined in build.xml file and their descriptions

I0y2qJufcN6V6LrS-97911489617e.png

Below are Ant Tasks and their descriptions and examples

S3Downlaod

Description

Downloads a folder from S3. Requires S3 credentials and an output file.

Input Parm

credentials: This points to the credentials file. It is a property file similar to

AWS_ACCESS_KEY_ID=AKIA........

AWS_SECRET_ACCESS_KEY=G8w...............

REGION:us-west-2.ec2.amazonaws.com

bucketBase: It is the AWS Bucket where the folder is located

localFolder: The folder where the file will be downloaded

remoteFolder: Remove the folder inside AWS Bucket

StartNode

Description

Starts an AIQ Machine using the information in aiqCreds. Creates machine id in the generatedConfig file.

Input params

aiqCreds: Path of the configuration relative to the project (build.xml). Should have next format

{

"controller": {

"instances": ["i-07cb37f006XXXX"],

"ec2Creds": "ec2.creds",

"timeOut": 60,

"username": "AIQUserName",

"password": "AIQPassword",

"workFolder": "."

}

}

ec2Creds is a creds file to connect to EC2, the format is

AWS_ACCESS_KEY_ID=AKIA....

AWS_SECRET_ACCESS_KEY=W96Axh4UqDl.....

REGION:us-west-2.ec2.amazonaws.com

{
"instanceId":"i-07cb37f006083a225",
"url":"http://ec2machine1:8080/TMServer/ws/TestNode"
}

WaitForAIQ

Description

Waits until AIQ is ready

Input Params

{
"controller":{
"url":"http://localhost:8080",
"username":"",
"password":""
}
}
{
"url":"http://localhost:8080"
}

Output

AIQ should be ready and available otherwise the ant task will fail

CreateBlueprint

Description: Creates a AISG.

Inputs

{
"controller":{
"url":"http://[ec2.machine.dns]:8080",
"username":"appvance",
"password":"appvance",
"workFolder":"/Users/[UserName]/workFolder" <--- for mac users
"workFolder":"c:/Users/administrator/workFolder" <--- for windows users
}
}

Ant Task Example

<taskdef name="createBlueprint" classname="com.appvance.ci.CreateBlueprint">

<classpath refid="RestClientLibPath" />

</taskdef>

<createBlueprint template="${template}" aiqCreds="${aiqCreds}" buildVersion="${buildVersion}" outputFolder="${blueprintResults}"

projectName="${projectName}" requestMaxDuration="4000" consoleDetails="${consoleDetails}" reportStatusCode="400" customer="${customer}" forceNewScan="true" />

Output

AISG is created inside outputFolder parameter

Report (AISG)

Description

Creates a Dashboard report based on Junit results. It can handle integrations in the Junit results

Input Params

Output

Generates a Scenario and its scripts inside the Output folder

Ant Task Example

<taskdef name="uploadReportToS3" classname="com.appvance.AISG.UploadReportToS3">

<classpath refid="RestClientLibPath" />

</taskdef>

<uploadReportToS3 buildVersion="${buildVersion}" credentials="${awsCredentials}" bucketBase="${Bucket}" executionType="blueprints"

reportFolder="${blueprintResults}" environment="${environment}" product="${product}" />

CheckBlueprintResults

Description

Checks AISG and fail if results are worse than expected

Input Params

Output

Fail if results are worse than expected

Ant Task Example

<taskdef name="checkBPResults" classname="com.appvance.AISG.CheckBlueprintResults">

<classpath refid="RestClientLibPath" />

</taskdef>

<checkBPResults maxFailingRequests="${maxFailingRequests}" maxValidationFailures="${maxValidationFailures}" minValidationRatio="${minValidationRatio}" reportFolder="${reports}" />

Dashboard (AISG)

Description

Creates the history for the current branch and product using the AISG history.

Input params

Output

Creates the AISG HTML for the history dashboard and uploads these all synchronized files to s3.

Ant Task Example

The first scenario saves the initial time and the second scenario is set to false to avoid overwriting it.

<taskdef name="dashboard" classname="com.appvance.AISG.BlueprintDashboard">

<classpath refid="RestClientLibPath" />

</taskdef>

<dashboard credentials="${awsCredentials}" customer="${customer}" bucketBase="${Bucket}" environment="${environment}" executionType="blueprints" product="${product}" />

GenerateScenario

Description

Generates a regression scenario

Input Params

Output

Generates a Scenario and its scripts inside the Output folder

Ant Task Example

<taskdef name="genScenario" classname="com.appvance.ci.GenerateScenario">

<classpath refid="RestClientLibPath" />

</taskdef>

<genScenario fileConfig="${fileConfig}" aiqCreds="${aiqCreds}" consoleDetails="${consoleDetails}" logsRemoteFolder="${logsRemoteFolder}" projectName="${projectName}" outputFolder="${outputFolder}" />

ExecuteScenario

Description

Executes a Scenario and, if saveIntitialTime is not true, timing information will be saved in results.properties file in the resultsFolder.

Input params

{

"controller": {

"instances": ["i-07cb37f006083a225"],

"ec2Creds": "ec2.creds",

"timeOut": 60,

"username": "appvance",

"password": "appvance",

"workFolder": "."

}

}

Output

The scenario should be completely executed and, if saveIntitialTime is not true, timing information will be saved in results.properties file in the resultsFolder.

Ant Task Example

The first scenario saves the initial time and the second scenario is set to false to avoid overwriting it.

<taskdef name="executeScenario" classname="com.appvance.ci.ExecuteScenario">

<classpath refid="RestClientLibPath" />

</taskdef>

<executeScenario aiqCreds="controller01.json" dir="${dir}" scenario="Scenarioname.scenario" consoleDetails="${consoleDetails}" resultsFolder="${scenarioResults}" />

UpdateJiraTicket

Description

Logs into Jira, and updates the ticket status, adding a comment based on the execution result file.

Input:

{

"url": "httpS://.....",

"username": "userQA",

"password": "XXXXXXXX",

"destinationStatus" : {

"success": "done",

"failure": "in progress"

}

}

Output:

These ant tags will log in to Jira, and it will update the ticket status by adding a comment based on the execution result file.

FetchScenarioResults

Description

Save scenario results in the results folder. It will update the results.properties file inside the results folder with useful timing properties for report and dashboard creation.

Inputs

{

"controller": {

"instances": ["i-07cb37f006083a225"],

"ec2Creds": "ec2.creds",

"timeOut": 60,

"username": "appvance",

"password": "appvance",

"workFolder": "."

}

}

Output

Save scenario results into the results folder parameter. The report.properties file will be updated with useful timing properties for report and dashboard creation.

Ant Task Example

<taskdef name="fetchScenarioResults" classname="com.appvance.ci.FetchScenarioResults" >

<classpath refid="RestClientLibPath"/>

</taskdef>

<fetchScenarioResults aiqCreds="creds.json" scenario="BasicScenario.scenario" consoleDetails ="params.json" stopOnFailure="false"/>

Report (Scenario)

Description

Creates a Dashboard report based on Junit results. It can handle integrations in the Junit results

Input Params

Output

Generates a Scenario and its scripts inside the Output folder

Ant Task Example

<taskdef name="Report" classname="com.appvance.ci.Report">

<classpath refid="RestClientLibPath" />

</taskdef>

<Report projectName="${projectName}" resultsFolder="${scenarioResults}" reportFolder="${scenarioReports}" executionType="scenarios"

environment="${environment}" consoleDetails="${consoleDetails}" product="${product}" buildVersion="${buildVersion}" bucketBase="${Bucket}" aiqCreds="${aiqCreds}"credentials="${creds.json}" />

UploadToDashboard

Description

This ant task uploads files.

Input Params

Output

No output, this ant task only uploads files

Ant Task Example

<taskdef name="uploadToDashboard" classname="com.appvance.ci.UploadToDashboard">

<classpath refid="RestClientLibPath" />

</taskdef>

<uploadToDashboard bucketBase="${Bucket}" product="${product}" projectName="${projectName}"

environment="${environment}" executionType="scenarios" credentials="${awsCredentials}" buildVersion="${buildVersion}"

reportFolder="${scenarioReports}" consoleDetails="${consoleDetails}" aiqCreds="${aiqCreds}" />

HouseKeeping

Description

Keeps a max number of builds in s3

Input Params

Output

Keeps a max number of builds in s3

Ant Task Example

<taskdef name="HouseKeeping" classname="com.appvance.ci.HouseKeeping">

<classpath refid="RestClientLibPath" />

</taskdef>

<HouseKeeping credentials="${awsCredentials}" keep="${MaxBuilds}" bucketBase="${Bucket}" executionType="scenarios" product="${product}" environment="${environment}" />

CheckScenarioResults

Description

Checks a set of JUnit results and fails if the results are worse than the expected in report.json file.

If ANY high-important TestCase fails, it will fail.

Even if every low importance fails, it won't fail because of this.

The minSucessRatio and maxFailingTestCases are applied to normal importance

Input Params

Output

Checks a set of JUnit results and fails if the results are worse than expected. Will do nothing if the results are good enough.

Ant Task Example

<taskdef name="checkScenarioResults" classname="com.appvance.ivy.CheckScenarioResults" >

<classpath refid="IvyPath"/>

</taskdef>

<checkScenarioResults reportFile="report/report.json" minSucessRatio ="95" maxAllowedFailures ="5" />

ProductDashboard

Description

Creates the main dashboard report for the CICD

Input Params

Output

Creates the main dashboard report for the CICD

Ant Task Example

<taskdef name="ProductDashboard" classname="com.appvance.ci.ProductsDashboard">

<classpath refid="RestClientLibPath" />

</taskdef>

<ProductDashboard credentials="${awsCredentials}" bucketBase="${Bucket}" customer="${customer}" />

ShutdownAIQ

Description

Shutdown and AIQ Server based on specs from the configuration file

Input Params

{

"controller":{

"url":"http://localhost:8080",

"username":"appvance",

"password":"appvance"

}

}

{

"url":"http://localhost:8080"

}

Output

AIQ should be stopped. If not the task will fail.

Ant Task Example

<target name="stopAIQ" depends="deps">

<taskdef name="shutdown" classname="com.appvance.ci.ShutdownAIQ">

<classpath refid="RestClientLibPath" />

</taskdef>

<shutdown

aiqCreds="${aiqCreds}"

consoleDetails="${consoleDetails}" />

</target>

StopNode

Description

Stops an AIQ Machine using the information in aiqCreds.

Input:

{

"controller": {

"instances": ["i-07cb37f006083a225"],

"ec2Creds": "ec2.creds",

"timeOut": 60,

"username": "appvance",

"password": "appvance",

"workFolder": "."

}

}

Ant Tag Example

<taskdef name="stopNode" classname="com.appvance.ci.StopNode">

<classpath refid="RestClientLibPath" />

</taskdef>

<stopNode aiqCreds="${aiqCreds}" consoleDetails="${consoleDetails}" />

AddAIQUser

Description

Creates a user into AIQ.

Input Parm

Output

An user is created.

Ant Task Example

<target name="checkCreateUsers" depends="init">

<path id="TestPath">

<pathelement path="${javac.classpath}"/>

<pathelement path="${build.test.classes.dir}"/>

<pathelement path="${build.classes.dir}"/>

<pathelement location="dist/AppvanceCIClient.jar"/>

</path>

<taskdef name="forEachInDPL" classname="com.appvance.ci.ForEachInDPL" >

<classpath refid="TestPath"/>

</taskdef>

<taskdef name="addAIQUser" classname="com.appvance.ci.AddAIQUser" >

<classpath refid="TestPath"/>

</taskdef>

<forEachInDPL csv="test/com/appvance/ci/users.csv" >

<addAIQUser username="${username}" password="${password}" role="${role}" aiqCreds="CICD/localhost.json"/>

</forEachInDPL> </target>

ForEachInDPL

Description:

Receives the DPL path, the DPL type, and a task list.

Input Params

csv: "CICD/templates.csv"

type: "JsDPL" || “HashDPL”

task=<updateBlueprintTemplate input="CICD/Legacy.mbpt" output="output/original-${template}.mbpt.json" type="none" />

<updateBlueprintTemplate input="output/original-${template}.mbpt.json"

Ant Task Example

<forEachInDPL csv="CICD/templates.csv" >

<updateBlueprintTemplate input="CICD/Legacy.mbpt" output="output/original-${template}.mbpt.json" type="none" />

<updateBlueprintTemplate input="output/original-${template}.mbpt.json"

output="output/dpl-${template}.mbpt.json"

resource="CICD/templates.csv"

type="updateDataset" />

</forEachInDPL>

UpdateBlueprintTemplate

Description

Updates the Blueprint template.

Input Params

Output

From a Blueprint template, it generates a list of modified Blueprint templates.

Ant Task Example

<target name="checkUpdateBlueprintTemplate" depends="init">

<path id="TestPath">

<pathelement path="${javac.classpath}"/>

<pathelement path="${build.test.classes.dir}"/>

<pathelement path="${build.classes.dir}"/>

<pathelement location="dist/AppvanceCIClient.jar"/>

</path>

<taskdef name="updateBlueprintTemplate" classname="com.appvance.AISG.UpdateBlueprintTemplate" >

<classpath refid="TestPath"/>

</taskdef>

<taskdef name="forEachInDPL" classname="com.appvance.ci.ForEachInDPL" >

<classpath refid="TestPath"/>

</taskdef>

<forEachInDPL csv="CICD/templates.csv" >

<updateBlueprintTemplate input="CICD/Legacy.mbpt" output="output/original-${template}.mbpt.json" type="none" />

<updateBlueprintTemplate input="output/original-${template}.mbpt.json"

output="output/dpl-${template}.mbpt.json"

resource="CICD/templates.csv"

type="updateDataset" />

</forEachInDPL>

</target>

ForEachInFolder

Description

Processes a list of files, using a pattern to filter file types inside a folder, then executes a list of tasks.

Input Params

<taskdef name="forEachInFolder" classname="com.appvance.ci.ForEachInFolder" >

<classpath refid="TestPath"/>

</taskdef>

Ant Task Example

<forEachInFolder folder="testfolder">

<echo message="Filename: ${filename}${line.separator}" file="output/ForEachFolder.txt" append="true" />

</forEachInFolder>

<forEachInFolder folder="testfolder" match =".*.csv">

<echo message="Filename: ${filename}${line.separator}" file="output/ForEachMatch.txt" append="true" />

</forEachInFolder>

ExtractAutovalidations

UpdateCSVValidations

Description

Updates a CSV file according to a pattern using a replacement string.

Input Parm

Ant Task Example

<target name="updateCSV" depends="deps">

<taskdef name="updateCSVData" classname="com.appvance.AISG.UpdateCSVValidation">

<classpath refid="RestClientLibPath" />

</taskdef>

<updateCSVData

type="disable || enable || updateMatch"

input="folder"

output="outputFolder"

match="getData"

replace="getContent"

/>

</target>

DownloadRepository

Description

Clones a git repository

Input Parm

For https connection

{

"username": "*****@appvance.com",

"password": "*******",

"repository": "https://gitlab.com/pathtest/development.git ",

"branch": "branchName",

"sshPhrase": "";

"sshKey": ""

}

For ssh connection

{

"username": "theUser@appvance.com",

"password": "",

"repository": "git@gitlab.com:pathtest.git",

"branch": "master",

"sshPhrase": "thisIsMyKeyPharse"; // optional if not required by git

"sshKey": "pathToprivateKeyFile"

}

Output

Git repository is cloned in to file system

Ant Task Example

<taskdef name="downloadRepository" classname="com.appvance.ci.git.DownloadRepository">

<classpath refid="RestClientLibPath" />

</taskdef>

<downloadRepository folder="${localEmptyFolder}" credentials="${gitCredentialsFile}" />

GitReporter

Description

Generates internal Statistics

Input Parm

Output

Updates the statistics for local files

Ant Task Example

<taskdef name="gitReporter" classname="com.appvance.ci.git.GitReporter">

<classpath refid="RestClientLibPath" />

</taskdef>

<gitReporter

folder="${localEmpyFolder}"

reportFolder= "${blueprintResults}"

environment="${environment}"

executionType="blueprints"

projectName="${projectName}"

buildVersion="${buildVersion}"

product="${product}"

resultsFolder= ""

/>

History Manager

Description

Generates internal Statistics

Input Params

Output

Updates the statistics for local files

Ant Task Example

<taskdef name="historyManager" classname="com.appvance.ci.git.HistoryManager">

<classpath refid="RestClientLibPath" />

</taskdef>

<historyManager

folder="${localEmpyFolder}"

product="${product}"

environment="${environment}"

buildVersion="${buildVersion}"

executionType="blueprints"

projectName="${projectName}"

/>

ProjectManager

Description

Generates internal Statistics

Input Params

Output

Updates the statistics for local files

Ant Task Example

<taskdef name="dashboard" classname="com.appvance.ci.git.ProjectManager">

<classpath refid="RestClientLibPath" />

</taskdef>

<dashboard

folder="${localEmpyFolder}"

buildVersion="${buildVersion}"

product="${product}"

environment="${environment}"

executionType="blueprints"

customer="${customer}"

/>

ProductManager

Description

Generates internal Statistics

Input Parm

Output

Updates the statistics for local files

Ant Task Example

<taskdef name="productManager" classname="com.appvance.ci.git.ProductManager">

<classpath refid="RestClientLibPath" />

</taskdef>

<productManager

folder="${localEmpyFolder}"

customer="${customer}"

/>

UploadRepository

Description

Commits changes into a git repository

Input Parm

Output

Updates the statistics for local files

Ant Task Example

<taskdef name="commitReports" classname="com.appvance.ci.git.UploadRepository">

<classpath refid="RestClientLibPath" />

</taskdef>

<commitReports

credentials="${gitCredentials}"

folder="${localEmpyFolder}"

customer="${customer}"

/>

ConsumeBlueprint

Description

Detects a AISG that is loaded in memory.

Input Parm

aiqCreds="${aiqCreds}"

it’s the JSON file that contains the IQ credentials.

{

"controller":{

"url":"http://[ec2.machine.dns]:8080",

"username":"appvance",

"password":"appvance",

"workFolder":"/Users/[UserName]/workFolder" <--- for mac users

"workFolder":"c:/Users/administrator/workFolder" <--- for windows users

}

}

buildVersion="001" // define the number of copilation according to the pipeline number.

outputFolder="blueprintResults" //it’s the folder where is going to be downloaded the reports.

projectName="aProjectName" //the name that discribes to of the projet

requestMaxDuration="4000" //maximum duration per request

consoleDetails="${consoleDetails}" //

reportStatusCode="400" // minimum expected error code.

customer="${customer}" // it’s a name that describes to the customer.

Output

c:\Builds\Resources\[blueprint-name].abp

Ant Task Example

<target name="blueprintConsume" depends="ivyDeps">

<taskdef name="consumeBlueprint" classname="com.appvance.ci.ConsumeBlueprint">

<classpath refid="RestClientLibPath" />

</taskdef>

<consumeBlueprint

aiqCreds="${aiqCreds}"

buildVersion="${buildVersion}"

outputFolder="${blueprintResults}"

projectName="${projectName}"

requestMaxDuration="4000"

consoleDetails="${consoleDetails}"

reportStatusCode="400"

customer="${customer}" />

</target>

FunctionalExecuter

Description

This Ant task runs complex functional scenarios.

This Ant task does not require AIQ, but it requires Test Designer if the script uses it. You can create a report from the results of the ant task using the FunctionalReport ant task (FunctionalReport )

Qualified Class Name

com.appvance.ci.functional.FunctionalExecuter

Input Params

<taskdef name="functionalExecuter" classname="com.appvance.ci.functional.FunctionalExecuter" >

<classpath refid="CIPath"/>

</taskdef>

<functionalExecuter maxThread="1" resultFolder="${resultFolder}" testclass="${testclass}" />

The Locker & Bridge Variable support

If scripts have variables in the locker or the bridge, it is important to notice they required some details in the script java class but no change is required in the script itself

@Test

public void doFirstTestBroken() {

//Somewhere in the script this happens

new TheLocker().put("myVar", "MyValue");

//Leave the script

}

@Test(dependsOnMethods = {"doFirstTestBroken"})

public void doSecondTestBroken() {

/**

*/

//Fresh thread will run this piece

Assert.assertEquals("MyValue", new TheLocker().get("myVar"));

}

// --------------------------------------------------------------------------------

// -- DO NOT WORRY, our Shiny new Appvance CI Runner can do this and much more

// -- IF the scripts save the data in the locker you need to move it to a

// -- local variables and back to the locker for the next script

// -----------------------------------------------------------------------------

private Object myVar;

@Test

public void doFirstTestFixed() {

//Somewhere in the script this happends

new TheLocker().put("myVar", "MyValue");

//..

// Now before leaving we put it in a script level variable

myVar = new TheLocker().get("myVar");

}

@Test(dependsOnMethods = {"doFirstTestFixed"})

public void doSecondTestFixed() {

/**

*/

new TheLocker().put("myVar", myVar);

//Eventually the script will read it from

Assert.assertEquals("MyValue", new TheLocker().get("myVar"));

}

//------------------------------------------------

//-- For ServiceSuiteBrige & TestDesginer bridge variables

//-- Solution is simpler, you keep the bridge as Java Class variables

//--------------------------------------------------

@Test

public void doFirstServiceSuiteBridgeBroken() throws Exception {

ServiceSuiteBridge bridge = new ServiceSuiteBridge();

bridge.put("myVar", "myValue");

}

@Test(dependsOnMethods = {"doFirstServiceSuiteBridgeBroken"})

public void doSecondServiceSuiteBridgeBroken() throws Exception {

ServiceSuiteBridge bridge = new ServiceSuiteBridge();

//This will aalways fail because brige is new object

Assert.assertEquals("myValue", bridge.getVariable("myVar"));

}

//---------------------------------

// Solution is to have a setup

//---------------------------------

private ServiceSuiteBridge serviceSuiteBridge;

@BeforeClass

public void setup() throws Exception {

serviceSuiteBridge = new ServiceSuiteBridge();

}

@Test

public void doFirstServiceSuiteBridgeFixed() throws Exception {

serviceSuiteBridge.put("myVar", "myValue");

}

@Test(dependsOnMethods = {"doFirstServiceSuiteBridgeFixed"})

public void doSecondServiceSuiteBridgeFixed() throws Exception {

//This is fine as long as doFirstServiceSuiteBridgeFixed do not branch!

//CAREFULL with multiple threads accessing this bridge at the same time

// If you need to branch use same approach as the locker, save variables

//as Java class variables

Assert.assertEquals("myValue", serviceSuiteBridge.getVariable("myVar"))

FunctionalReport

Definition

These Ant tags create a report for the Appvance CI Complex Functional Runner (FunctionalExecuter ).

Qualified Class Name

com.appvance.ci.functional.FunctionalReport

Input Params

dQxpzrE17kA9eQRU-dcf469bcbc5e.png

credentials File will be similar to this

AWS_ACCESS_KEY_ID=XXX

AWS_SECRET_ACCESS_KEY=XXX

REGION:us-west-2.ec2.amazonaws.com

Ouput

Upon successful ant task, the “reportFolder” will contain a correctly generated report of the execution based on the results inside the “resultsFolder”.

If the bucketBase & credentials are set, the task will find previous executions (if any) inside Amazon AWS to fill the results column.

Ant Task Example

<taskdef name="Report" classname="com.appvance.ci.functional.FunctionalReport">

<classpath refid="CIPath" />

</taskdef>

<Report

projectName="${projectName}"

resultsFolder="${resultFolder}"

reportFolder="${reportFolder}"

environment="${environment}"

credentials="${awsCredentials}"

product="${product}"

buildVersion="${buildVersion}"

bucketBase="${Bucket}" />

Dashboard Git Support

A sample of targets that are added to your build.xml will enable you to run scenarios and AISG and upload the results to a GIT repository.

You will need to provide GIT credentials in a credentials JSON file pointed by the gitCredentials property

Terminate Instance

Terminates an ec2 instance using the instance id coming from the console details file.

Input

{

"instanceId": "i-TheInstanceId",

"url": "http://[some domain goes here]:8080/TMServer/ws/TestNode"

}

Cloud File

This XML file can be encrypted by AIQ or visible in plain text, this file is required to establish a connection with AWS

<?xml version="1.0" encoding="UTF-8"?>

<cloud type="EC2" version="1">

<config-param key="AIQProtocol" value="http"/>

<config-param key="AIQPort" value="8080"/>

<config-param key="AccountName" value="XXX"/>

<config-param key="AWSKey" value="XXX"/>

<config-param key="AWSSecretAcessKey" value="XXX//XX"/>

<config-param key="AMI" value="ami-XX"/>

<config-param key="InstanceType" value="t2.xlarge"/>

<config-param key="KeyPair" value="XX"/>

<config-param key="Security" value="sg-XX"/>

<config-param key="AWSRegion" value="http://us-west-2.ec2.amazonaws.com "/>

<config-param key="vpcId" value="vpc-XX"/>

<config-param key="subnetId" value="subnet-XX"/>

</cloud>

Tag Definition

<target name="TerminateInstance" depends="deps">

<taskdef name="TerminateInstance" classname="com.appvance.ci.TerminateInstance">

<classpath refid="RestClientLibPath" />

</taskdef>

<LaunchInstance

testNodeDetails="${testNodeDetails}"

cloudFile="${cloudFile}"/>

</target>

Output

There is no output since the instance is terminated and all processes are completed.

Launch Instance

This tag can create an ec2 instance from an existing AMI.

Note:

The AMI should have everything configured:

Inputs:

Cloud File created with AIQ:

AWS Creds

Note:

These three fields are required.

AWS_ACCESS_KEY_ID=AKIAZ******

AWS_SECRET_ACCESS_KEY=eFK*****ojk/7ZCNb1fk*****Lq

REGION=us-west-2.ec2.amazonaws.com

Cloud File

This xml file can be encrypted by AIQ or visible in plain text

<?xml version="1.0" encoding="UTF-8"?>

<cloud type="EC2" version="1">

<config-param key="AIQProtocol" value="http"/>

<config-param key="AIQPort" value="8080"/>

<config-param key="AccountName" value="XXX"/>

<config-param key="AWSKey" value="XXX"/>

<config-param key="AWSSecretAcessKey" value="********"/>

<config-param key="AMI" value="ami-XXX"/>

<config-param key="InstanceType" value="t2.xlarge"/>

<config-param key="KeyPair" value="XXX"/>

<config-param key="Security" value="sg-XXX"/>

<config-param key="AWSRegion" value="http://us-west-2.ec2.amazonaws.com "/>

<config-param key="vpcId" value="vpc-XXX"/>

<config-param key="subnetId" value="subnet-XXX"/>

</cloud>

Tag Definition

<target name="LaunchInstance" depends="deps">

<taskdef name="LaunchInstance" classname="com.appvance.ci.LaunchInstance">

<classpath refid="RestClientLibPath" />

</taskdef>

<LaunchInstance

aiqCreds="${aiqCreds}"

credentials="${awsCredentials}"

testNodeDetails="${testNodeDetails}"

cloudFile="${cloudFile}"/>

</target>

Output

Updates the ConsoleDetails File:

{

"instanceId": "[auto generated instance ID]",

"url": "http://[auto generated domain]:8080/TMServer/ws/TestNode"

}

UploadReportToS3

Description

Creates a Dashboard report based on Junit results. It can handle integrations in the Junit results

Qualified Class Name:

com.appvance.AISG.UploadReportToS3

Input Params

Output

Generates a Scenario and its scripts inside the Output folder

Ant Task Example

<taskdef name="uploadReportToS3" classname="com.appvance.AISG.UploadReportToS3">

<classpath refid="RestClientLibPath" />

</taskdef>

<uploadReportToS3 buildVersion="${buildVersion}" credentials="${awsCredentials}" bucketBase="${Bucket}" executionType="blueprints"

reportFolder="${blueprintResults}" environment="${environment}" product="${product}" />



If you have any feedback on this topic, please contact us at documentation@appvance.ai

Cloud execution flow

Use the Ant tasks in dependency order: provision or start the node, wait for AIQ, create or generate the scenario, execute it, collect results, and shut down resources. Confirm that credentials, endpoints, and workspace paths are supplied by the build environment and review cleanup tasks after both successful and failed runs.

Last updated: October 15, 2026

Continous Integration

CICD - Dashboards

Dashboards Explained:

The main dashboard looks like the below:

  1. The main dashboard will have all the entries for the scenarios and the AISG run for the application under test

  2. The top right will have last updated with the date and time

  3. Product is a drop-down field that lists out all the products of the dashboard, remember product was a property that was set in build.xml, and based on the provided value, a dashboard would be created

  4. The environment is again a drop-down field that lists out all the environments, remember environment is again a property that was set in build.xml, and based on the provided value, dashboards would be created or updated

  5. Type Lists out all the test types, like functional scenarios, AISG etc

  6. Build id - is again is a value provided in build.xml, it can be driven to be dynamically generated from other tools like Jenkins.

    From Jenkins:

    buildNumber=Appvance$BUILD_NUMBER

    $BUILD_NUMBER is an inbuilt method that creates a build number by itself so every time a pipeline is run, a number would be appended to Appvance (Example: Appvance01)

    Within Build.xml:

    Below example shows picking today's date as the build number which is defined inside build.xml as shown below:

    <property name="buildVersion" value="${TODAY_MY}" />

    <tstamp>

    <format property="TODAY_MY" pattern="MM-dd-yyyy" locale="en,US" />

    </tstamp>

  7. Test Name - It is the name of the test scenario name/AISG execution name

  8. Date - Date of when the AISG or the test scenario was run

  9. Duration - is the pipeline duration

  10. Failures - will show the number of script failures for scenarios and the number of validation failures for AISG

  11. Success Rate - Success rates in percentage for both Scenarios and AISG

  12. Toggle Columns - You have options to toggle columns with Build Id, Product, Environment

Products and Environments:

Environments:

History Results:

Click the icon for each of the entries under History Results to check the history results for a scenario run based on product/Environment/Test Type (AISG or Scenario)

AISG:

  1. It has a search option on top so you can search for something specific, like dates, build number, etc

  2. ID is the same as the build number

  3. Name is the name of the AISG

  4. Success rate gives the success rate of the AISG, if there are some validation failures, those can be checked using Validators

  5. Start Time - shows when the AISG was started

  6. Duration - shows how long the AISG was run

  7. SmartTags - shows all the SmartTags that were used in the Green tick box and also the ones that are not used in the orange box. You can click them for a quick view

  8. Validations - will list all the successful validations and the failed validations, just like SmartTags, you can open the quick view to list out all the validations that were passed and all the validations that were failed

  9. Extractions - will list all the successful and failed extractions and you can use the quick view to see the list of successful extractions and the failed ones

  10. Slow requests - Depending on the user entry in the build.xml to filter out the slow responses (like 2000 msecs) - this will list out all the slow requests

  11. Failed Requests - Depending on the user entry in the build.xml to filter out all the failed requests (302 and above) - this will list out all the failed requests

The graph shows successful and failed validations, slow and failing requests over a period of time. You can mouse hover on both graphs to get more details.

View:

  1. Test Coverage shows all the Unique Actions created, Unique pages found statistics and total scripts created, and an option to download all the JS scripts created from the AISG

    Coverage is basically:

    The list of unique actions is divided by total actions, The list of unique pages divis ided by total pages found, then both results are summarized and divided into 2, so the coverage is an average of the percentage of actions and pages found, Just those values are considered to generate the final value.

  2. AISG section details will show the AISG type (Web or Mobile), AISG duration in minutes, and the number of browsers

  3. Below sections - Failed Validations, Failed Requests, Failed Extractions, Successful Validations, Successful Extractions, Slow Requests, SmartTags-All can be expanded and collapsed

  4. These sections can be dragged and dropped based on user needs, like dragging all the failed sections to one side and all the successful sections to the other side, even if the browser is refreshed, these sections stay as the user made changes

  5. Reset to Defaults can be used to re-arrange the sections as default options

  6. Each of the sections will have a Filter option to filter out based on the needs

  7. Under failed requests, you can expand a particular request and copy the generated script which can be pasted in JS Edit & Play to be replayed back. The same applies to slow requests as well.

  8. The entire report can be downloaded as pdf using Save report as PDFon top of the page next to the Last updated

Scenarios:

  1. Just like a AISG, a search option is available to filter out the entries

  2. ID is the build-id

  3. NameThen is the scenario name

  4. Type shows if it is a functional, performance, or bulk scenario type

  5. Initial Time - This shows when the scenario started executing

  6. Success/Failure - This shows the list of success test cases and failed test cases, you can click the quick view to see the full list

  7. Success percentage - This shows the success percentage

  8. Duration - This shows the duration of the scenario run from AIQ. When scenarios are run in parallel, the duration will show the duration of the scenario which took longer. When scenarios are run in sequence, the duration will show the duration of all the scenarios summed up.

You will also be able to view the graphs of history on the success and failure of the scenarios over a period of time

View:

  1. On top, it lists out the total Failures, Successes, and Success Percentages

  2. Failed test case detailed section lists all the test cases that were failed and a one-line Failure reason with the importance set in the Scenario Editor test case section

  3. You can expand each of the test cases to look at more details on the failure like Steps, script and resources to download, Failure snapshot, Instant replay to download, Failure snapshot of step highlighted, Trace, and error logs

  4. Each of the above details can be expanded to look into more details

  5. The success test case will have the same details excluding the failed screen-shots and failed error logs

  6. Previous 5 Execution Pass or Fail - This will give details about a test case consistency over the last 5 executions

Min Actions and Min Pages:

This is an optional field, but if you want to enable it on the dashboards, you should make the following changes.

Based on the entries from the user, min pages, and min actions, the build would be marked as success or failure.

In order to have these changes on dashboards, please modify the build.xml as follows:

All these parameters are required in order to fully display this feature.

<property name="minSuccessRate" value="95" /> //minSuccessRate to skip set to “0“ zero

<property name="minActions" value="40" /> // set the minimum expected actions in the AISG, minActions to skip set to -1

<property name="minPages" value="30" /> // set the minimum expected pages in the AISG, minPages to skip set to -1

This would be used in the below ant tags.


Last updated: August 14, 2023

If you have any feedback on this topic, please contact us at documentation@appvance.ai

Continous Integration

CI/CD: Optimize Disk Space on AIQ Controller and Test Nodes

CI/CD: Optimize Disk Space on AIQ Controller and Test Nodes

Use this article when CI/CD activity or frequent AIQ executions consume disk space on the Controller or Test Nodes. Clean up only approved files and keep execution evidence required for reporting or troubleshooting.

Common disk consumers

Safe cleanup workflow

  1. Measure disk usage before deleting anything.
  2. Confirm the retention requirement for evidence, reports, logs, and backups.
  3. Remove only files that match the approved cleanup target and date range.
  4. Automate cleanup through CI/CD or scheduled maintenance only after the manual process is verified.
  5. Run a small AIQ execution afterward to confirm the node and controller still operate normally.

Warning: Do not delete active execution folders, current logs needed for troubleshooting, or database files unless the maintenance plan explicitly covers them.

Last updated: October 8, 2026

Continous Integration

CI/CD FAQ for AIQ Integrations

CI/CD FAQ for AIQ Integrations

This FAQ summarizes common questions for running AIQ tests from CI/CD pipelines. Use current integrations such as Jenkins, GitHub Actions, and command-line execution.

When to use this guidance

  1. Decide which pipeline system will trigger AIQ and what environment it targets.
  2. Store AIQ credentials or tokens in the CI/CD secret store.
  3. Pass project, scenario, dataset, environment, and threshold parameters explicitly.
  4. Publish execution IDs, reports, and failure summaries back to the pipeline.
  5. Use exit codes or quality gates so failed tests block releases when appropriate.

Note: Retire duplicate CI pages when they repeat this FAQ without adding tool-specific steps.

Last updated: September 21, 2026

SoapUI Integration

SoapUI Integration

SoapUI Integration with AIQ

SoapUI integration should be treated as legacy or customer-specific unless it is actively required. For current API testing, prefer Service Suite when it can cover the same requests, assertions, data handling, and reporting.

Integration review points

Maintenance guidance

  1. Keep SoapUI assets in version control with clear ownership.
  2. Do not store secrets inside project files or shared logs.
  3. Run small validation tests before scheduled or high-volume execution.
  4. Retire or consolidate redundant SoapUI content when Service Suite replaces it.

Last updated: October 7, 2026

SoapUI Integration

Run SoapUI as a Functional Test in AIQ

Run SoapUI as a functional test in AIQ when existing SoapUI projects still provide required validation. Keep the integration controlled and consider migration to Service Suite for new API coverage.

Before execution

Review workflow

  1. Run the SoapUI test independently before AIQ execution.
  2. Run a small AIQ wrapper and confirm output handling.
  3. Review logs and generated reports for the first meaningful failure.
  4. Document legacy dependency and replacement options if applicable.

Last updated: October 7, 2026

SoapUI Integration

Running SoapUI as a Performance Test

SoapUI support was removed in release 5.2.0 of AIQ.

  1. Navigate to the Appvance IQ Home screen and click Build

  2. Click File >New to create a new scenario

  3. Select Performance Test from the Scenario Test Type drop-down

  4. Click the Test Management tab

  5. Enter Iteration name, select Total Execution from the Completion Type drop-down, and enter Total Execution: 100

  6. Click the Test Cases tab and click the link for Add test case execution

  7. Enter the Test case name and Script name

  8. Select "Service Suite-SoapUI" from the Script Type drop-down

  9. Click Browse and browse the Soap UI XML file and then the Test Suite and then the Test Case from the drop-down

  10. Save the test case

  11. Enter 100 in the user box, Click Set (Run Time):

  12. Ramp up 10 users every 10 seconds Maximum ramp-up time of 100 seconds and save the Run Time option

  13. Click the Locations tab

  14. Enter Name: localhost and URL: http://localhost:8080/TMServer/ws/TestNode (Should be selected by default)

  15. Navigate to Resources and make sure SoapUI bundle with version 5.12 is added by default

  16. Also make sure the resources are added with Name, Type, and the correct path of the XML file

  17. Navigate to Options and make sure that Enable logging, Save logs on Failure are selected

  18. Click check box Custom Database Credentials (Database Logging) and make the following settings:

    Database Type: MySQL

    Driver: com.mysql.jdbc.Driver

    URL: jdbc:mysql://localhost:3306/utp?useSSL=false

    Default Schema: utp

    Username: utp

    Password: utp

  19. Click File >Save to save the new scenario

  20. Click Play Scenario from the top navigation bar

  21. The controller window will open in a new tab which displays the tests running and will display the pass / fail status of the tests upon the test completion

  22. The left part shows the steps and the duration in milliseconds and the right side shows the test run status under the Output tab

  23. On The transactions tab, we can find the request/response and an error tab to drill down further

  24. Click Click here link to get to the list of reports that Appvance IQ supports


Last updated: July 25, 2024

If you have any feedback on this topic, please contact us at documentation@appvance.ai

SoapUI Integration

Running Data-enabled SoapUI Test

SoapUI support was removed in release 5.2.0 of AIQ.

Make sure the SoapUI project created has the properties defined and the request is data enabled properly as shown below in the screenshot.

Save the project in SoapUI.

From Appvance IQ:

  1. Navigate to the Appvance IQ Home screen and click Build

  2. Click File ->New to create a new scenario

  3. Select Functional Test from the Scenario Test Type drop-down

  4. Click the Test Management tab and check: "Repeat scenario's test cases 2 times"

  5. Click the Test Cases tab and click the link for Add test case link

  6. Enter the Test case name and Script name

  7. Select "Service Suite-SoapUI" from the Script Type drop-down

  8. Click Browse and browse the Soap UI file and then the Test Suite and then the Test Case from the drop-down. Save the test case

  9. Click the Locations tab

  10. 10. Enter Name: localhost and URL: http://localhost:8080/TMServer/ws/TestNode (Should be added by default)

  11. Navigate to Resources and make sure SoapUI bundle with version 5.2.1 is added by default

  12. Also make sure the resources are added with Name, Type, and the correct path of the XML file

  13. 13. Go to the Resources tab, Click Add DPL, Select 'Hash DPL - Reads CSV, provides Map dictionary' from the Type drop-down, Provide Name (Important: Should be same as the property name provided in SoapUI), select the Data source (the CSV file with all the entries created)

  14. Come back to the Test cases panel, click edit and click Add DPL, under Select DPL, select the DPL that we just added, provide the name (Important: Should be the same as the property name provided in SoapUI). Click Save

  15. Navigate to Options and make sure that Enable logging, Save logs on Failure are selected

  16. Click check box Custom Database Credentials (Database Logging) and make the following settings:

    Database Type: MySQL

    Driver: com.mysql.jdbc.Driver

    URL: jdbc:mysql://localhost:3306/utp?useSSL=false

    Default Schema: utp

    Username: utp

    Password: utp

  17. Click File ->Save to save the new scenario

  18. Click Play Scenario from the top navigation bar

  19. The controller window will open in a new tab which displays the tests running and will display the pass / fail status of the tests upon the test completion

  20. The left part shows the steps and the duration in milliseconds and the right side shows the test run status under the Output tab

  21. On The transactions tab, we can find the request/response and an error tab to drill down further

  22. Click the Click here link to get to the list of Reports that Appvance IQ supports


Last updated: July 25, 2024

If you have any feedback on this topic, please contact us at documentation@appvance.ai

How to query and validate Splunk logs in Service Suite

Overview

The splunk.js library provides a reusable integration layer between AIQ Service Suite and Splunk. It allows test scripts to query Splunk indexes using SPL (Search Processing Language), filter and retrieve log data, and assert on the results as part of a functional or end-to-end test validation flow.

Common use cases include:

Prerequisite: The AIQ TestNode executing the script must have network access to the Splunk REST API on port 8089. Verify security group / firewall rules before using this library.


Setup

1. Add splunk.js to your repository

splunk.js file: splunk.js 

Upload splunk.js to your scenario repository. A recommended location is a shared folder so it can be reused across multiple scenarios:

your-repo/
  shared/
    splunk.js <-- place it here
  scenarios/
    checkout-flow/
      setup.js
      script1.js

2. Configure DPL variables

Never hardcode Splunk credentials in scripts. Add the following variables to your DPL (Data Provider Library) or scenario data file:

DPL Variable

Description

Example

SPLUNK_HOST

Hostname or IP of the Splunk instance

splunk.internal.mycompany.com

SPLUNK_TOKEN

Splunk service account Bearer token

eyJrIjoiT...

To generate a Bearer token in Splunk: Settings → Tokens → New Token. Use a dedicated service account, not a personal user.

Do not commit credentials to the repository. Always use DPL variables or TheLocker for sensitive values.

3. Include the library in your script

Use the Service Suite include directive at the top of any script that needs Splunk access. The {ds} token resolves to the root of your scenario's data source directory at runtime:

/**
 * @aiq.servicesworkbench
 */
include('{ds}/shared/splunk.js');


Initialization

Call splunk.init() once at the beginning of each script before making any queries:

splunk.init({
  host:            $SPLUNK_HOST,    // DPL variable
  port:            8089,
  token:           $SPLUNK_TOKEN,   // DPL variable
  defaultIndex:    'app_logs',      // used when no index is specified in SPL
  defaultEarliest: '-15m',          // default look-back window for all searches
});

Full init options

Option

Default

Description

host

localhost

Splunk hostname or IP

port

8089

Splunk REST API port

scheme

https

https or http

token

null

Bearer token (preferred auth method)

username

null

Basic auth username (alternative to token)

password

null

Basic auth password (alternative to token)

defaultIndex

main

Fallback Splunk index

defaultEarliest

-15m

Default time window start

defaultLatest

now

Default time window end

defaultCount

1000

Max rows returned per search

pollIntervalMs

2000

How often to poll for job completion (ms)

maxPollAttempts

30

Max poll attempts before timeout (30 × 2s = 60s)


How HTTP calls work internally

The library uses native Service Suite HTTP commands throughout. No browser-style fetch or external modules are used.

Operation

Service Suite command used

Submit search job

createPost(url, body, "application/x-www-form-urlencoded") + process(call)

Poll job status

createGet(url) + process(call)

Fetch results

createGet(url) + process(call)

Per-request auth header

call.addHeader("Authorization", "Bearer ...")

Read response body

resp.toStringContent()

Read HTTP status code

resp.status

Sleep between polls

java.lang.Thread.sleep(ms)

Base64 encode (Basic auth)

Java.type("java.util.Base64").getEncoder().encodeToString(...)


API Reference

Query methods

Method

Returns

Description

splunk.search(spl, opts)

Array

Run any SPL query and return all result rows

splunk.searchOne(spl, opts)

Object|null

Return only the first result row, or null if none

splunk.count(spl, opts)

Number

Return the number of matching events

splunk.getField(spl, field, opts)

String

Return a single field value from the first row

splunk.getFields(spl, fields[], opts)

Object

Return multiple field values from the first row

splunk.getAllValues(spl, field, opts)

Array

Return one field's value across all rows

splunk.waitForEvent(spl, opts)

Array

Poll until at least one matching event appears

All query methods accept an optional opts object: { earliest, latest, count }. waitForEvent also accepts pollMs and maxAttempts.

Assertion methods

Method

Description

splunk.assertCount(rows, n, msg)

Fails if row count ≠ n

splunk.assertAtLeast(rows, n, msg)

Fails if fewer than n rows returned

splunk.assertFieldEquals(rows, field, value, msg)

Fails if the field on row[0] ≠ expected value

splunk.assertFieldContains(rows, field, substring, msg)

Fails if the field on row[0] does not contain the substring

splunk.assertNoErrors(index, earliest, msg)

Fails if any ERROR or FATAL entries exist in the time window

splunk.assertEventOccurred(spl, msg, opts)

Combined search + assertAtLeast(1) in one call

Utility methods

Method

Description

splunk.storeResult(rows, field, lockerKey)

Store a field value from row[0] into TheLocker for downstream scripts via _retrieve(lockerKey)


Usage Examples

Example 1 — Assert a login audit event was written

After executing a login API call, verify that Splunk captured the corresponding audit entry:

/**
 * @aiq.servicesworkbench
 */
include('{ds}/shared/splunk.js');
splunk.init({
  host:         $SPLUNK_HOST,
  token:        $SPLUNK_TOKEN,
  defaultIndex: 'audit',
});
var testUser = $TEST_USERNAME;
splunk.assertEventOccurred(
  'index=audit action=login userId="' + testUser + '" result=SUCCESS',
  'Login audit event must appear in Splunk after successful authentication',
  { earliest: '-5m' }
);
log('✓ Login audit event confirmed in Splunk');

Example 2 — Validate field values on a specific transaction

Retrieve a transaction log by its ID and assert that its status and currency fields are correct:

/**
 * @aiq.servicesworkbench
 */
include('{ds}/shared/splunk.js');
splunk.init({
  host:  $SPLUNK_HOST,
  token: $SPLUNK_TOKEN,
});
var txnId = _retrieve('LAST_TXN_ID');  // value stored by an upstream test case
var rows = splunk.search(
  'index=payments txnId="' + txnId + '" | head 1',
  { earliest: '-10m' }
);
splunk.assertAtLeast(rows, 1, 'Transaction ' + txnId + ' must appear in Splunk');
splunk.assertFieldEquals(rows, 'status',   'APPROVED', 'Transaction must be APPROVED');
splunk.assertFieldEquals(rows, 'currency', 'USD',      'Currency must be USD');
log('✓ Transaction ' + txnId + ' validated — status=APPROVED, currency=USD');

Example 3 — No-error assertion after a critical flow

After running a checkout scenario, assert that no ERROR or FATAL entries were written to the application log index during the test window:

/**
 * @aiq.servicesworkbench
 */
include('{ds}/shared/splunk.js');
splunk.init({
  host:         $SPLUNK_HOST,
  token:        $SPLUNK_TOKEN,
  defaultIndex: 'app_logs',
});
splunk.assertNoErrors('app_logs', '-10m',
  'No ERROR or FATAL log entries expected after checkout flow'
);
log('✓ No errors found in Splunk after checkout flow');

Example 4 — Wait for an async event

Some flows write to Splunk with a delay (e.g. payment processors, message queues). Use waitForEvent to poll rather than failing immediately:

/**
 * @aiq.servicesworkbench
 */
include('{ds}/shared/splunk.js');
splunk.init({
  host:  $SPLUNK_HOST,
  token: $SPLUNK_TOKEN,
});
var txnId = _retrieve('LAST_TXN_ID');
// Poll every 3 seconds, up to 10 times (30s total)
var rows = splunk.waitForEvent(
  'index=payments event=PAYMENT_CONFIRMED txnId="' + txnId + '"',
  {
    earliest:    '-5m',
    pollMs:      3000,
    maxAttempts: 10
  }
);
splunk.assertFieldEquals(rows, 'processorCode', '00',
  'Processor must return approval code 00'
);
log('✓ Async payment confirmation found in Splunk');

Example 5 — Extract a value and store it in TheLocker

Retrieve a generated value from Splunk and make it available to downstream test cases:

/**
 * @aiq.servicesworkbench
 */
include('{ds}/shared/splunk.js');
splunk.init({
  host:  $SPLUNK_HOST,
  token: $SPLUNK_TOKEN,
});
var testUser = $TEST_USERNAME;
var rows = splunk.search(
  'index=sessions userId="' + testUser + '" | sort -_time | head 1',
  { earliest: '-5m' }
);
splunk.storeResult(rows, 'sessionId', 'SPLUNK_SESSION_ID');
// Downstream scripts: var sid = _retrieve('SPLUNK_SESSION_ID');
log('✓ Session ID extracted from Splunk and stored in TheLocker');

Example 6 — SPL aggregation: validate counts across all hosts

Use a | stats pipe to check that no host served 5xx errors on a specific endpoint:

/**
 * @aiq.servicesworkbench
 */
include('{ds}/shared/splunk.js');
splunk.init({
  host:  $SPLUNK_HOST,
  token: $SPLUNK_TOKEN,
});
var rows = splunk.search(
  'index=api endpoint="/checkout" | stats count(eval(status>=500)) as server_errors by host | where server_errors=0',
  { earliest: '-30m' }
);
log('✓ ' + rows.length + ' host(s) had zero 5xx errors on /checkout in the last 30 minutes');

Example 7 — getAllValues: check for unexpected HTTP status codes

Retrieve all HTTP status codes from recent API calls and fail if any 5xx appears:

/**
 * @aiq.servicesworkbench
 */
include('{ds}/shared/splunk.js');
splunk.init({
  host:  $SPLUNK_HOST,
  token: $SPLUNK_TOKEN,
});
var statuses = splunk.getAllValues(
  'index=api endpoint="/api/order" | head 200',
  'status',
  { earliest: '-5m' }
);
var badStatuses = statuses.filter(function(s) {
  return parseInt(s) >= 500;
});
assert(badStatuses.length === 0,
  'Found ' + badStatuses.length + ' 5xx response(s) on /api/order: ' + badStatuses.join(', ')
);
log('✓ All ' + statuses.length + ' /api/order responses were below 500');


Error handling

All library methods throw a descriptive error on failure. These surface directly in the AIQ test report with context including the HTTP status code, Splunk SID, field name, or assertion mismatch. No additional try/catch is required — let errors propagate so the scenario fails with a clear message.


Common issues

Symptom

Likely cause

Fix

HTTP 401 on job creation

Invalid or expired token

Regenerate the token in Splunk Settings → Tokens

Connection refused / timeout

TestNode cannot reach Splunk port 8089

Check EC2 security groups and firewall rules

assertAtLeast fails even though event exists

Log ingestion lag — event not yet indexed

Use splunk.waitForEvent() instead of splunk.search()

Search times out

Broad query or slow Splunk cluster

Narrow the SPL time window or add more filters; increase maxPollAttempts

Field not found error

Field name differs from what Splunk extracts

Run the same SPL in the Splunk UI and verify field names in the results table


Best practices

Integration with Datadog (APM)


Datadog is a supported third-party APM integration with AIQ. Datadog is an observability service for cloud-scale applications, providing monitoring of servers, databases, tools, and services, through a SaaS-based data analytics platform.

Datadog Setup

  1. Login to your Datadog Dashboard at: https://app.datadoghq.com/dashboard/
  2. Sign in with your credentials.
  3. Navigate to a dashboard that you want to integrate with AIQ and select the duration range using the Unix timestamps option as in 

    image.png
     4. Copy the URL of the dashboard. 

AIQ Setup

  1. Open AIQ.
  2. Navigate to Global Options > Preferences > APM Integrations.
  3. Select Datadog in the dropdown.
  4. Paste the URL of your DataDog Dashboard in the URL field.
  5. Create a name for the integration.
  6. Set the time to analyze along the execution. For example, 10 minutes will analyze 5 minutes before and 5 minutes after of a point selected in the execution.
  7. Click Save button.
  8. Confirm the integration is saved in the dropdown at the top left corner.

Test the Integration

  1. Log in to AIQ and go to the reports section. Look for a past scenario with logged detailed executions.
  2. Click Analyze link and select the Testcase Executions report in the drop down.image.png
  3. Click on one of the triangles in the graph to show the details of that execution. Remember the time that is shown. 
    Example: Datadog execution details at 4:11:59 PM.
    image.png
  4. Below the graph you will find a button with a label matching the name you gave to the APM integration. When you click this button it will open a new window with the DataDog report between the time specified in the APM integration settings.
    Example: 10 minutes, should show the report between 4:06pm and 4:16pm.
    image.png