I was in Glasgow this Friday enjoying the fantastic hospitality of the Glasgow SQL User Group @SQLGlasgow and presenting sessions with Andre Kamman, William Durkin and Chrissy LeMaire
I presented “Green is Good Red is Bad – Turning your checklists into Pester Tests”. I had to make sure I had enough energy beforehand so I treated myself to a fabulous burger.
Afterwards I was talking to some of the attendees and realised that maybe I could show how easy it was to start writing your first Pester test. Here are the steps to follow so that you can write your first Pester test
Decide the information you wish to test
Understand how to get it with PowerShell
Understand what makes it pass and what makes it fail
Write a Pester Test
The first bit is up to you. I cannot decide what you need to test for on your servers in your environments. Whatever is the most important. For now pick one thing.
Logins – Lets pick logins as an example for this post. It is good practice to disable the sa account is advice that you will read all over the internet and is often written into estate documentation so lets write a test for that
Now we need the PowerShell command to return the information to test for. We need a command that will get information about logins on a SQL server and if it can return disabled logins then all the better.
As always when starting to use PowerShell with SQL Server I would start with dbatools if we run Find-DbaCommand we can search for commands in the module that support logins. (If you have chosen something none SQL Server related then you can use Get-Command or the internet to find the command you need)
Get-DbaLogin . That looks like the one that we want. Now we need to understand how to use it. Always always use Get-Help to do this. If we run
Get-Help Get-DbaLogins -detailed
we get all of the information about the command and the examples. Example 8 looks like it will help us
So now try running the command for our disabled sa account
Get-DbaLogin -SqlInstance rob-xps -Login sa -Disabled
So we know that if we have a disabled sa account we get a result. Lets enable the sa account and run the command again
We don’t get a result. Excellent, now we know what happens for a successful test – we get one result and for failed test we get zero results. We can check that by running
The first one has the account disabled and the second one not. So now we can write our Pester Test. We can start with a Describe Block with a useful title. I am going to add a context block so that you can see how you can group your tests.
and then we will write our test. Pester Tests use the It keyword. You should always give a useful title to your test
Now we can write our test. We know that the command returns one result when we want it to pass so we can write a test like this
The code I have added is
(Get-DbaLogin -SqlInstance rob-xps -Login sa -Disabled).Count | Should Be 1
- the code for getting the information about the thing we wanted to test (The count of the disabled sa logins on the instance)
- a pipe symbol |
- The Should key word
- The Be keyword
- and the result we want to pass the test (1)
Ta Da! One Pester test written. You can run the test just by highlighting the code and running it in VS Code (or PowerShell ISE) and it will look like this for a passing test
It is better to save it for later use and then call it with Invoke-Pester
So now you can write your first Pester test. Just find the PowerShell to get the information that you need, understand what the results will be for passing and failing tests and write your test
Getting the Latest Version of the Module
The magnificent Steve Jones wrote about getting the latest version of Pester and the correct way to do it. You can find the important information here