Created
October 28, 2024 19:42
-
-
Save Victor1890/bb7e246bb5e533d4d54b39d59c82d211 to your computer and use it in GitHub Desktop.
I have created an automated script to perform a stress test on http requests.
This file contains hidden or bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
# Parameters for load testing (adjust as needed) | |
$duration = "30s" # Duration for the test | |
$concurrentConnections = 50 # Number of concurrent connections | |
$queryPerSecond = 10 # Queries per second | |
# Parameters for load testing (adjust as needed) | |
$duration = "30s" # Duration for the test | |
$concurrentConnections = 50 # Number of concurrent connections | |
$queryPerSecond = 10 # Queries per second | |
# Generate the log file name using the current timestamp | |
$currentDateTime = Get-Date | |
$second = $currentDateTime.ToString("yyyyMMddHHmmss") # Current timestamp in seconds (formatted) | |
# Get the current working directory | |
$currentDir = Get-Location | |
# Define the relative path for the log file | |
$relativeLogDir = Join-Path -Path $currentDir.Path -ChildPath "..\log\stress-test" | |
# Ensure the directory exists | |
if (-not (Test-Path -Path $relativeLogDir)) { | |
New-Item -ItemType Directory -Path $relativeLogDir -Force | Out-Null | |
Write-Output "Created directory: $relativeLogDir" | |
} | |
# Combine the relative directory with the log file name | |
$logFilePath = Join-Path -Path $relativeLogDir -ChildPath "$second.stress.log.txt" # Combine to form log file path | |
# Function to check if `oha` is installed and install it if not | |
function CheckOha { | |
# Check if `oha` command is available | |
if (!(Get-Command "oha" -ErrorAction SilentlyContinue)) { | |
Write-Output "`oha` command not found. Installing oha via winget..." | |
# Install `oha` using winget | |
winget install -e --id hatoo.oha | |
# Refresh the PATH in this session if oha was added | |
$env:Path = [System.Environment]::GetEnvironmentVariable("Path", [System.EnvironmentVariableTarget]::Machine) | |
Write-Output "Installation completed. `oha` is now available." | |
} | |
else { | |
Write-Output "`oha` is already installed." | |
} | |
} | |
CheckOha | |
# Define the list of requests to be executed | |
$requests = @( | |
@{ | |
URL = "http://127.0.0.1:4000/api/client/countries" | |
Method = "GET" | |
# Headers = "foo: bar" | |
# Query = "param1=value1¶m2=value2" | |
}, | |
@{ | |
URL = "http://127.0.0.1:4000/api/client/branch-offices" | |
Method = "GET" | |
# Headers = "foo: bar" | |
# Query = "param1=value1¶m2=value2" | |
}, | |
@{ | |
URL = "http://127.0.0.1:4000/api/client/additional-services" | |
Method = "GET" | |
# Headers = "foo: bar" | |
# Query = "param1=value1¶m2=value2" | |
} | |
# @{ | |
# URL = "http://localhost:4000" | |
# Method = "POST" | |
# Headers = "foo: bar" | |
# Body = @{ | |
# key = "1" | |
# nestedKey = @{ | |
# key1 = "value" | |
# } | |
# } # Nested JSON body as a PowerShell hashtable | |
# }, | |
# @{ | |
# URL = "http://localhost:4000" | |
# Method = "PUT" | |
# Headers = "foo: bar" | |
# Body = @{ | |
# updateKey = "newValue" | |
# anotherNestedKey = @{ | |
# subKey = "subValue" | |
# } | |
# } # Another nested JSON example | |
# } | |
) | |
# Loop through each request and execute using Oha | |
foreach ($request in $requests) { | |
$ohaCommand = "oha $($request.URL) -z $duration -c $concurrentConnections -q $queryPerSecond --latency-correction --disable-keepalive -m $($request.Method) -T application/json -j" | |
# Add specific arguments based on the HTTP method | |
if ($request.Method -eq "GET") { | |
if ($request.Query) { | |
# Append query string to the URL if provided | |
$ohaCommand = "oha `"$($request.URL)?$($request.Query)`" -n $numberOfRequests -c $concurrentConnections -m GET" | |
} | |
} | |
elseif ($request.Method -eq "POST" -or $request.Method -eq "PUT" -or $request.Method -eq "PATCH") { | |
if ($request.Body) { | |
$jsonBody = ($request.Body | ConvertTo-Json -Compress) -replace '"', '\"' | |
$ohaCommand += " -d `"$jsonBody`"" | |
} | |
} | |
else { | |
Write-Output "Unsupported HTTP method: $($request.Method)" | |
continue | |
} | |
if ($request.Headers) { | |
$ohaCommand += " -H `"$($request.Headers)`"" | |
} | |
# Display and execute the command | |
Write-Output "Executing: $ohaCommand" | |
Invoke-Expression $ohaCommand | |
# Execute the command and capture the output | |
$output = Invoke-Expression $ohaCommand | |
# Append the output to the log file | |
Add-Content -Path $logFilePath -Value $output | |
} |
Sign up for free
to join this conversation on GitHub.
Already have an account?
Sign in to comment