Strona korzysta z plików cookies w celu realizacji usług i zgodnie z Polityką Plików Cookies.



20.07.2020

Baramundi

Pomoc w czasie pandemii.
20.07.2020

Stop infekcjom

CloudGuard
17.07.2020

Analiza zagrożeń

Kaspersky Threat Attribution Engine
17.07.2020

Strażnik danych

QGD-1602P
16.07.2020

Dysk przemysłowy

Transcend MTE352T
16.07.2020

Połączenie sił

Fugaku
16.07.2020

Brama bezpieczeństwa

Check Point 1570R
23.06.2020

PLNOG Online

PLNOG Online
23.06.2020

Nowe zagrożenie

Ramsay

Pester – testowanie kodu PowerShell

Data publikacji: 26-06-2018 Autor: Bartosz Bielawski

Po dodaniu modułu Pester do systemu Windows 10 stał się on de facto standardowym narzędziem do testów jednostkowych wśród użytkowników PowerShella. Pokazujemy, jak stosować to narzędzie, oraz opisujemy rozwiązania, które wykorzystując Pestera w tle, realizują zupełnie odmienne cele – testują konfigurację środowisk wirtualnych, serwerów baz danych oraz usług na co dzień wykorzystywanych na serwerach Windows.

Pisząc kod, niezależnie od stopnia jego skomplikowania, stopniowo adaptujemy kolejne narzędzia i techniki programistyczne. Konieczność modyfikowania tego samego bloku kodu w kilkunastu miejscach motywuje nas, aby powtarzalny kod przekształcić w funkcję. Z kolei pierwszy, przypadkiem nadpisany bądź usunięty skrypt skłania do skorzystania z jednego z narzędzi do wersjonowania i kontroli kodu. Błąd, którego mogliśmy uniknąć, gdybyśmy zastosowali się do rady doświadczonego kolegi, przekonuje do wzajemnego przeglądania kodu przed zatwierdzeniem go do wykorzystania w środowiskach produkcyjnych. Wreszcie – pierwsza poprawka, która spowoduje swoisty efekt motyla i sprawi, że na pozór niezwiązany z tą zmianą fragment funkcji przestaje działać, skłonić nas może do sięgnięcia po zestaw narzędzi do testów jednostkowych. Jednak zanim przystąpimy do omawiania samego modułu, warto przyjrzeć się temu, czym są i do czego służą testy jednostkowe. 

 
> TESTY JEDNOSTKOWE
 
Testy jednostkowe to sposób testowania oprogramowania, w którym dzielimy program na mniejsze jednostki i staramy się sprawdzić ich zachowanie w izolacji od reszty programu. Dzięki temu podejściu można łatwo ustalić, jakiego zachowania oczekujemy, a jakie jest niepożądane. Mamy przy tym kilka możliwości. Przede wszystkim możemy prześledzić wszystkie ścieżki, jakimi może podążyć badany fragment kodu, i upewnić się, czy wynik w każdym z przypadków pokrywa się z oczekiwanym. 
 
Przykład w PowerShellu – sprawdzenie warunku logicznego dla różnych wartości, pozwalający upewnić się, że rezultat wyrażenia zmienia się zgodnie z tym, czego się spodziewamy. Drugi rodzaj testów polega na podmianie właściwego fragmentu kodu (używamy uproszczonego modelu), dzięki czemu można ustalić, czy dany fragment uzyska odpowiednie dane na wejściu i czy przy założonych danych na wyjściu reszta programu zachowa się zgodnie z oczekiwaniami. W przypadku PowerShella będzie to podmiana zewnętrznych poleceń swoistymi protezami, które będą akceptować identyczne parametry i zwracać będą założone przez nas wyniki, aby sprawdzić, czy przygotowany kod przekaże odpowiednie wartości do parametrów oraz czy uzyskawszy na wyjściu zewnętrznego polecenia pewną wartość, wywołamy odpowiednią reakcję za pomocą napisanego przez nas kodu. Możemy wreszcie sprawdzić, czy fragment kodu reaguje poprawnie na poprawne parametry wejściowe i czy kończy się niepowodzeniem, gdy dane są niepoprawne. W ten sposób sprawdzimy zarówno walidację parametrów, jak i określone sytuacje, gdy kombinacja wartości parametrów prowadzi do negatywnego wyniku, a przy poprawnych wartościach parametrów polecenie zadziałania zgodnie z oczekiwaniami.
 
Testy jednostkowe mają tę zaletę, że pozwalają automatycznie zweryfikować po wprowadzonych zmianach w kodzie, czy nasz skrypt lub funkcja nadal działają. Pisząc testy dla stwierdzonych usterek bądź dodawanych funkcji, możemy w ten sposób potwierdzić, że wprowadzone zmiany przyniosą zamierzony efekt. Idąc krok dalej, możemy najpierw napisać odpowiedni test, który przed wprowadzeniem zmian powinien dać wynik negatywny, a następnie wprowadzić poprawki. Dzięki temu nie tylko będziemy mieć pewność, że napisany kod jest poprawny. Potwierdzimy również, że test istotnie sprawdza to, do czego został przygotowany. Może się bowiem zdarzyć, że nasz test będzie zwracał wynik pozytywny niezależnie od działania danej jednostki – nie tylko nie pomoże zweryfikować działania kodu, ale będzie wręcz szkodliwy, dając złudne poczucie, że napisany przez nas kod został prawidłowo przetestowany. Skoro wiemy już, czym są testy jednostkowe, przyjrzyjmy się narzędziu, które do tego typu testów wykorzystamy.
 
> ZASTOSOWANIA PESTERA
 
Jak już wspomniano, Pester jest jednym z modułów Windows 10. Domyślnie w systemie tym znajdziemy wersję 3.4.0. W chwili pisania artykułu dostępna jest już wersja 4.3.1 z nieco odmienną składnią i kilkoma interesującymi możliwościami. Prześledzimy proces tworzenia testów za pomocą starszej wersji, a następnie omówimy różnice w składni pomiędzy obiema wersjami.
 
Aby uruchomić testy w ramach modułu Pester, należy skorzystać z polecenia Invoke-Pester, które oferuje kilka parametrów pozwalających zmienić domyślne zachowanie modułu – Pester wyszukuje wszystkie pliki pasujące do wzorca NazwaTestów.Tests.ps1 w bieżącym folderze, uruchamia je wszystkie i wyświetla informacje o wyniku poszczególnych testów wraz z podsumowaniem. W zależności od wyniku zmieniany jest kolor wykorzystywany do wyświetlenia nazwy testu (zielony, gdy test się powiódł, czerwony, gdy tak się nie stało) oraz poprzedzający tę nazwę znak (plus dla testów zakończonych powodzeniem, minus dla tych, których wynik był negatywny). To wygodny sposób wizualizacji, ale nie daje nam możliwości analizowania wyników w innych narzędziach. Jeśli dalsza obróbka jest dla nas istotna, możemy skorzystać z kilku rozwiązań.
 
Przede wszystkim można użyć parametru PassThru, dzięki któremu na wyjściu uzyskamy obiekt zawierający komplet informacji o przeprowadzonych testach wraz z ich wynikami. Taki obiekt możemy następnie przeanalizować w wybrany przez nas sposób, a informację o wyniku testów przekazać do użytkownika.
 
[...]
 
Autor zawodowo zajmuje się informatyką. Jest Microsoft MVP w dziedzinie PowerShella, blogerem oraz jednym z moderatorów forum dotyczącego skrypt-ów w serwisie TechNet. Autor książki „Windows PowerShell 5.0 Biblia”. 

Pełna treść artykułu jest dostępna w papierowym wydaniu pisma.

.

Transmisje online zapewnia: StreamOnline

All rights reserved © 2019 Presscom / Miesięcznik "IT Professional"