PowerShell Pester 101: Guide pratique pour débutants

Lorsque vous exécutez un script, comment pouvez-vous être sûr qu’il a fait exactement ce que vous aviez prévu ? Peut-être qu’il a supprimé un fichier ou arrêté un service. Mais l’a-t-il fait de manière impeccable dans chaque environnement, session utilisateur ou machine qu’il a touché ? Si votre script impacte des douzaines d’éléments, tester avec Pester est votre meilleure option.

Pester, le puissant module PowerShell, vous aide à écrire des tests automatisés en utilisant un langage spécifique au domaine (DSL). Dans ce tutoriel, vous apprendrez à éliminer les suppositions et à créer un processus fiable pour valider vos scripts.

Attachez vos ceintures et laissez Pester renforcer votre confiance en matière de script !

Installation et configuration de Pester

Pester garantit que les actions de votre script correspondent à vos attentes dans n’importe quel environnement. Tester avec Pester est une compétence essentielle pour gérer l’infrastructure avec PowerShell.

Mais tout d’abord, nous devons installer Pester pour créer des tests autour d’un script qui provisionne un serveur et voir comment fonctionnent les tests avec Pester.

Vous pouvez télécharger le module Pester depuis la galerie PowerShell :

Install-Module Pester

Si vous rencontrez un avertissement, c’est peut-être parce que les clients Windows 10 (et ultérieurs) ont une version plus ancienne de Pester installée par défaut. Par exemple, la version 3.4.0 est souvent préinstallée.

Assurez-vous de supprimer l’ancienne version pour éviter les conflits :

$module = "C:\Program Files\WindowsPowerShell\Modules\Pester\3.4.0"
takeown /F $module /A /R
icacls $module /reset
icacls $module /grant "*S-1-5-32-544:F" /inheritance:d /T
Remove-Item -Path $module -Recurse -Force -Confirm:$false

Ce script prend possession du dossier de Pester 3.4.0, met à jour les autorisations et le supprime.

Installez la dernière version de Pester en ajoutant le paramètre -Force :

Install-Module Pester -Force

Vous pourriez voir un autre avertissement concernant la signature de la nouvelle version. Microsoft a signé la version préinstallée, tandis que le mainteneur de Pester, Jakub, a signé la dernière version.

Vérifiez la version installée avec la commande suivante:

Get-Module -Name Pester -ListAvailable

Création d’un fichier de test Pester

Maintenant que Pester est installé, créons quelques tests. A des fins de démonstration, imaginons qu’un script est chargé d’installer la fonctionnalité Windows IIS.

Créez un script PowerShell nommé ServerProvisioning.Tests.ps1 dans le répertoire de votre choix; disons que c’est dans votre dossier ~\Documents.

Ensuite, exécutez les tests Pester avec la cmdlet Invoke-Pester:

cd ~\Documents
Invoke-Pester

Exécuter cette commande sans aucun test disponible entraîne l’absence d’exécution de tests.

Ajoutons quelques tests en utilisant la structure de blocs hiérarchiques de Pester, où:

  • describe représente une catégorie de tests, telle que la fonctionnalité principale d’un script.
  • context organise facultativement les tests en sous-catégories.
  • it définit des tests individuels.
describe 'IIS' {
    context 'Windows features' {
        it 'installs the Web-Server Windows feature' {

        }
    }
}

describe 'RegistryTweaks' {

}

describe 'SoftwareInstalls' {

}

Ajout et Exécution d’un Test

Imaginez un script qui provisionne un serveur mais oublie une étape cruciale, comme activer une fonctionnalité requise. Si cela n’est pas vérifié, cet oubli peut entraîner des problèmes en cascade en production.

Supposons que le script de provisionnement du serveur ait été exécuté, et la tâche est de confirmer que la fonctionnalité Web-Server est installée. Si c’est le cas, effectuez une vérification manuelle.

Exécutez la commande suivante pour vérifier manuellement si la fonctionnalité Web-Server (IIS) est installée sur le serveur distant.

Invoke-Command -ComputerName SRV1 -ScriptBlock { (Get-WindowsFeature -ComputerName SRV1 -Name Web-Server).Installed }

Cette commande renvoie True si la fonctionnalité est installée et False sinon.

À présent, ajoutez ce qui suit au bloc it pour automatiser ce test. L’opérateur should avec la condition -BeTrue atteste que la fonctionnalité est installée.

describe 'IIS' {
    context 'Windows features' {
        it 'installs the Web-Server Windows feature' {
            Invoke-Command -ComputerName SRV1 -ScriptBlock { (Get-WindowsFeature -ComputerName SRV1 -Name Web-Server).Installed } | should -BeTrue
        }
    }
}

Enfin, relancez le test:

cd ~\documents
Invoke-Pester

Comme prévu, le test échouera si la fonctionnalité n’est pas installée.


VS Code propose également une excellente intégration de Pester. Au lieu d’exécuter Invoke-Pester, vous pouvez cliquer sur l’élément Run Tests sur des tests individuels directement dans VS Code. Cette action invoque des tests spécifiques.


Conclusion

Dans ce tutoriel, vous avez appris comment utiliser Pester pour automatiser les tests de vos scripts PowerShell. Vous avez abordé les étapes fondamentales pour valider efficacement vos scripts. Ces étapes comprennent l’installation et la configuration de Pester, la création d’un fichier de test, et l’écriture de votre premier test automatisé.

Continuez à construire sur cette base en explorant comment Pester peut gérer des scénarios plus avancés, tels que les tests d’API, la simulation de commandes ou l’exécution de validations avant et après le déploiement.

En intégrant Pester dans votre flux de travail, vous améliorerez vos scripts et gagnerez en confiance dans leur fiabilité, permettant ainsi de développer vos efforts d’automatisation en toute confiance!

Source:
https://adamtheautomator.com/powershell-pester-testing-guide/