We moved our workloads to Kubernetes and now want to run our tests in the cluster. In this series I describe our journey with Testkube. This setup works for us, your milage may vary. You can view all posts in this series by filtering on tag testkube-journey
Pester
When we deploy our documentation we test for broken links before deploying to production. These tests are written in PowerShell using the Pester module.
We build a docker image with the tests and the Pester module.
FROM mcr.microsoft.com/powershell AS base
# install pester module
COPY <<EOF /tmp/install.pester.ps1
Register-PSRepository -Name 'internal' -SourceLocation 'https://internal-psgallery' -InstallationPolicy 'Trusted'
Install-Module -Name 'Pester' -Repository 'internal' -Scope 'AllUsers'
EOF
RUN ["pwsh", "/tmp/install.pester.ps1"]
# copy tests
WORKDIR /src/tests
COPY . ./
We run the tests by creating a run script in the testworkflow. Important line is the Throw on failing tests so Testkube knows some files failed.
apiVersion: testworkflows.testkube.io/v1
kind: TestWorkflow
metadata:
name: broken-links
spec:
content:
files:
- path: /src/runtests.ps1
content: |
Import-Module Pester
$config = New-PesterConfiguration
$config.TestResult.OutputFormat = 'NUnitXml'
$config.TestResult.OutputPath = '/data/broken-links-output.xml'
$config.Run.Path = '/src/tests'
# make sure testkube knows about failing tests
$config.Run.Throw = $true
Invoke-Pester -Configuration $config
steps:
- name: pester-tests
run:
image: internal-registry/company/broken-links-pester
command: [ "pwsh" ]
args: [ "/src/runtests.ps1" ]
See Testkube journey – GitOps about updating the image version with gitops.
The file runtests.ps1 is created in the TestWorkflow with the content block. This way we can change the output format or other settings without rebuilding the image. Happy devs 🚀