Run mabl tests

Octopus.Script exported 2020-08-26 by bertold belongs to ‘mabl’ category.

Trigger specific application or environment plans in mabl.

Parameters

When steps based on the template are included in a project’s deployment process, the parameters below can be set.

mabl Integration Key

mablApiKey =

(Required) The API key of your workspace. You can find the API key on the Settings/API page.

Environment ID

mablEnvId =

The environment ID to run the tests in. Note that either an environment ID or an application ID must be provided.

Application ID

mablAppId =

The application ID to run tests on. Note that either an environment ID or an application ID must be provided.

Plan Labels

mablPlanLabels =

(Optional) A comma-separated list of plan labels. Plans with any of the labels will be executed.

Test Branch

mablBranch =

(Optional) The mabl branch to run test against.

Await Completion

mablAwaitCompletion = True

When checked, the step will wait for all triggered tests to complete.

Script body

Steps based on this template will execute the following PowerShell script.

param(
    [string]$mablApiKey,
    [string]$mablEnvId,
    [string]$mablAppId,
    [string]$mablPlanLabels,
    [string]$mablBranch,
    [string]$mablAwaitCompletion
) 

$ErrorActionPreference = "Stop" 

# Constants
$PollSec = 10
$UserAgent = "mabl-octopus-plugin/0.0.3"
$ApiBase = "https://api.mabl.com"
$DeploymentEventsUri = "$ApiBase/events/deployment"
$ExecutionResultBaseUri = "$ApiBase/execution/result/event"

function Get-Param($Name, [switch]$Required, $MatchingPattern, $Explanation) {
    $result = $null

    if ($null -ne $OctopusParameters) {
        $result = $OctopusParameters[$Name]
    }

    if ($null -eq $result) {
        $variable = Get-Variable $Name -EA SilentlyContinue   
        if ($null -ne $variable) {
            $result = $variable.Value
        }
    }

    if ($null -eq $result -or $result -eq "") {
        if ($Required) {
            throw "Missing parameter value $Name"
        }
    }

    if ($null -ne $result -and "" -ne $result -and $null -ne $MatchingPattern -and $result -notmatch $MatchingPattern) {
        throw "$Explanation"
    }

    return $result
}

function Write-Result($Result) {
    foreach ($execution in $Result.executions) {
        $planName = $execution.plan.name
        $planId = $execution.plan.id
        $planStatus = $execution.plan_execution.status
        $t = New-TimeSpan -seconds (($execution.stop_time - $execution.start_time) /  1000)
        $planTime = Get-Date -Hour $t.Hours -Minute $t.Minutes -Second $t.Seconds -UFormat "%T"

        Write-Host "Plan name: ${planName}, id: ${planId}, status: ${planStatus}, run time: ${planTime}"

        $tests = $execution.journeys
        $testExecutions = $execution.journey_executions

        foreach ($test in $tests) {
            $testId = $test.id
            $testName = $test.name

            foreach ($testExecution in $testExecutions) {
                if ($testExecution.journey_id -eq $testId) {
                    $t = New-TimeSpan -seconds (($testExecution.stop_time - $testExecution.start_time) / 1000)
                    $testTime = Get-Date -Hour $t.Hours -Minute $t.Minutes -Second $t.Seconds -UFormat "%T"
                    $testStatus = $testExecution.status
                    $testBrowser = $testExecution.browser_type
                    $testExecutionId = $testExecution.journey_execution_id
                    Write-Host "  Test name: ${testName}, id: ${testExecutionId}, status: ${testStatus}," `
                        "browser: ${testBrowser}, run time: ${testTime}"
                    break
                }
            }

        }
    }
}

& {
    param (
        [string]$mablApiKey,
        [string]$mablEnvId,
        [string]$mablAppId,
        [string]$mablPlanLabels,
        [string]$mablAwaitCompletion
    )

    $kv = "key:$($mablApiKey)"
    $encodedCreds = [System.Convert]::ToBase64String([System.Text.Encoding]::ASCII.GetBytes($kv))
    $basicAuthValue = "Basic $encodedCreds"
    $headers = @{
        Authorization = $basicAuthValue
        accept        = "application/json"
    }

    # Submit Deployment Event
    $resp = ""
    $eventId = ""
    try {
        $m = @{}
        if ($null -ne $mablEnvId -and "" -ne $mablEnvId) {
            $m.add("environment_id", $mablEnvId)
        }
        if ($null -ne $mablAppId -and "" -ne $mablAppId) {
            $m.add("application_id", $mablAppId)
        }
        if ($m.count -eq 0) {
            Write-Host "Either an environment ID or an application ID must be provided"
            exit 1
        }
        if ($null -ne $mablPlanLabels -and "" -ne $mablPlanLabels) {
            $planLabelArray = $mablPlanLabels.Split(",")
            $m.add("plan_labels", $planLabelArray)
        }
        if ($null -ne $mablBranch -and "" -ne $mablBranch) {
            $m.add("source_control_tag", $mablBranch)
        }
        $body = ConvertTo-Json -InputObject $m
        Write-Host "Creating Deployment..."
        $resp = Invoke-RestMethod -URI $DeploymentEventsUri -Method Post `
            -Headers $headers -ContentType 'application/json' `
            -UserAgent $UserAgent -Body $body

        $workspaceId = $resp.workspace_id
        $eventId = $resp.id
        Write-Host "View output at https://app.mabl.com/workspaces/${workspaceId}/events/${eventId}"
    }
    catch {
        $statusCode = $_.Exception.Response.StatusCode.value__
    
        Write-Host "Failed to invoke deployment events API, status code: " `
            $statusCode " description: " `
            $_.Exception.Response.StatusDescription
    
        switch ($statusCode) {
            400 {
                Write-Host "At least one of environment ID or application ID must be specified"
                break
            }
            401 { 
                Write-Host "Invalid API key has been provided"
                break
            }
            403 {
                Write-Host "The provided API key is not authorized to submit deployment events"
                break
            }
            404 {
                Write-Host "The provided application or environment could not be found"
                break
            }
        }
        exit 1
    }


    # Poll Execution Result at least once based on await completion parameter
    $awaitCompletion = $mablAwaitCompletion -eq "True"
    $totalPlans = 0
    $passedPlans = 0
    $failedPlans = 0
    $totalTests = 0
    $passedTests = 0
    $failedTests = 0
    $execResult = ""
    try {
        $complete = -Not $awaitCompletion
        do {
            Start-Sleep -s $PollSec
            $eventId = $resp.id
            $uri = "$ExecutionResultBaseUri/$eventId"
            $execResult = Invoke-RestMethod -URI $uri -Method Get -Headers $headers
            $totalPlans = $execResult.plan_execution_metrics.total
            $passedPlans = $execResult.plan_execution_metrics.passed
            $failedPlans = $execResult.plan_execution_metrics.failed
            $totalTests = $execResult.journey_execution_metrics.total
            $passedTests = $execResult.journey_execution_metrics.passed
            $failedTests = $execResult.journey_execution_metrics.failed

            if ($passedPlans + $failedPlans -eq $totalPlans) {
                $complete = $TRUE
            }
            elseif (!$complete) {
                Write-Host "Plan runs" `
                    "[passed: $passedTests, failed: $failedTests, total: $totalTests]"
            }
        } while (!$complete)
    } 
    catch {
        $statusCode = $_.Exception.Response.StatusCode.value__

        Write-Host "Failed to invoke execution result API, status code:" `
            $statusCode " description: `
                " $_.Exception.Response.StatusDescription
    
        switch ($statusCode) {
            401 {
                Write-Host "Invalid API key has been provided"
                break
            }
            403 {
                Write-Host "The provided API key is not authorized to retrieve execution results"
                break
            }
            404 {
                Write-Host "The deployment event could not be found"
                break
            }
        }
    
        exit 1
    }

    if ($awaitCompletion) {
        # Display results
        Write-Host "Tests complete with status" `
            $(If ($execResult.event_status.succeeded) { "PASSED" } else { "FAILED"})
        Write-Result($execResult)

        If ($execResult.event_status.succeeded) { exit 0 } else { exit 1 }
    }

    Write-Host "Successfully triggered $totalPlans plan(s)"
    exit 0
} `
(Get-Param 'mablApiKey' -Required) `
(Get-Param 'mablEnvId' '-e$' 'Environment IDs must end with -e') `
(Get-Param 'mablAppId' '-a$' 'Application IDs must end with -a') `
(Get-Param 'mablPlanLabels') `
(Get-Param 'mablAwaitCompletion')

Provided under the Apache License version 2.0.

Report an issue

To use this template in Octopus Deploy, copy the JSON below and paste it into the Library → Step templates → Import dialog.

{
  "Id": "422be361-640c-4ac1-a305-cd5d618ccf10",
  "Name": "Run mabl tests",
  "Description": "Trigger specific application or environment plans in mabl.",
  "Version": 4,
  "ExportedAt": "2020-08-26T20:24:23.9520000Z",
  "ActionType": "Octopus.Script",
  "Author": "bertold",
  "Packages": [],
  "Parameters": [
    {
      "Id": "f5a9d523-f97e-49a9-b946-0c56e1018345",
      "Name": "mablApiKey",
      "Label": "mabl Integration Key",
      "HelpText": "(Required) The API key of your workspace. You can find the API key on the Settings/API page.",
      "DefaultValue": "",
      "DisplaySettings": {
        "Octopus.ControlType": "Sensitive"
      }
    },
    {
      "Id": "364c4c30-0ba3-4eee-9b01-9fb00f718ade",
      "Name": "mablEnvId",
      "Label": "Environment ID",
      "HelpText": "The environment ID to run the tests in. Note that either an environment ID or an application ID must be provided.",
      "DefaultValue": "",
      "DisplaySettings": {
        "Octopus.ControlType": "SingleLineText"
      }
    },
    {
      "Id": "0bf3fd34-1104-4d29-8677-0d91e78fc483",
      "Name": "mablAppId",
      "Label": "Application ID",
      "HelpText": "The application ID to run tests on. Note that either an environment ID or an application ID must be provided.",
      "DefaultValue": "",
      "DisplaySettings": {
        "Octopus.ControlType": "SingleLineText"
      }
    },
    {
      "Id": "549d9ef4-2461-45d4-a8bc-44fb79758b52",
      "Name": "mablPlanLabels",
      "Label": "Plan Labels",
      "HelpText": "(Optional) A comma-separated list of plan labels. Plans with any of the labels will be executed.",
      "DefaultValue": "",
      "DisplaySettings": {
        "Octopus.ControlType": "SingleLineText"
      }
    },
    {
      "Id": "db7398c4-2abc-4c56-99af-d32d054db50d",
      "Name": "mablBranch",
      "Label": "Test Branch",
      "HelpText": "(Optional) The mabl branch to run test against.",
      "DefaultValue": "",
      "DisplaySettings": {
        "Octopus.ControlType": "SingleLineText"
      }
    },
    {
      "DisplaySettings": {
        "Octopus.ControlType": "Checkbox"
      },
      "DefaultValue": "True",
      "Name": "mablAwaitCompletion",
      "Label": "Await Completion",
      "HelpText": "When checked, the step will wait for all triggered tests to complete."
    }
  ],
  "Properties": {
    "Octopus.Action.Script.ScriptSource": "Inline",
    "Octopus.Action.Script.Syntax": "PowerShell",
    "Octopus.Action.Script.ScriptBody": "param(\n    [string]$mablApiKey,\n    [string]$mablEnvId,\n    [string]$mablAppId,\n    [string]$mablPlanLabels,\n    [string]$mablBranch,\n    [string]$mablAwaitCompletion\n) \n\n$ErrorActionPreference = \"Stop\" \n\n# Constants\n$PollSec = 10\n$UserAgent = \"mabl-octopus-plugin/0.0.3\"\n$ApiBase = \"https://api.mabl.com\"\n$DeploymentEventsUri = \"$ApiBase/events/deployment\"\n$ExecutionResultBaseUri = \"$ApiBase/execution/result/event\"\n\nfunction Get-Param($Name, [switch]$Required, $MatchingPattern, $Explanation) {\n    $result = $null\n\n    if ($null -ne $OctopusParameters) {\n        $result = $OctopusParameters[$Name]\n    }\n\n    if ($null -eq $result) {\n        $variable = Get-Variable $Name -EA SilentlyContinue   \n        if ($null -ne $variable) {\n            $result = $variable.Value\n        }\n    }\n\n    if ($null -eq $result -or $result -eq \"\") {\n        if ($Required) {\n            throw \"Missing parameter value $Name\"\n        }\n    }\n\n    if ($null -ne $result -and \"\" -ne $result -and $null -ne $MatchingPattern -and $result -notmatch $MatchingPattern) {\n        throw \"$Explanation\"\n    }\n\n    return $result\n}\n\nfunction Write-Result($Result) {\n    foreach ($execution in $Result.executions) {\n        $planName = $execution.plan.name\n        $planId = $execution.plan.id\n        $planStatus = $execution.plan_execution.status\n        $t = New-TimeSpan -seconds (($execution.stop_time - $execution.start_time) /  1000)\n        $planTime = Get-Date -Hour $t.Hours -Minute $t.Minutes -Second $t.Seconds -UFormat \"%T\"\n\n        Write-Host \"Plan name: ${planName}, id: ${planId}, status: ${planStatus}, run time: ${planTime}\"\n\n        $tests = $execution.journeys\n        $testExecutions = $execution.journey_executions\n\n        foreach ($test in $tests) {\n            $testId = $test.id\n            $testName = $test.name\n\n            foreach ($testExecution in $testExecutions) {\n                if ($testExecution.journey_id -eq $testId) {\n                    $t = New-TimeSpan -seconds (($testExecution.stop_time - $testExecution.start_time) / 1000)\n                    $testTime = Get-Date -Hour $t.Hours -Minute $t.Minutes -Second $t.Seconds -UFormat \"%T\"\n                    $testStatus = $testExecution.status\n                    $testBrowser = $testExecution.browser_type\n                    $testExecutionId = $testExecution.journey_execution_id\n                    Write-Host \"  Test name: ${testName}, id: ${testExecutionId}, status: ${testStatus},\" `\n                        \"browser: ${testBrowser}, run time: ${testTime}\"\n                    break\n                }\n            }\n\n        }\n    }\n}\n\n& {\n    param (\n        [string]$mablApiKey,\n        [string]$mablEnvId,\n        [string]$mablAppId,\n        [string]$mablPlanLabels,\n        [string]$mablAwaitCompletion\n    )\n\n    $kv = \"key:$($mablApiKey)\"\n    $encodedCreds = [System.Convert]::ToBase64String([System.Text.Encoding]::ASCII.GetBytes($kv))\n    $basicAuthValue = \"Basic $encodedCreds\"\n    $headers = @{\n        Authorization = $basicAuthValue\n        accept        = \"application/json\"\n    }\n\n    # Submit Deployment Event\n    $resp = \"\"\n    $eventId = \"\"\n    try {\n        $m = @{}\n        if ($null -ne $mablEnvId -and \"\" -ne $mablEnvId) {\n            $m.add(\"environment_id\", $mablEnvId)\n        }\n        if ($null -ne $mablAppId -and \"\" -ne $mablAppId) {\n            $m.add(\"application_id\", $mablAppId)\n        }\n        if ($m.count -eq 0) {\n            Write-Host \"Either an environment ID or an application ID must be provided\"\n            exit 1\n        }\n        if ($null -ne $mablPlanLabels -and \"\" -ne $mablPlanLabels) {\n            $planLabelArray = $mablPlanLabels.Split(\",\")\n            $m.add(\"plan_labels\", $planLabelArray)\n        }\n        if ($null -ne $mablBranch -and \"\" -ne $mablBranch) {\n            $m.add(\"source_control_tag\", $mablBranch)\n        }\n        $body = ConvertTo-Json -InputObject $m\n        Write-Host \"Creating Deployment...\"\n        $resp = Invoke-RestMethod -URI $DeploymentEventsUri -Method Post `\n            -Headers $headers -ContentType 'application/json' `\n            -UserAgent $UserAgent -Body $body\n\n        $workspaceId = $resp.workspace_id\n        $eventId = $resp.id\n        Write-Host \"View output at https://app.mabl.com/workspaces/${workspaceId}/events/${eventId}\"\n    }\n    catch {\n        $statusCode = $_.Exception.Response.StatusCode.value__\n    \n        Write-Host \"Failed to invoke deployment events API, status code: \" `\n            $statusCode \" description: \" `\n            $_.Exception.Response.StatusDescription\n    \n        switch ($statusCode) {\n            400 {\n                Write-Host \"At least one of environment ID or application ID must be specified\"\n                break\n            }\n            401 { \n                Write-Host \"Invalid API key has been provided\"\n                break\n            }\n            403 {\n                Write-Host \"The provided API key is not authorized to submit deployment events\"\n                break\n            }\n            404 {\n                Write-Host \"The provided application or environment could not be found\"\n                break\n            }\n        }\n        exit 1\n    }\n\n\n    # Poll Execution Result at least once based on await completion parameter\n    $awaitCompletion = $mablAwaitCompletion -eq \"True\"\n    $totalPlans = 0\n    $passedPlans = 0\n    $failedPlans = 0\n    $totalTests = 0\n    $passedTests = 0\n    $failedTests = 0\n    $execResult = \"\"\n    try {\n        $complete = -Not $awaitCompletion\n        do {\n            Start-Sleep -s $PollSec\n            $eventId = $resp.id\n            $uri = \"$ExecutionResultBaseUri/$eventId\"\n            $execResult = Invoke-RestMethod -URI $uri -Method Get -Headers $headers\n            $totalPlans = $execResult.plan_execution_metrics.total\n            $passedPlans = $execResult.plan_execution_metrics.passed\n            $failedPlans = $execResult.plan_execution_metrics.failed\n            $totalTests = $execResult.journey_execution_metrics.total\n            $passedTests = $execResult.journey_execution_metrics.passed\n            $failedTests = $execResult.journey_execution_metrics.failed\n\n            if ($passedPlans + $failedPlans -eq $totalPlans) {\n                $complete = $TRUE\n            }\n            elseif (!$complete) {\n                Write-Host \"Plan runs\" `\n                    \"[passed: $passedTests, failed: $failedTests, total: $totalTests]\"\n            }\n        } while (!$complete)\n    } \n    catch {\n        $statusCode = $_.Exception.Response.StatusCode.value__\n\n        Write-Host \"Failed to invoke execution result API, status code:\" `\n            $statusCode \" description: `\n                \" $_.Exception.Response.StatusDescription\n    \n        switch ($statusCode) {\n            401 {\n                Write-Host \"Invalid API key has been provided\"\n                break\n            }\n            403 {\n                Write-Host \"The provided API key is not authorized to retrieve execution results\"\n                break\n            }\n            404 {\n                Write-Host \"The deployment event could not be found\"\n                break\n            }\n        }\n    \n        exit 1\n    }\n\n    if ($awaitCompletion) {\n        # Display results\n        Write-Host \"Tests complete with status\" `\n            $(If ($execResult.event_status.succeeded) { \"PASSED\" } else { \"FAILED\"})\n        Write-Result($execResult)\n\n        If ($execResult.event_status.succeeded) { exit 0 } else { exit 1 }\n    }\n\n    Write-Host \"Successfully triggered $totalPlans plan(s)\"\n    exit 0\n} `\n(Get-Param 'mablApiKey' -Required) `\n(Get-Param 'mablEnvId' '-e$' 'Environment IDs must end with -e') `\n(Get-Param 'mablAppId' '-a$' 'Application IDs must end with -a') `\n(Get-Param 'mablPlanLabels') `\n(Get-Param 'mablAwaitCompletion')\n"
  },
  "Category": "mabl",
  "HistoryUrl": "https://github.com/OctopusDeploy/Library/commits/master/step-templates//opt/buildagent/work/75443764cd38076d/step-templates/run-mabl-tests.json",
  "Website": "/step-templates/422be361-640c-4ac1-a305-cd5d618ccf10",
  "Logo": "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",
  "$Meta": {
    "Type": "ActionTemplate"
  }
}

History

Page updated on Wednesday, August 26, 2020