- Status
- illustrative
- Industry
- Cross-industry
- Language
- Python
- Framework
- Locust
- CI
- any
- Fulfilment
- BUILD_DATASET
- Profile
- edge-cases-core
About this example
All data is synthetic. DataNivra provisions approved test data into a customer-controlled target; it does not run these tests. Credentials for the target are never returned by DataNivra — your runner holds its own.
Why test data matters
Load tests need volume, but an unbounded request could exhaust a shared target.
What is requested
40,000 high-volume records (profile ceiling 50,000).
Policy gates
The profile's max_count and max_total_records are hard ceilings.
What is provisioned
A certified synthetic dataset.
Expected output
40,000: AUTO_APPROVED. 60,000: DENIED with COUNT_EXCEEDS_PROFILE_MAXIMUM.
Cleanup
Release after the load run (datanivra test-data release <id>).
Files
request.yamllocustfile.py
Run
- A tenant administrator defines and a second person approves the profile (
datanivra test-data define ../../profiles/edge-cases-core.yaml --submit, thendatanivra policies approve). datanivra test-data validate request.yaml && datanivra test-data plan request.yaml- Run the example with
DATANIVRA_BASE_URLand a session or workload token.
Files
Exactly as they are in the examples repository. Every value is a synthetic placeholder; nothing here is a credential.
request.yaml
# yaml-language-server: $schema=../../../../packages/contracts/schemas/v1/manifests/test-data-request.schema.json
# DataNivra test-data-request manifest (apiVersion datanivra.io/v1alpha1). Validate: datanivra test-data validate <file>
apiVersion: datanivra.io/v1alpha1
kind: TestDataRequest
metadata:
name: load-baseline
spec:
profile: { name: edge-cases-core, version: 1 }
scenarios:
- { scenario_code: CORE_HIGH_VOLUME, count: 40000 }
examples/test-data-api/scenarios/16-performance-volume-ceiling/request.yaml
locustfile.py
"""Performance volume with a hard ceiling: a Locust load script.
Acquire the data first with the CLI, then run Locust against *your application* (not DataNivra):
ID=$(datanivra test-data request request.yaml --wait -o json | jq -r .id)
locust -f locustfile.py --headless -u 20 -r 5 -t 5m --host https://app.example.test
datanivra test-data release "$ID" --reason-code LOAD_TEST_FINISHED
DataNivra provisions the volume; Locust generates the load. All data is synthetic.
"""
from locust import HttpUser, between, task
class OrdersReader(HttpUser):
"""Reads pages of the provisioned synthetic orders; a slow page counts as a failure."""
wait_time = between(0.1, 0.5)
@task
def list_orders(self) -> None:
with self.client.get("/orders?limit=100", catch_response=True) as res:
if res.status_code != 200:
res.failure(f"status {res.status_code}")
elif res.elapsed.total_seconds() > 0.5:
res.failure("slower than 500 ms")
examples/test-data-api/scenarios/16-performance-volume-ceiling/locustfile.py
The profile it uses: edge-cases-core
A tenant administrator defines this profile and a second person approves it; requests can only ask for what it allows. All profiles
edge-cases-core.yaml
# yaml-language-server: $schema=../../../packages/contracts/schemas/v1/manifests/test-data-profile.schema.json
# DataNivra test-data-profile manifest (apiVersion datanivra.io/v1alpha1). Validate: datanivra test-data validate <file>
# Placeholder ids (00000000-0000-4000-8000-0000000000NN): replace with your ids.
# 01 = approved target environment, 11 = certified dataset, 21 = customer agent,
# 99 = workload identity trust (datanivra workload-identities list).
apiVersion: datanivra.io/v1alpha1
kind: TestDataProfile
metadata:
name: edge-cases-core
description: Core synthetic edge cases (no industry pack)
spec:
fulfilment: BUILD_DATASET
build:
business_domain: generic records
dataset_kind: SYNTHETIC_ONLY
target_environment_id: 00000000-0000-4000-8000-000000000001
retention_days: 1
max_total_records: 50000
scenarios:
- { scenario_code: CORE_NORMAL, kind: NORMAL, default_count: 200, max_count: 1000 }
- { scenario_code: CORE_BOUNDARY, kind: BOUNDARY, default_count: 100, max_count: 500 }
- {
scenario_code: CORE_TEMPORAL_SEQUENCE,
kind: TEMPORAL_SEQUENCE,
default_count: 100,
max_count: 500,
included_by_default: false,
}
- {
scenario_code: CORE_NULL_HEAVY,
kind: NULL_HEAVY,
default_count: 50,
max_count: 200,
included_by_default: false,
}
- {
scenario_code: CORE_INVALID,
kind: INVALID,
default_count: 50,
max_count: 200,
included_by_default: false,
}
- {
scenario_code: CORE_DUPLICATE,
kind: DUPLICATE,
default_count: 50,
max_count: 200,
included_by_default: false,
}
- {
scenario_code: CORE_HIGH_VOLUME,
kind: HIGH_VOLUME,
default_count: 1000,
max_count: 50000,
included_by_default: false,
}