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

Last reviewed: September 29, 2026

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

What changed in this article

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.

Review note: The page now describes Bitbucket repository setup instead of acting like a placeholder page.


Last updated: September 29, 2026

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

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.

  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

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.

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


Last updated: June 02, 2023

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

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

Last reviewed: September 25, 2026

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

What changed in this article

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.

Review note: Kept the article as operational guidance but added security guardrails around firewall changes.


Last updated: September 25, 2026

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

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: June 02, 2023

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

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.



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



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: June 26, 2023

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: June 02, 2023

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

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: June 02, 2023

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

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 AWS Instance Types for AIQ

Choose AWS instance types for AIQ based on the role of the host, expected workload, browser or API execution volume, storage needs, and monitoring results. Instance-type guidance can become outdated as AWS offerings and AIQ requirements change.

Selection factors

Validation workflow

  1. Start from the current AIQ system requirements and cloud architecture guidance.
  2. Run representative smoke and load tests on the chosen instance family.
  3. Monitor CPU, memory, disk, network, and browser stability.
  4. Resize based on evidence instead of copying old environment sizes blindly.

Last updated: October 6, 2026

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:

Check marked values:

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

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: June 26, 2023

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

Amazon AWS

AWS WorkSpace and Google Chrome

AWS WorkSpace is a cloud-based virtual desktop infrastructure (VDI) solution that allows users to access their desktop applications and data from any device with internet access.

There are considerations for third-party cookies and policy settings when using Amazon WorkSpace and AIQ.

Enabling Third-party Cookies

AIQ requires third-party cookies are enabled in the web browser being used for testing. Enabling third-party cookies is vital for AIQ tests because it allows the web browser to store and retrieve cookies from domains other than the one being visited. This is important because many websites rely on third-party cookies for tracking, advertising, and authentication purposes. Without the ability to access these cookies, AIQ tests may not be able to accurately simulate user behavior on the website being tested.

For example, suppose you are testing a website that uses a third-party authentication provider to log users in. If third-party cookies are not enabled, the browser will not be able to store the authentication cookie from the provider, and the login process may fail. Similarly, if a website relies on third-party tracking cookies to track user behavior, a test that does not enable third-party cookies may not accurately simulate user behavior and may produce incorrect results.

Here are some specific details why third-party cookies need to be enabled on the browsers that are used to record test scenarios for AIQ:

Chrome Policies

Using Amazon WorkSpaces supports the use of Google Chrome as a web browser, and there are several policies that can be enforced on Google Chrome.

Here are some of the policies that can be applied to Google Chrome in Amazon WorkSpaces:

For more information on Chrome polices and Amazon WorkSpace see the Amazon AWS documentation at: target="_blank">https://docs.aws.amazon.com/workspaces-web/latest/adminguide/browser-policies.html.

Inspecting Chrome Policies

If you want to verify the current policies applied to the browser installed on the workspace, there are two methods to export the polies so they can be shared or studied.

Exporting Chrome Polies to a Text File

  1. Open a new tab in the Chrome browser.

  2. In the address bar, type "chrome://policy" and press Enter.

  3. You should now see a list of policies that are currently applied to the Chrome browser. These policies will include both user and system policies that have been configured by your IT administrator.

  4. To copy the policies, you can simply select the text on the page and copy it to your clipboard using the Ctrl+C (Windows) or Command+C (Mac) keyboard shortcut.

  5. Once you have copied the policies to your clipboard, you can paste them into a text editor or other application for further analysis or sharing with your IT administrator.

Exporting Chrome Policies to a JSON File

To save Chrome policies to a JSON file in Amazon WorkSpaces, you can follow these steps:

  1. Log in to the AWS Management Console and navigate to the Amazon WorkSpaces console.

  2. Select the WorkSpaces directory that has the Chrome policies you want to export.

  3. Click the Group Policy tab, and then click the name of the group policy that contains the Chrome policies you want to export.

  4. Click on Edit button next to the "Chrome Policies" section.

  5. In the Chrome policies editor, click Download button at the top of the editor window.

  6. Choose a location on your computer where you want to save the JSON file, and then click Save.

  7. The Chrome policies will be saved to a JSON file that you can use to import the policies into another Amazon WorkSpaces directory or share with other IT administrators.


Last updated: April 19, 2023

If you have any feedback on this topic, please contact us at 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: June 02, 2023

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

Atlassian Jira

Configure AIQ Jira Cloud Integration

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

Last reviewed: September 29, 2026

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

What changed in this article

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.

Review note: The page now clearly scopes Jira Server/Data Center and avoids mixing it with Jira Cloud token workflows.


Last updated: September 29, 2026

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

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.

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

  2. Once the project has been created, Click Crete Plan

  3. Create a new Test Plan in Bamboo and fill out all the required field

  4. Click any Repository options and click Configure plan. (Ex:- Git)

  5. Configure the Job

  6. Add the Ant Task by Clicking Add Task

  7. Search Ant in Search Bar

  8. Create a new Task in Bamboo and fill out all the required fields

  9. Once the Task is created Click Projects and click the Created Project

  10. Enable the Plan by clicking Edit and Click Actions > Enable Plan

  11. Run the Plan by Clicking Run > Run Plan

  12. View the Build Result Summary


Last updated: June 02, 2023

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

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.


Last updated: June 02, 2023

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

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.


Last updated: June 02, 2023

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

Governing Services

Legacy SoftwareAG X-Registry Integration Reference

Last reviewed: September 28, 2026

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.

What changed in this article

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.

Review note: The original article described a proof of concept with SendSMS, PAAS, GSRS, and X-Registry screenshots. It is now scoped as legacy reference material.


Last updated: September 28, 2026

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

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.

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;

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

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)

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

Example implementation

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

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

The corresponding Web service result values are:

Web Service Result Values

Governance Statistics ResultSet (GSRS)

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

A sample GSRS response:


Last updated: June 02, 2023

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

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.


Last updated: June 02, 2023

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

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.

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.

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.


Last updated: June 02, 2023

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

Glass Box

Glassbox Features and Benefits


Last updated: April 14, 2023

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

Glass Box

Legacy Glassbox Installation Reference

Last reviewed: September 25, 2026

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

What changed in this article

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.

Review note: Flagged the article as legacy to prevent it from being treated as standard integration guidance.


Last updated: September 25, 2026

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

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 make the following resources available:

Glassbox Web Site

Glassbox User Guide (Adopt Acrobat PDF format)


Last updated: April 14, 2023

If you have any feedback on this topic, please contact us at 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.

  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

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!


Last updated: June 26, 2023

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

  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.

    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

    1. @= %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.

    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.


Last updated: June 26, 2023

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.

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.

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:

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: June 26, 2023

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:

After adding description:


Last updated: June 26, 2023

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:


Last updated: April 28, 2023

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

Jenkins

Jenkins File Reference for AIQ Integrations

Last reviewed: September 24, 2026

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

What changed in this article

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.

Review note: Made the article a file-purpose reference instead of a loose Jenkins note, so it fits with the Jenkins integration pages.


Last updated: September 24, 2026

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

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

  2. Click on New Item from the left navigation

  3. Provide a valid Job name

  4. Select “Build a free-style software project”

  5. Click on the OK button

  6. Provide a description of the project

  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

  8. Mention the branch details from the files that reside

  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

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


Last updated: June 02, 2023

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

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 Blueprints from Jenkins

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

blueprintDashboard 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 Blueprint 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.


Last updated: April 28, 2023

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

Jenkins

Configure a Parameterized Jenkins Project for AIQ

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.


Last updated: June 01, 2023

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

  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.


Last updated: April 28, 2023

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

  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

  11. Click Advanced button below SMTP Port

  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.

  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


  17. Under Editable Email notification add

  18. “Email id” under Project From

  19. Other field are by-default filled

  20. Click Advance settings

  21. All the field are are by-default filled

  22. Click Add trigger under Triggers

  23. Select Always (User can change as per requirement)

  24. Click Advanced under Triggers

  25. Add Recipient Mail id under Recipient List

  26. Click Save and Apply

  27. Recipient user will start getting Email Notifications


Last updated: June 02, 2023

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

JMeter Integration and Testing

JMeter Integration and Testing

JMeter Integration and Testing

Contents:

JMeter Integration and Testing

Run JMeter Scripts in AIQ

Run JMeter scripts in AIQ when a JMeter asset is already part of the performance or protocol-testing workflow. Confirm that the script, data, plugins, and environment are suitable for repeatable execution before adding it to automated runs.

Pre-run checklist

Validation workflow

  1. Run the JMeter script locally or in a controlled environment first.
  2. Run a low-load AIQ execution before scaling.
  3. Review logs, assertions, response data, and generated reports.
  4. Separate JMeter script issues from application and load-generator bottlenecks.

Last updated: October 7, 2026

JMeter Integration and Testing

Correlation in JMeter for AIQ Tests

Last reviewed: September 22, 2026

Use correlation in JMeter when dynamic values from one response must be captured and reused in later requests during AIQ executions.

Validation workflow

  1. Record or inspect the request sequence and find dynamic values.
  2. Add the appropriate JMeter extractor for each value.
  3. Reference extracted variables in downstream requests.
  4. Run a single-user debug execution and confirm values update each iteration.
  5. Scale gradually and monitor errors that indicate missed correlation.

Note: Missed correlation is a common cause of false failures in performance tests.


Last updated: September 22, 2026

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

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

    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

    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

    Once the above setting is done the script is data enabled successfully. Run the script and check in the results tree

    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

    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

    Save the scenario and run the test.

    Check the controller page and verify if the data is getting pulled from the CSV

    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.

    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.


Last updated: June 26, 2023

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

  1. 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

      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.

      Please find below the detailed description of the parameters used

      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.

      File downloaded after running the scenario from Appvance IQ

  2. 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

      Navigates to Test case tab and selects Test type as "Jmeter" and attaches the Jmeter script which ran successfully in Jmeter

      User now saves the scenario and runs the tests and navigates to Test Controller screen and verifies the output

      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.

      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

  3. 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.

  4. 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

  5. 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

  6. 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

  7. 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: June 26, 2023

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

Last reviewed: October 2, 2026

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

What changed in this article

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.

Review note: This page now supports practical integration decisions instead of generic architecture language.


Last updated: October 2, 2026

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

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

Last reviewed: September 30, 2026

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

What changed in this article

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.

Review note: This article now acts as planning guidance instead of a generic data-driven testing overview.


Last updated: September 30, 2026

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

Selenium

Legacy Selenium IDE Import Reference

Last reviewed: September 28, 2026

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

What changed in this article

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.

Review note: This page now positions Selenium IDE as migration/reference content, not recommended new automation authoring.


Last updated: September 28, 2026

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

Selenium

Review Selenium Commands and Results in AIQ

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.

What changed in this article

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.

Review note: This FAQ now complements the Selenium integration reference instead of duplicating generic Selenium content.


Last updated: October 2, 2026

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

Continous Integration

Continous Integration

Continous Integration

Configuring Bamboo, Hudson, Jenkins, and AIQ

Operate AIQ tests from Continuous Integration environments. Appvance checks AIQ compatibility with Hudson, Bamboo, and Jenkins.

Product Version Details


Last updated: April 14, 2023

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

Continous Integration

Legacy Hudson Integration Reference

Legacy Hudson Integration Reference

Last reviewed: September 21, 2026

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

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

Continous Integration

Legacy Team Foundation Server Integration Reference

Last reviewed: September 30, 2026

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.

What changed in this article

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.

Review note: This page is now clearly labeled as legacy rather than current default integration guidance.


Last updated: September 30, 2026

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

Continous Integration

Run AIQ Tests from the Command Line

Run AIQ Tests from the Command Line

Last reviewed: September 21, 2026

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

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

Continous Integration

CICD - TeamCity Integration

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

TeamCity can be downloaded from this location

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: June 26, 2023

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

    • 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

  6. Once the build is successfully run, go to AIQ > Preferences > Repository

  7. Click Explore Repository

  8. Look for the folder called reports

  9. Click Reports> Products > main.html to have the dashboards created


Last updated: June 26, 2023

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

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

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}" />



Last updated: June 26, 2023

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

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

Last reviewed: September 21, 2026

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

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

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

Run SoapUI as a Performance Test in AIQ

Use SoapUI for performance testing only when the SoapUI project is thread-safe, data-ready, and still required by the customer workflow. For new API performance tests, evaluate Service Suite or native AIQ performance assets first.

Performance checks

Validation workflow

  1. Run one thread first and verify assertions and cleanup.
  2. Increase concurrency gradually while monitoring AIQ and the target system.
  3. Review whether bottlenecks come from SoapUI, the load generator, or the application.
  4. Document results and any migration plan away from legacy SoapUI assets.

Last updated: October 7, 2026

SoapUI Integration

Run Data-Enabled SoapUI Tests in AIQ

Run data-enabled SoapUI tests in AIQ only when the SoapUI asset remains required. For new API automation, consider whether Service Suite and DPLs can provide the same coverage with fewer legacy dependencies.

Before running

Validation workflow

  1. Run the SoapUI project with a small sample outside AIQ.
  2. Run the AIQ wrapper with the same sample.
  3. Review failures for malformed data, exhausted rows, endpoint issues, or assertion defects.
  4. Document migration options if Service Suite can replace the SoapUI dependency.

Last updated: October 7, 2026

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