172 lines
6.4 KiB
PowerShell
172 lines
6.4 KiB
PowerShell
function Invoke-WebTests {
|
|
<#
|
|
.SYNOPSIS
|
|
Helper function that wraps Start-WebTests and sets up the variables needed for Start-WebTests.
|
|
|
|
.DESCRIPTION
|
|
This is intended to be used from a TeamCity agent as it uses Invoke-Command -Script {Start-WebTests}
|
|
which are to be run on each web-tier server.
|
|
|
|
.PARAMETER Servers
|
|
String CSV of servers to run the Start-WebTests on.
|
|
|
|
.PARAMETER AwsProfile
|
|
Aws Profile to use for S3 bucket.
|
|
|
|
.PARAMETER EnvironmentType
|
|
Which environment (dev, prod) to run the tests on. Uses different URLs based on environmentType.
|
|
|
|
.PARAMETER SitesToSkip
|
|
A list of sites to skip web tests on. Http/https will be trimmed
|
|
|
|
.PARAMETER SkipWidgetWarmup
|
|
Bool to skip warming up the widgets with a throw-away http request to all configured widgets on a site.
|
|
Defaults to true (skip widget warmup).
|
|
|
|
.NOTES
|
|
Keeps track of all the tests and will return bool if they all pass or any fail.
|
|
return $PassedAllTests
|
|
#>
|
|
[cmdletbinding()]
|
|
[OutputType([System.Boolean])]
|
|
param(
|
|
[Parameter(Mandatory = $true)]
|
|
[string[]]$Servers,
|
|
[Parameter(Mandatory = $false)]
|
|
[string]$AwsProfile,
|
|
[Parameter(Mandatory = $false)]
|
|
[string[]]$SitesToSkip,
|
|
[Parameter(Mandatory = $false)]
|
|
[bool]$SkipWidgetWarmUp = $true,
|
|
[Parameter(Mandatory = $false)]
|
|
[int]$MaximumSitesToTest = 20,
|
|
[Parameter(Mandatory = $false)]
|
|
[int]$SiteThreads = 4,
|
|
[Parameter(Mandatory = $false)]
|
|
[int]$WidgetThreads = 8,
|
|
[Parameter(Mandatory = $false)]
|
|
[string[]]$ServerTargetOverride
|
|
)
|
|
|
|
if([string]::IsNullOrEmpty($AwsProfile)) {
|
|
$AwsProfile = "prod"
|
|
}
|
|
|
|
$logLead = (Get-LogLeadName)
|
|
$passedAllTests = $true
|
|
|
|
$sitesToSkipArray = @()
|
|
# We do a type check here to determine if this was called directly from TC or not. If yes, clean it up.
|
|
if($null -ne $SitesToSkip -and $SitesToSkip -match ",|\s+") {
|
|
Write-Host "Got called from TC directly. Doing the splits for sites to skip."
|
|
# Split out individual sites, divided by commas or spaces. Ignore blanks.
|
|
$sitesToSkipArray = ($SitesToSkip -split ',|\s+') | Where-Object {("" -ne $_)}
|
|
} else {
|
|
$sitesToSkipArray = $SitesToSkip
|
|
}
|
|
|
|
if (![String]::IsNullOrEmpty($ServerTargetOverride)) {
|
|
# Same type check here. Split override servers if there's more than one.
|
|
# Also split servers, because we're coming from TC, so it must be a string as well.
|
|
if(($Servers -match ",") -or ($ServerTargetOverride -match ",|\s+")) {
|
|
Write-Host "Got called from TC directly. Doing the splits for override servers."
|
|
[array]$overrideArray = ($ServerTargetOverride -split ',|\s+') | Where-Object {("" -ne $_)}
|
|
[array]$serverArray = $Servers.split(',')
|
|
|
|
Write-Host "$logLead : ServerArray $serverArray"
|
|
Write-Host "$logLead : OverrideArray $overrideArray"
|
|
} else {
|
|
Write-Host "Got Arrays, passing through"
|
|
[array]$overrideArray = $ServerTargetOverride
|
|
[array]$serverArray = $Servers
|
|
}
|
|
|
|
$unexpectedServers = $overrideArray.Where{ $_ -notin $serverArray }
|
|
|
|
if (($null -ne $unexpectedServers) -and ($unexpectedServers.Count -gt 0)) {
|
|
throw "$logLead : Received unexpected servers/values in the Server Target Override List. Re-examine your parameter list. Unexpected: $unexpectedServers"
|
|
} else {
|
|
$finalServers = $overrideArray
|
|
}
|
|
} else {
|
|
$finalServers = $Servers
|
|
}
|
|
|
|
# Get the logins
|
|
try{
|
|
$loginsJson = Get-LoginsToTest -AwsProfile $AwsProfile
|
|
} catch {
|
|
Write-Warning "$logLead : Exception getting logins to test!"
|
|
$ex = $_
|
|
Resolve-Error -ErrorRecord $ex
|
|
Write-Host "$logLead : Setting test results to failed, returning False."
|
|
return $false
|
|
}
|
|
|
|
# Get the Urls
|
|
try {
|
|
$coreUrlsJson = Get-CoreUrlsToTest -AwsProfile $AwsProfile
|
|
} catch {
|
|
Write-Warning "$logLead : Exception getting core URLs to test!"
|
|
$ex = $_
|
|
Resolve-Error -ErrorRecord $ex
|
|
Write-Host "$logLead : Setting test results to failed, returning False."
|
|
return $false
|
|
}
|
|
|
|
# Kick off the webtests on the servers
|
|
try {
|
|
$serverScriptArguments = @{
|
|
LoginsJson = $loginsJson
|
|
CoreUrlsJson = $coreUrlsJson
|
|
SitesToSkip = $sitesToSkipArray
|
|
MaximumSitesToTest = $MaximumSitesToTest
|
|
SkipWidgetWarmUp = $SkipWidgetWarmUp
|
|
SiteThreads = $SiteThreads
|
|
WidgetThreads = $WidgetThreads
|
|
}
|
|
|
|
$results = Invoke-ParallelServers -Servers $finalServers -ReturnObjects -Arguments $serverScriptArguments -Script {
|
|
param($inputArguments)
|
|
|
|
$server = (Get-FullyQualifiedServerName)
|
|
|
|
$sbLoginsJson = $inputArguments.LoginsJson
|
|
$sbCoreUrlsJson = $inputArguments.CoreUrlsJson
|
|
$sbSitesToSkip = $inputArguments.SitesToSkip
|
|
$sbMaximumSitesToTest = $inputArguments.MaximumSitesToTest
|
|
$sbSkipWidgetWarmUp = $inputArguments.SkipWidgetWarmUp
|
|
$sbSiteThreads = $inputArguments.SiteThreads
|
|
$sbWidgetThreads = $inputArguments.WidgetThreads
|
|
|
|
Write-Host "##teamcity[blockOpened name='$server']"
|
|
|
|
$result = (Start-WebTests -LoginsJson $sbLoginsJson `
|
|
-CoreUrlsJson $sbCoreUrlsJson `
|
|
-SitesToSkip $sbSitesToSkip `
|
|
-MaximumSitesToTest $sbMaximumSitesToTest `
|
|
-SkipWidgetWarmUp $sbSkipWidgetWarmup `
|
|
-SiteThreads $sbSiteThreads `
|
|
-WidgetThreads $sbWidgetThreads)
|
|
|
|
Write-Host "##teamcity[blockClosed name='$server']"
|
|
|
|
return $result
|
|
}
|
|
|
|
foreach($result in $results) {
|
|
if(!$result) {
|
|
$passedAllTests = $false
|
|
}
|
|
}
|
|
} catch {
|
|
Write-Warning "$logLead : Error during web tests!"
|
|
$ex = $_
|
|
Resolve-Error -ErrorRecord $ex
|
|
Write-Host "$logLead : Setting test results to failed, returning False."
|
|
$passedAllTests = $false
|
|
}
|
|
|
|
Write-Host "$logLead : Has passed all tests? : $passedAllTests"
|
|
return $passedAllTests
|
|
} |