2.11 - Operational Test Data with DPLs
Operational Test Data with DPLs — Appvance IQ documentation.
Operational Test Data with DPLs
Contents
Appvance DPL Types
Configuring Appvance DPLs
Providing Data to Distributed Tests
Dynamic DPL
Array Generator DPL
WhiteBoard DPL
Scenario Wide DPL
Hash DPL
JavaScript DPL
Using the DPLs
Communication Intra-Steps Using TheLocker
The RSC Resource
Creating Your Own DPL
Specific Types of DPLs
DPL Usage with Appvance Designer Script
Synthetic DPL
Encrypt/Decrypt DPL
Operation Test Data FAQ
Appvance IQ's Data Production Library (DPL) is a powerful system to deliver data to tests at runtime. For instance, a test of an online registration service stores name and password values in a database and uses a DPL to access the database as the test operates. In a second instance, a test of a reporting service uses a DPL to access a comma-separated-value (CSV) file of acceptable responses to validate service responses.
Software developers, QA technicians, and IT managers with a variety of technical skills use Appvance IQ. It is important to provide DPLs that are ready to use and require no programming skills. But also offer a framework for building your own DPLs. Appvance Unified Test
Appvance IQ (AIQ) Data Product Libraries (DPLs) delivers operational data to tests at test run-time. For instance, a recorded Appvance Designer Script or Selenium test of a Web-based log-in page retrieves the user name and password values from a comma-separated value (CSV) data file as AIQ executes the test. Tests can use DPL provided data not only as input values but also to validate the application's function.
The AIQ DPL system provides a simple and easy way to data-enabled tests. A DPL does not require programming or scripting.
Last updated: April 11, 2024
If you have any feedback on this topic, please contact us at documentation@appvance.ai
AIQ DPL Types
Recommended guidance
DPLs provide operational test data for AIQ scenarios and services. Choose the DPL type based on data ownership, repeatability, volume, security, and whether values are static, generated, or retrieved from an external system.
Common DPL considerations
Static data for repeatable regression tests.
CSV or file-backed data for controlled row-based execution.
Dynamic or generated data for unique values per run.
Service-backed data when the test needs values from an API or system of record.
Secure handling for credentials, personal data, or customer-sensitive values.
Selection checklist
Define whether the scenario needs unique, reusable, random, or environment-specific data.
Confirm how data is reset or cleaned up after execution.
Document which scenario steps consume each DPL value.
Do not store secrets or production customer data in unsecured DPL sources.
Last updated: October 6, 2026
Configuring Appvance DPLs
AIQ 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 the sense that it can get data 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. AIQ comes with pre-built DPLs and makes it easy for software developers to add their own custom DPLs.
DPLs work in conjunction with script runners at test runtime. Test scenarios define the DPL and script runner interaction. The AIQ Tutorials give instructions on using the pre-built DPLs.
AIQ users configure Test Use Cases in the Appvance Scenario Builder to use operational test data from a DPL. To see this in action follow these steps:
Start AIQ
Click Build from the Start Screen. The Scenario Builder opens with a blank page.
Click File, then New to create a new empty scenario. AIQ sets the default name of the new scenario to New-Scenario.
In the Info tab, which is opened by default, select Functional Test for this example.
Click the Resources tab.
Click Add Data Source.
Choose "HashDPL - Reads CSV" in the DPL Type drop-down menu.
Click Browse to select a CSV data file.
Provide a name for the DPL in the Name box.
Click Test Cases on the left-hand side.
Under Iteration Name: Iteration 1, click Add a Test Case Execution
Provide a Test Case Name at the top of the pop-up window.
Select Type Selenium, provide a Script Name and then click Browse to find your appropriate Selenese file.
Click Add DPL and under Select DPL choose the DPL you created earlier.
Choose Get Next Row of Data from the Actions menu.
Provide a name for the DPL action and then click Save at the top.
Click File at the top and then Save and choose a location to save the Test Scenario
This configuration tells the AIQ Selenium script runner to look into the Selenium test and replaces values in the test with values from the data.csv file.
The DPL provides data from the data.csv file as A IQ runs the Selenium script, at test run time.
The DPL uses the first row in the CSV file to identify field mapping names. Insert these mapping names into the Selenium file where you want AIQ to inject the test data from the CSV file.
After the mapping name row comes the rows of the data file containing the actual data. The DPL Action determines the row of data AIQ provides to the test.
In a load test, setting the DPL Action to Get Next Row of Data tells AIQ to advance to the next row of data.
When the DPL reaches the bottom of the table, the DPL starts at the top.
The Selenium, SoapUI, and Command-Line script runners provide support for data mapping from DPLs.
Script runners for Appvance Designer Script, Java, Jython, JRuby, VB, .NET, Groovy, and the other support scripting languages receive DPL data in a dictionary structure (map).
For TestNG engine to work with DPLs, it is necessary to need to define the @DataProvider annotation inside the TestNG, an AIQ will override that method providing the DPL values as arguments for the @Test method:
public class TestNG {
@DataProvider(name = "DPLDataProvider")
public Object[][] ValidDataProvider3() throws Exception {
return new Object[][] {
{'C', 65}, {'c', 97},
{'D', 66}, {'d', 98}
};
}
@Test(dataProvider = "DPLDataProvider")
public void basicTest(final char character, final int ascii) throws Exception {
System.out.println("character " + character + " ascii " + ascii);
}
}
In this case, you need to use CSV DPL in your Scenario. AIQ will do the casting of the arguments to the ones expected in the @Test method.
If you want to use HashMap instead (sending arguments as map dictionaries) then you need to add an AIQ provided annotation @TestNGParams (tools.jar):
public class TestNG {
@DataProvider(name = "DPLDataProvider")
public Object[][] ValidDataProvider3() throws Exception {
return new Object[][] {
{'C', 65}, {'c', 97},
{'D', 66}, {'d', 98}
};
}
@Test(dataProvider = "DPLDataProvider")
@TestNGParams(params = {"character","ascii"})
public void basicTest(final char character, final int ascii) throws Exception {
System.out.println("character " + character + " ascii " + ascii);
}
}
DPLs have the ability to share data from one test to the next. For example, TheLocker DPL takes the results from a test step authored in SoapUI as input to a second test step authored in Appvance Designer Script.
SoapUI support was removed in release 5.2.0 of AIQ.
The above example shows how to use data from a CSV file. DPLs work in the same way with data from a Relational Database (RDBMS DPL, RDBMS Map DPL) and other data-generating objects.
Last updated: July 25, 2024
If you have any feedback on this topic, please contact us at documentation@appvance.ai
Providing Data to Distributed Tests
AIQ is a distributed test system. Multiple virtual users run in a TestNode and tests run across one or more TestNodes. Tests often need unique data for each virtual user. For example, a test of a banking system needs a separate and unique customer number for each virtual user running in the test. AIQ offers 3 solutions to meet your testing needs.
Common Test Data, No Coordination
AIQ's CSV DPL sends a copy of a single CSV file to each TestNode running a test. Each virtual user uses data in the CSV file. Within a TestNode each user shares the CSV file and shares a single pointer to the row of data in the CSV file.
CSV files are distributed to each TestNode
To use this configuration, use the Appvance Scenario Builder to configure a Test Use Case that uses a CSV DPL /Hash DPL. Set the DPL Action setting to Get Next Row of Data. When you run the test AIQ will send a copy of the defined CSV file to each TestNode. AIQ creates a single DPL for all virtual users in the TestNode. The DPL has a raw pointer. The pointer is initially set to the first row of data. The DPL reads the first row of data and injects the data fields into the test script. The DPL moves the pointer to the next row of data. At the last row of data, the DPL moves the pointer to the first row of data.
Unique Provided Data
Many times the test architecture requires each virtual user to use unique data. For example, when testing a banking system each virtual user needs to log in to the banking application using its own user-id and password. AIQ provides the Unique DPL to provide each virtual user's DPL with its own data. The data comes from a single CSV file. Each virtual user uses its local DPL to communicate over a TCP/IP request to a single Unique DPL service. The Unique DPL reads from a single CSV file.
Unique data is distributed to each virtual user
The communication overhead for Unique DPL is minimal. Appvance staged tests up to 100,000 virtual users and observed less than 1% network bandwidth overhead and less than 20-millisecond wait times when using UniqueDPL.
Running a Unique DPL scenario using a CSV file which has duplicate rows
Consider the following scenario to understand the unique DPL functionality.
Suppose the user is creating an Appvance Designer script with DPL enabled. The created DPL contains duplicate values for the field that was data enabled and considers the scenario for 2 executions and 2 users and it should have multiple test Nodes. The Unique DPL works in such a way that it will not validate whether the CSV file has repeated rows or not, that is, it does not check for the content of the rows. In AIQ, the Unique DPL functionality is that it will make sure that among all running users in all running TestNodes in a single execution, each row of the CSV data file will be used only once until all rows available in the DPL are used.
Note: Please make sure the CSV file has unique data rather than duplicated rows.
Transactional Data Provided To Each Virtual User
AIQ's RDBMS DPL enables tests to receive operational test data from a relational database. For example, configure a MySQL instance to serve transactional data to the virtual users. One Appvance customer stored invoice data for a test of an Enterprise Resource Planning (ERP) system. A stored procedure (StoredProc) in MySQL provides invoice data to the virtual users, including part numbers, part costs, quantities, and shipping details. The StoredProc enables each virtual user to receive its own unique data from the common data store.
Transactional data is distributed to each virtual user
The above example showed how to use data from a CSV file. DPLs work in the same way with data from a Relational Database (RDBMS) and other data-generating objects. See the DPL Recipes section for details.
If you have any feedback on this topic, please contact us at documentation@appvance.ai
Configure Dynamic DPL Data
Configure Dynamic DPL Data
Use a Dynamic DPL when a Scenario Editor test needs generated values at runtime, such as random numbers, generated strings, timestamps, or values within a defined range. Dynamic DPLs are useful when the test data does not need to come from a fixed file or database source.
When to use it
Generate unique values during each execution.
Avoid hard-coded test data in Scenario Editor steps.
Keep data rules in one reusable DPL instead of duplicating logic across scenarios.
Implementation notes
Define the dynamic data rule in the DPL configuration.
Map the DPL output to the Scenario Editor input that needs the generated value.
Run a short validation execution and confirm the generated values appear in the output or reports.
Keep generated values within realistic ranges for the application under test. If a test requires a stable, repeatable data set, use a static source DPL instead.
Last updated: September 18, 2026
Array Generator DPL (Test Scenario, Functional Test)
To run Java code with array arguments in Appvance, use the Array Generator DPL. To execute Java code that has a
main method in Scenario Builder, select the Array Generator DPL type and
String[] from the Actions dropdown. Add the argument name and pass a value by clicking the Add Val link.
The main method receives the array from the generator.
With the Array Generator DPL, you can send an array of values as a single parameter containing multiple entries, for example a String array:
[ "string1", "string2", "string3" ]
This allows you to provide an input parameter for a method that requires an array-like parameter:
public void myMethod(String[] args) {
}
You can also use Object arrays. Example:
[
{ name: 'Honda', models: [
{ name: 'Accord', features: ['2dr', '4dr'] },
{ name: 'CRV', features: ['2dr', 'Hatchback'] },
{ name: 'Pilot', features: ['base', 'superDuper'] }
] },
{ name: 'Toyota', models: [
{ name: 'Prius', features: ['green', 'superGreen'] },
{ name: 'Camry', features: ['sporty', 'square'] },
{ name: 'Corolla', features: ['cheap', 'superFly'] }
] }
]
Types available for arrays:
Object,
String,
Integer,
int,
Byte,
byte,
Double,
double,
Short,
short,
Float,
float,
Character,
Boolean.
Sample Java Code with an int Array
package com.package1;
import java.util.Arrays;
public class Array {
public static void main(String[] args) throws Exception {
}
public void printArray(String message, int array[]) {
Arrays.sort(array);
System.out.println(message + ": [length: " + array.length + "]");
for (int i = 0; i < array.length; i++) {
if (i != 0) {
System.out.print(", ");
}
System.out.print(array[i]);
}
System.out.println();
int index = Arrays.binarySearch(array, 2);
System.out.println("Found 2 @ " + index);
}
}
Create a .jar file from the Java code above. Go to Scenario Builder and select the Functional Test test type. Add a test case using the Java Test type and browse to the
.jar file you created. The code above takes two arguments: the first is a
String, and the second is an
int array. Pass the arguments in the same order in Appvance so the scenario runs successfully.
Two arguments using array generator
Set the log level to 100% in the Options panel. Save and play the scenario in a Controller window.
Output:
Two arguments using array generator
If you have any feedback on this topic, please contact us at documentation@appvance.ai
WhiteBoard DPL Usage in AIQ
Last reviewed: September 29, 2026
Use this article when test data must be shared or manipulated through a WhiteBoard DPL workflow.
What changed in this article
Updated the title casing and tied the article to Operational Test Data/DPL usage.
Added guidance on when WhiteBoard DPL is appropriate versus CSV, Dynamic DPL, or JavaScript DPL.
Added validation checks for generated rows, shared state, cleanup, and repeatability across iterations.
Validation workflow
Confirm the test needs WhiteBoard-style shared or generated data rather than a static CSV.
Validate produced values across multiple iterations and users.
Confirm cleanup or reset behavior before using the DPL in a repeatable test run.
Review note: Clarified the DPL use case so WhiteBoard DPL is not chosen when a simpler data source would work.
Last updated: September 29, 2026
If you have feedback on this topic, contact documentation@appvance.ai.
Use Scenario-Wide DPL Data
Last reviewed: September 30, 2026
Use this article when a Scenario Editor test needs one DPL data source available across multiple steps or actions in the same scenario.
What changed in this article
Normalized the title and explained scenario-wide DPL scope in current Scenario Editor terms.
Added guidance for choosing scenario-wide DPLs versus step-specific data when values must be reused across the run.
Added checks for row selection, iteration behavior, missing values, concurrency, and sensitive data handling.
Validation workflow
Choose scenario-wide DPL only when multiple steps need the same data context.
Validate row selection and iteration behavior with a small run before scaling.
Confirm logs and reports expose enough row context for debugging without exposing sensitive values.
Review note: This page now differentiates shared scenario data from one-off step data.
Last updated: September 30, 2026
If you have feedback on this topic, contact documentation@appvance.ai.
Use Hash DPL Data in Scenario Editor Tests
Last reviewed: September 30, 2026
Use this article when a Scenario Editor test needs key-value style test data supplied through a Hash DPL.
What changed in this article
Replaced terse Hash DPL wording with Scenario Editor-focused data guidance.
Clarified when a Hash DPL is appropriate: lookup tables, keyed records, expected values, and reusable test configuration.
Added validation checks for key uniqueness, missing keys, data refresh, sensitive values, and deterministic replay.
Validation workflow
Define the key field and confirm every required test case has a matching value.
Reference the Hash DPL from the Scenario Editor test and validate both a matching-key and a missing-key case.
Keep sensitive values out of plain test data or mask them before logging results.
Review note: This update keeps Hash DPL guidance practical without turning it into a generic data-storage page.
Last updated: September 30, 2026
If you have feedback on this topic, contact documentation@appvance.ai.
Configure JavaScript DPL Data
Configure JavaScript DPL Data
Use a JavaScript DPL when test data needs lightweight transformation before it is consumed by a Scenario Editor test. Keep the script focused on data preparation; avoid placing test flow, browser automation, credentials, or environment-specific paths in the DPL.
Recommended use
Normalize or format values before sending them to the application under test.
Combine fields from an approved data source into a value required by a step.
Generate simple derived values that are safe to calculate at runtime.
Validation checklist
Confirm the JavaScript returns the expected value for a small sample.
Handle empty or malformed input values predictably.
Verify the DPL mapping in a short Scenario Editor execution before scaling the test.
Do not embed secrets in the DPL script. Store credentials and environment-specific settings in approved configuration locations.
Last updated: September 18, 2026
Use DPL Data Sources in AIQ
Use DPL Data Sources in AIQ
DPLs provide reusable data to AIQ tests. They keep test data and data-generation rules separate from Scenario Editor steps so scenarios remain easier to maintain.
Basic workflow
Create or select the DPL that represents the required data source or generated data rule.
Map the needed DPL fields to the Scenario Editor inputs.
Choose the execution behavior, such as using the next available row or reusing a value.
Run a short validation execution and review the output before using the DPL in a larger run.
Good practices
Use clear field names that match the business meaning of the data.
Keep credentials and environment-specific values out of the DPL article and scenario content.
Document data assumptions, such as required formats, uniqueness, and reset behavior.
Last updated: September 18, 2026
Communication Intra-Steps Using TheLocker
Appvance IQ’s architecture allows you to integrate different testing tools and technologies into one single orchestration framework. Each one of these tools and technologies works independently, leaving some gaps that won’t let them work as a team with other tools. One gap Appvance IQ fills is the external data-driven testing, achieved with the DPLs. The other gap is the actual communication between tools. That is achieved with a special DPL called TheLocker.
By default, all DPLs are read-only. That means you can use them to obtain dynamic data, but not to push data to them. When orchestrating, one test step (performed using one tool, let’s say soapUI) may generate data that can be used as input to the next step (say a verification on a web page using Selenium). To communicate these two steps, one solution will be to have one DPL that allows step 1 to push its results into a named “space” where step 2 can read it later on. This is what TheLocker does.
TheLocker metaphor is a simple one. Any tool or step can request a locker space, name it and store any kind of data in it. The subsequent steps are able to retrieve that data using the name of the space. An example may help to understand the concept better.
The first step, as with all the DPLs, is to create an instance of TheLocker: