Infrastruktura jako kod mówi nam, abyśmy używali narzędzi automatyzujących twoje kompilacje. Świetny. Narzędzia takie jak ansible , szef kuchni , marionetka , stos soli i inne popychają nas do pisania o tym, jak wygląda infrastruktura, przy jednoczesnym usuwaniu różnic.
W stosie soli te bity nazywane są stanami . Jeśli stan nie odpowiada rzeczywistości, narzędzie to dla nas rozwiąże. Innymi słowy - piszemy test na naszą infrastrukturę, a jeśli test się nie powiedzie, narzędzie samodzielnie go naprawi. Przynajmniej taki jest pomysł.
XP uczy nas korzystania z TDD, a pytanie brzmi, czy dotyczy to infrastruktury? Oprzyrządowanie to sugeruje.
Mogę sobie wyobrazić kilka rodzajów testów, które mogą być bardzo przydatne.
Piszemy testy dymu, które są dołączone do wdrożonej usługi, aby zapewnić, że kompleksowa usługa działa i działa zgodnie z oczekiwaniami. Byłoby to wywołanie API lub / i sprawdzenie systemu, aby upewnić się, że to, co właśnie wdrożyliśmy, działa. Wiele z tych funkcji może być objętych tymi samymi stanami, ponieważ narzędzia takie jak ansible mają stany zapewniające działanie usługi.
Istnieje projekt Molekuła, która pozwala na uruchamianie poszczególnych ról (jak ansible wywołuje swoje stany) przeciwko dokerowi lub innemu tymczasowemu silnikowi wirtualizacji. To zmusza do rozdzielenia ról i pozwala na wykonywanie ich w oderwaniu od podręcznika podczas pracy nad nimi. Testy najczęściej pozwalają na kpowanie ze zmiennych, z którymi rola ma współpracować. Inne przykłady wydają się jednak duplikacją silnika ansible (twierdzenie, że plik należy do użytkownika ...).
ThoughtWorks tech radar teraz chwali narzędzi takich jak Inspec , serverspec lub Goss za sprawdzenie, czy serwer spełnia specyfikację. Ale piszemy specyfikację, prawda?
Czy jest sens w dalszym testowaniu infrastruktury, jeśli opisujemy infrastrukturę w stanach / rolach? Mogę podejrzewać, że staje się to bardziej wymagane w większych organizacjach, w których jeden zespół zapewnia specyfikację, a inne poniżej, lub jeśli istnieje duży zestaw ról, być może chcesz uruchomić ich podzbiór i uzyskać korzyści z testów? Próbuję zrozumieć, dlaczego napisałbyś test, gdybyś mógł mieć rolę / stan dla tego samego pytania.
goss
. Na przykład RPM jest instalowany (ansible), a następnie testowany, czy oczekiwany plik domyślny jest zainstalowany, czy usługa działa i nasłuchuje określonego portu. Nie chcę automatycznie naprawiać takiego problemu, ale otrzymuję powiadomienie i zatrzymuję postęp. Jasne, że Ansible może przetestować system również dla Ciebie, po prostu musisz o tym wyraźnie powiedzieć, ale w naszym przypadku używamygoss
do testowania zachowania usługi w kontenerze