Projekt i implementacja systemów webowych

Testowanie automatyczne

(ze szczególnym naciskiem na frontend)

mgr inż. Maciej Małecki

Automatyzacja testów

Użycie narzędzi (kod, skrypty, itp) do wykonywania testów oprogramowania i ewentualnego wykrywania odchyleń od założonych wyników.

Po co automatyzujemy testy?

Powtarzalność
Szybka informacja zwrotna
Koszty
Tools don't test. Only people test. Tools only perform actions that "help" people test. - James Bach, http://www.satisfice.com/blog/

Rodzaje testów automatycznych

  • Testy jednostkowe (unit tests) - pisane na poziomie jednostki programistycznej (funkcja, procedura, moduł, klasa).
  • Testy modułowe/komponentowe - testowanie większych, zintegrowanych konstrukcji.
  • Testy integracyjne - testowanie zintegrowanych warstw, komponentów lub systemów.
  • Testy E2E - testowanie kompletnej aplikacji.

Piramida testów

Test Pyramid
https://martinfowler.com/articles/practical-test-pyramid.html

Testy w aplikacji webowej

Rich frontend architecture

Testy jednostkowe backendu

Backend module tests

Testy integracyjne backendu

Backend integration tests

Testy jednostkowe frontendu

Frontend unit tests

Testy komponentowe frontendu

Frontend component tests

Testy E2E

E2E tests

Testowanie automatyczne frontendu

Jasmine framework testujący kod w JavaScript (ale także Ruby i Python).

Test files
Tested code
Spec code

Selenium

Selenium

Testowanie E2E

Protractor - narzędzie do testowania aplikacji Angular z użyciem prawdziwej przeglądarki.

Protractor
Cypress

Podsumowanie

  • Testy E2E (szczególnie testujące GUI) są bardzo kosztowne.
  • Dokładne testowanie całej aplikacji z użyciem E2E jest niepraktyczne.
  • Testy niskiego rzędu powinny wykonywać się szybko.
  • Uwaga na pułapki "mockowania".

Przykłady

Backend

Backend

https://github.com/smellofcode/udm-documents

Frontend

Frontend

https://github.com/modern-web-dev/ng-course-advanced-22.08.2022/tree/33-tests-fixed