Skip to content

Load Testing Tools

Category: Tools

The Azure Local Load Testing Framework includes five standalone load testing tools. Each tool targets a specific performance domain — storage, network, database, or system stress — and can be run independently from a management workstation with no CI/CD pipeline required.

Choosing a Tool

flowchart TD
    A[What do you need to test?] --> B{Storage I/O}
    A --> C{Network}
    A --> D{Database}
    A --> E{CPU / Memory / Burn-in}
    B -->|Windows HCI host\nFleet-scale| F[VMFleet]
    B -->|Linux VMs\nFine-grained control| G[fio]
    C --> H[iPerf3]
    D --> I[HammerDB]
    E --> J[stress-ng]

Tool Summary

Tool What It Tests Target OS Run From Status
VMFleet Storage IOPS, throughput, latency via DiskSpd VM fleet Windows (HCI host) PowerShell :white_check_mark: Fully Implemented
fio Storage I/O with fine-grained control (block size, queue depth, I/O engine) Linux VMs PowerShell + Ansible :construction: Structure Ready
iPerf3 Network bandwidth, jitter, packet loss between nodes Linux / Windows PowerShell :construction: Structure Ready
HammerDB SQL Server OLTP (TPC-C) and OLAP (TPC-H) benchmarking Windows VMs PowerShell :construction: Structure Ready
stress-ng CPU, memory, cache, and I/O stress for burn-in and capacity planning Linux VMs PowerShell + Ansible :construction: Structure Ready

Running a Test (Standalone)

Every tool follows the same three-step pattern. No pipeline or CI/CD setup is needed — just a PowerShell terminal on your management workstation.

Step 1 — Install the tool on target nodes

.\tools\<tool>\scripts\Install-<Tool>.ps1 `
    -ClusterName "hci01.corp.infiniteimprobability.com" `
    -Nodes @("hci01-node1", "hci01-node2")

Step 2 — Run a test with a workload profile

.\tools\<tool>\scripts\Start-<Tool>Test.ps1 `
    -ClusterName "hci01.corp.infiniteimprobability.com" `
    -Nodes @("hci01-node1", "hci01-node2") `
    -Profile "general"

Step 3 — Collect results

.\tools\<tool>\scripts\Collect-<Tool>Results.ps1 `
    -ClusterName "hci01.corp.infiniteimprobability.com" `
    -Nodes @("hci01-node1", "hci01-node2") `
    -RunId "<run-id-from-previous-step>"

Each tool page below has the exact commands with real parameters.

Common Lifecycle

All tools share the same eight-phase lifecycle. When running standalone, you execute each phase manually. The CI/CD pipelines automate this same sequence if you want to schedule or trigger runs automatically.

Phase What Happens Manual Command
Pre-Check Validate cluster connectivity and prerequisites Initialize-Environment.ps1
Install Deploy tool binaries to target nodes Install-<Tool>.ps1
Deploy Configure test environment (VMs, volumes, etc.) Deploy-<Tool>.ps1 (VMFleet only)
Test Execute workload profile Start-<Tool>Test.ps1
Monitor Collect PerfMon / Azure Monitor metrics (parallel) Watch-<Tool>Monitor.ps1
Collect Parse and aggregate raw results Collect-<Tool>Results.ps1
Report Generate PDF / DOCX / XLSX New-TestReport (ReportGenerator module)
Cleanup Remove test artefacts (optional) Remove-<Tool>.ps1

Automation (Optional)

If you want to automate test runs on a schedule or as part of a CI/CD workflow, see CI/CD Pipelines. The pipelines call the same scripts listed above — they are not a separate system.

Diagrams

Architecture and workflow diagrams are maintained as draw.io files in docs/assets/diagrams/ and exported as PNG images to docs/assets/images/ for documentation use.

Diagram Source Description
Solution Architecture solution-architecture.drawio End-to-end framework overview
VMFleet Workflow vmfleet-workflow.drawio VMFleet pipeline phases
Config Flow config-flow.drawio YAML → JSON configuration pipeline
CI/CD Pipeline ci-cd-pipeline.drawio GitHub Actions / Azure DevOps flow
Network Topology network-topology.drawio Cluster network paths for testing

Exporting Diagrams

To export updated PNGs from draw.io source files, the MkDocs drawio plugin handles this automatically during site builds. You can also export manually from draw.io desktop or VS Code extension.