title: | TW2019 BDD workshop |
---|
css: | css/my.css |
---|
Note
- my zaczynamy - następny slajd
- przedstawienie się uczestników warsztatu?
- jakie są oczekiwania uczestników?
- jaki jest ich poziom wiedzy?
O nas | |
---|---|
Dariusz Duleba | Bartosz Bielicki |
Software Engineer at Nokia | DevOps Engineer at Huuuge Games |
O czym i co tak na prawdę będziemy robić?
Note
- 2 bloki
- jedna przerwa w każdym bloku? (10 min) - ustalimy jeśli będzie potrzebna
- niejasności i problemy wyjaśniamy na bieżąco
- instalacja VirtualBox'a 5.x/6.x
- tworzenie maszyny wirtulanej na podstawie przygotowanego obrazu - 15 GB (hasło: tw2019)
- rozwiązywanie problemów
- środowisko działa offline
- wszytskie materiały dostępne są na GitHub
- źródła_prezentacji
- Ubuntu Mate 18.04.3
- python 3
- PyCharm
- aplikacja testowa na podstawie realworld
- źródła_aplikacji_testowej
- aplikacja jest skonteneryzowana
- frontend: react + redux
- backend: flask
- db: postgres
- docker-compose
- start-app.sh
- stop-app.sh
- http://127.0.0.1
https://i2.wp.com/ucgosu.pl/wp-content/uploads/2018/09/test_pyramid.png?ssl=1
Note
- Przerwa jeśli będzie potrzebna i czas pozwoli - 10 min
- źródła_testów_integracyjnych
- z wykorzystaniem nokia_radish_bdd_extensions
- jak utworzyć wirtualne środowisko python'a
- jak zaimplementować własnego REST klienta
- jak wykorzystać klienta i napisać własne testy integracyjne (backend + db)
- jak wygenerować raport z testów
- jak debugować testy z użyciem PyCharm
Note
- Jest to dobre wprowadzenie do środowiska przed przejściem do bardziej skomplikowanej implementacji testów, które wykorzystują BDD (gherkin) oraz selenium.
$ python3 -m venv .env
$ . .env/bin/activate
$ pip install -U pip wheel
$ pip install -r requirements.txt
...
$ deactivate
https://github.com/bbielicki/tw2019-app-client/blob/master/conduit/client.py
- rejestracja użytkownika
- powtórna rejestracja użytkownika
- pobranie informacji o zalogowanym użytkowniku
- artykuł dostępny dla niezalogowanego użytkownika
- polubienie artykułu - ćwiczenie
$ nosetests --with-xunit test.backend
Note
- przerwa obiadowa
- źródła_testów_ui
- z wykorzystaniem nokia_radish_bdd_extensions oraz _źródła_testów_integracyjnych
- trzochę teorii: BDD, Gherkin, radish, selenium, page object pattern, ...
- jak napisać własne testy używając radish framework
- poznamy kolejne funkcjonalności nokia_radish_bdd_extensions
- jak odpalać testy selenium wykorzystując selenium docker image
- jak wygenerować raport z testów zaimplementowanych przy użyciu radish framework
Note
- testy będą podobne do testów integracyjnych ale będą to testy E2E/UI wykorzystujące przeglądarkę
- Behaviour-Driven Development (BDD)
- is the software development process that Cucumber was built to support.
What is BDD?
BDD is a way for software teams to work that closes the gap between business people and technical people by:
- Encouraging collaboration across roles to build shared understanding of the the problem to be solved
- Working in rapid, small iterations to increase feedback and the flow of value
- Producing system documentation that is automatically checked against the system’s behaviour
We do this by focussing collaborative work around concrete, real-world examples that illustrate how we want the system to behave. We use those examples to guide us from concept through to implementation, in a process of continuous collaboration.
Gherkin is a Business Readable, Domain Specific Language created especially for behavior descriptions. It gives you the ability to remove logic details from behavior tests.
Note
https://docs.behat.org/en/v2.5/guides/1.gherkin.html https://cucumber.io/docs/gherkin/reference/
radish is a Behavior Driven Development tool completely written in python.
- Gherkin compatible
- radish is fully compatible with cucumber's Gherkin language.
- Additional feature syntax
- In addition to the fully supported Gherkin language radish supports some more functionality like: Scenario Preconditions, Scenario Loops, Variables and Expressions.
- Pythonic
- radish tries to provide the most awesome pythonic experiences when implementing your steps and hooks. Your test code should be as great as your project's code.
Selenium automates browsers. That's it! What you do with that power is entirely up to you. Primarily, it is for automating web applications for testing purposes, but is certainly not limited to just that. Boring web-based administration tasks can (and should!) be automated as well.
Selenium has the support of some of the largest browser vendors who have taken (or are taking) steps to make Selenium a native part of their browser. It is also the core technology in countless other browser automation tools, APIs and frameworks.
selenium docker* polubienie artykułu
$ docker run -d -p 4444:4444 -v /dev/shm:/dev/shm selenium/standalone-chrome:3.141.59-vanadium $ docker run --network host --name selenium --restart unless-stopped -d -p 4444:4444 -v /dev/shm:/dev/shm selenium/standalone-chrome:latest
----E2E
python-testcontainers provides capabilities to spin up a docker containers for test purposes would that be a database, Selenium web browser or any other cotainer.
- selenoid
- zalenium
- logs attaching
- in case of error handling
- attach page source
- attach page screenshot
- attach page console logs
- additional logging
Page Objects are a testing pattern for websites. Page Objects model a page on your site to provide accessors and methods for interacting with this page, both to reduce boilerplate and provide a single place for element locators.
- rejestracja użytkownika
- rejestracja użytkownika ze znakami specjalnymi
- logowanie użytkownika
- błędne logowanie użytkownika
- tworzenie artykułu
- artykuł dostępny dla niezalogowanego użytkownika - ćwiczenie
Dariusz Duleba & Bartosz Bielicki, TestWarez 2019