★ testują grupę elementów systemu
testy integracyjne
7
Sunday 20 October 13
Slide 8
Slide 8 text
★ zabezpieczenie przed zmianami w przyszłości
★ ... lub po wykryciu błędu
★ Po zgłoszeniu błędu najpierw zastanówmy się jak go
zreprodukować i proces ten zapisujemy jako test
testy regresyjne
8
Sunday 20 October 13
Slide 9
Slide 9 text
★ test-driven development
★ Documentation-Driven development
★ Behavior-driven development
★ test coverage
★ code review
proces testowania
Sunday 20 October 13
Slide 10
Slide 10 text
★ Napisz testy
★ napisz kod
test-driven development
10
Sunday 20 October 13
Slide 11
Slide 11 text
★ napisz dokumentację
★ napisz testy
★ napisz kod
documentation-driven development
11
Sunday 20 October 13
Slide 12
Slide 12 text
★ napisz oczekiwane zachowanie systemu względem
użytkownika
★ napisz kod
behavior-driven development
12
Sunday 20 October 13
Slide 13
Slide 13 text
★ http://pypi.python.org/pypi/coverage
test coverage
13
Sunday 20 October 13
Slide 14
Slide 14 text
★ coś czego nie zautomatyzujemy ...
★ łatwo wyłapuje drobne błędy
★ oraz niejasności w kodzie
code review
14
Sunday 20 October 13
Slide 15
Slide 15 text
★ podczas przeglądania kodu pamiętajmy, że jesteśmy
delikatnymi duszami
code review
15
Sunday 20 October 13
Slide 16
Slide 16 text
★ podczas przeglądania kodu pamiętajmy, że jesteśmy
delikatnymi duszami
code review
16
Sunday 20 October 13
Slide 17
Slide 17 text
★ dużo testów jednostkowych i mało integracyjnych
★ bez paranoi: TDD ma nam pomagać a nie zabierać czas
★ dbać o to by, testowanie było łatwe
★ ... i szybkie
no dobra, to jak testować?
17
Sunday 20 October 13
Slide 18
Slide 18 text
jednostkowe czy integracyjne
18
Sunday 20 October 13
Slide 19
Slide 19 text
jednostkowe czy integracyjne
18
Sunday 20 October 13
Slide 20
Slide 20 text
★ najpierw opiszmy oczekiwane zachowanie systemu
★ Powinniśmy testować wszystkie kombinacje parametrów
wejściowych ...
★ a także różne kombinacje w różnych kontekstach, ale ...
jednostkowe czy integracyjne
19
Sunday 20 October 13
Slide 21
Slide 21 text
problem?
20
Sunday 20 October 13
Slide 22
Slide 22 text
problem
21
Sunday 20 October 13
Slide 23
Slide 23 text
poprawiony test
22
Sunday 20 October 13
Slide 24
Slide 24 text
poprawiona metoda
23
Sunday 20 October 13
Slide 25
Slide 25 text
★ nie dajmy się zwariować
★ nie chodzi TYLKO o kwestie biznesowe - chodzi o nasz
zespół, który bardziej czeka na poprawkę lub
funkcjonalność niż test
★ ... ale użytkownik też doceni, jeżeli np. jego poczta znowu
zacznie działać i nie będzie musiał czekać, aż programista
będzie łaskaw napisać test regresyjny
bez paranoi
24
Sunday 20 October 13
Slide 26
Slide 26 text
★ staszek jest świetnym programistą
★ ma 10+ lat doświadczenia, uprawia tdd, pomaga
współpracownikom, chłonie wiedzę i dzieli się nią
★ ale staszek raz na jakiś czas spędza 2 dni na napisanie
testu
★ do jednej funkcji/poprawki, którą napisał w 15 minut
paranoja
25
Sunday 20 October 13
Slide 27
Slide 27 text
★ staszek pracuje nad nowym projektem, w którym
zdecydowano użyć nieznanych mu narzędzi i bibliotek
★ narzędzia mają świetną dokumentację jak poprawnie pisać
kod i testy (hint: angularjs)
★ ale staszek nie zna jeszcze tych wspaniałości i nie ufa im
zbytnio - więc i tak ręcznie testuje swoją aplikację
★ EPIC FAIL
paranoja
26
Sunday 20 October 13
Slide 28
Slide 28 text
★ gdy nie jesteśmy pewni jak testować - nie próbujmy się
oszukiwać, że mamy testy automatyczne
★ gdy napisanie testu zajmuje nam zbyt długo - dajmy
spokój. Test napiszemy, jak wpadniemy jak to zrobić.
★ gdy widzimy, że ktoś wpada w paranoję: obrońmy go przed
samym sobą!
paranoja
27
Sunday 20 October 13
Slide 29
Slide 29 text
★ tzn. uruchamianie testów dla danego projektu powinno
sprowadzać się do uruchomienia jednej komendy
★ ... co często wymusza łatwy “bootstrap” projektu
★ dla paczek: python setup.py test (dba o zależności)
łatwe testowanie?
28
Sunday 20 October 13
Slide 30
Slide 30 text
★ jedna z najważniejszych cech dobrych testów
szybkie testy - po co?
29
Sunday 20 October 13
Slide 31
Slide 31 text
★ jak często otrzymujemy informację o popsutych testach
na serwerze CI?
★ ile maksymalnie mogą trwać testy żebyśmy je uruchamiali
po każdej zmianie? 1h? 30m? 10m? 5m? 5s? 2s?
★ feedback, malarz, perspektywa
szybkie testy - po co?
30
Sunday 20 October 13
Slide 32
Slide 32 text
perspektywa
31
Sunday 20 October 13
Slide 33
Slide 33 text
perspektywa
32
Sunday 20 October 13
Slide 34
Slide 34 text
perspektywa
33
Sunday 20 October 13
Slide 35
Slide 35 text
★ mało testów integracyjnych
★ dużo mockowania
★ obserwacja najwolniejszych testów
★ sprawdźmy dokumentację (django auth, simpletestcase)
★ setUp vs setUpClass
★ czy naprawdę potrzebujemy tych wszystkich danych dla
każdego testu?
szybkie testy - jak?
34
Sunday 20 October 13
Slide 36
Slide 36 text
★ jakość kodu (pyflakes/flake8)
★ przykłady w docstringach (doctesty)
★ generowanie dokumentacji
★ command line tools (np. scriptest)
co testować poza kodem?
35
Sunday 20 October 13
Slide 37
Slide 37 text
★ setup.py
★ przykładowa implementacja: https://github.com/
lukaszb/django-guardian/blob/master/extras.py
jakość kodu
36
Sunday 20 October 13
Slide 38
Slide 38 text
★ podstawowe
★ znane
★ mniej znane
★ specjalistyczne
Narzędzia
Sunday 20 October 13
★ unittest/doctest
★ nose
★ pytest
★ pyflakes/flake8
znane
39
Sunday 20 October 13
Slide 41
Slide 41 text
★ lettuce (bdd)
★ freshen (bdd, łatwiejsze regexy)
★ splinter (~selenium, ale ma wspólne api dla różnych
sterowników)
★ zc.buildout (automatyzuje ustawianie środowiska)
mniej znane
40
Sunday 20 October 13
Slide 42
Slide 42 text
★ funkload - testy wydajnościowe pisane jak unit testy
★ porunga - testowanie algorytmów
★ sqlmap - testy aplikacji w poszukiwaniu podatności sql
injection
★ tox - testowanie dla różnych wersji Python’a i/lub
zależności
specjalistyczne
41
Sunday 20 October 13
★ żeby pozwolić sobie na uruchamianie testów po każdej
zmianie pliku nasze testy muszą być bardzo szybkie
★ możemy też po prostu uruchamiać tylko te testy, które
dotyczą zmienianej przez nas funkcjonalności
natychmiastowy feedback
49
Sunday 20 October 13
Slide 51
Slide 51 text
★ py.test pozwala na
“oznaczanie” testów
natychmiastowy feedback
50
Sunday 20 October 13
Slide 52
Slide 52 text
natychmiastowy feedback
51
Sunday 20 October 13
Slide 53
Slide 53 text
natychmiastowy feedback
52
Sunday 20 October 13
Slide 54
Slide 54 text
★ pozwala na łatwe definiowanie środowisk testowych
★ korzysta z virtualenv i distribute
★ możemy uruchomić testy dla różnych wersji python’a
★ umożliwia uruchamianie dowolnej komendy, więc możemy
na przykład sprawdzać generowanie dokumentacji
tox
53
Sunday 20 October 13
Slide 55
Slide 55 text
★ instalacja
tox
54
Sunday 20 October 13
Slide 56
Slide 56 text
★ plik tox.ini
tox
55
Sunday 20 October 13
Slide 57
Slide 57 text
★ uruchamiamy dla wszystkich środowisk:
★ Albo tylko jednego:
tox
56
Sunday 20 October 13
Slide 58
Slide 58 text
★ testowanie różnych wersji pakietów
tox
57
Sunday 20 October 13
Slide 59
Slide 59 text
★ testowanie generowania dokumentacji
tox
58
Sunday 20 October 13
Slide 60
Slide 60 text
★ “dziedziczenie”
konfiguracji
tox
59
Sunday 20 October 13
Slide 61
Slide 61 text
★ wymaga setup.py
★ generalnie niepotrzebny, jeśli nie planujemy zapewniać
wsparcia wielu wersji python’a
tox - wady
60
Sunday 20 October 13
★ ponad 10 lat rozwoju
★ architektura master/slave
★ działa na wszystkich popularnych platformach
★ łatwo przechowuje się konfigurację w repozytorium
★ python!
buildbot
62
Sunday 20 October 13
Slide 64
Slide 64 text
buildbot - platformy
63
Sunday 20 October 13
Slide 65
Slide 65 text
buildbot - steps
64
Sunday 20 October 13
Slide 66
Slide 66 text
★ tak naprawdę jest to framework, nie gotowy produkt
★ czasami gubi logi
★ czasami slave’y tracą połączenie z master’em
★ siermiężny interfejs
buildbot - wady
65
Sunday 20 October 13
Slide 67
Slide 67 text
★ wystarczy zalogować się na https://travis-ci.org
★ ... zarejestrować swój projekt
★ ... oraz dodać plik .travis.yml
travis ci
66
Sunday 20 October 13
Slide 68
Slide 68 text
travis ci - .travis.yml
67
Sunday 20 October 13
Slide 69
Slide 69 text
★ niby open source, ale ...
- zależy od zewnętrznych usług (np. websocket’y)
- separacja codebase’u (backend/frontend) utrudnia
deployment
★ limit czasowy (50min lub 10min jeśli nie ma logów)
travis ci - problem?
68
Sunday 20 October 13
Slide 70
Slide 70 text
zeus-ci
69
Sunday 20 October 13
Slide 71
Slide 71 text
★ User experience
★ różne platformy
★ produkt i framework
★ build matrix
★ skalowanie slave’ów
★ łatwość wdrożenia
★ api
★ rozszerzalność
★ github PR support
★ rozpoznaje tox’a
zeus ci - cele
70
Sunday 20 October 13
Slide 72
Slide 72 text
★ python 2.6/2.7/3.3+ (choć celujemy w 3.3+)
★ django
★ django-rest-framework
★ celery
★ angular.js
zeus ci - technologie
71
Sunday 20 October 13
Slide 73
Slide 73 text
★ https://github.com/lukaszb/zeusci
zeus ci
72
Sunday 20 October 13