Testy aplikacji webowych

Podobne dokumenty
Aplikacje WWW. Krzysztof Ciebiera. 3 kwietnia 2014

Testowanie aplikacji. Kurs języka Ruby

Programowanie w Ruby

Kurs rozszerzony języka Python

Programowanie i projektowanie obiektowe

Kurs języka Python. Wykład 14. Marcin Młotkowski. 25 stycznia Python i Apache Pythonowe platformy aplikacyjne. Dystrybucja aplikacji w U*IX

Automatyzacja testów aplikacji webowych w Selenium podstawy. Natalia Krawczyk

Kurs języka Python. Wykład 11. Marcin Młotkowski. 4 stycznia Kontrola poprawności podczas biegu programu. 2 Testowanie oprogramowania

Podstawy programowania III WYKŁAD 6

MeetingHelper. Aplikacja Android ułatwiająca przekazywanie materiałów pomiędzy uczestnikami spotkania. Instrukcja obsługi dla programisty

Programowanie w Ruby

TDD w Django South Sorl Haystack + Whoosh Małe, a cieszy Deployment Koniec. Wspomagacze Django. Jan Filipowski. 25 maja 2010

Testowanie aplikacji Java Servlets

OpenPoland.net API Documentation

Aplikacje WWW - lab 11

Kurs rozszerzony języka Python

Michał Sierzputowski. Zautomatyzuj swoje testy automatyczne oparte o Selenium

Jak pisać testy? Wersja 2

Quiz Aplikacja internetowa

Całościowe podejście do testowania automatycznego dla programistów. (TDD, BDD, Spec. by Example, wzorce, narzędzia)

Zaawansowany kurs języka Python

Testowanie. Ryszard Beczek & Piotr Miłkowski 1 04/11/07

Programowanie obiektowe

Programowanie zespołowe

Warsztat: "Automatyzacja testów (JAVA) - od podstaw"

Modele. Najcz. Metoda unicode definiuje sposób wyświetlania obiektu w postaci tekstowej. BooleanField - pole logiczne, True/False

Kurs rozszerzony języka Python

Czysta architektura (nawet z Django!) Sebas an PyWaw 72

Całościowe podejście do testowania automatycznego dla programistów. /C#/PHP (TDD, BDD, Spec. by Example, wzorce, narzędzia)

Wybrane działy Informatyki Stosowanej

Aplikacje webowe z wykorzystaniem Node.js oraz Express

Testowanie II. Celem zajęć jest zapoznanie studentów z oceną jakości testów przy wykorzystaniu metryk pokrycia kodu testami (ang. code coverage).

Wprowadzenie do technologii JavaServer Faces 2.1 na podstawie

Testy jednostkowe - zastosowanie oprogramowania JUNIT 4.0 Zofia Kruczkiewicz

Komunikacja Człowiek-Komputer

Laboratorium 2. def detail(request, question_id): return HttpResponse("Patrzysz na pytanie %s." % question_id)

Tester oprogramowania 2014/15 Tematy prac dyplomowych

Wprowadzenie do technologii JavaServer Faces 2.1 na podstawie

Aktualizacja SMSFall v Data publikacji:

NoSQL Not Only SQL, CouchDB. I.Wojnicki, NoSQL. Apache CouchDB has started. Time to relax. Igor Wojnicki

Laboratorium 1. Wzorce oprogramowania lab1, Zofia Kruczkiewicz

Ćwiczenia 2 IBM DB2 Data Studio

Wdrożenie modułu płatności eservice. dla systemu Zen Cart

Programowanie warstwy klienta w aplikacji JavaEE

Spis treści. Dekoratory. 1 Dekoratory 1.1 Zadanie Zadanie Zadanie Zadanie 4

Poznaj ASP.NET MVC. Kamil Cieślak Microsoft Student Partner

Python. Wprowadzenie. Jolanta Bachan

Wstęp do testowania : Szymon Ramczykowski

METODY PROGRAMOWANIA

Aplikacje www laboratorium

ASP.NET MVC. Podstawy. Zaawansowane programowanie internetowe Instrukcja nr 3

Programowanie zorientowane obiektowo. Mateusz Kołecki

Politechnika Wrocławska

n+1 sposobów na automatyczne testy aplikacji mobilnych WrotQA, webinar Łukasz Siudakiewicz Damian Szczurek Automation Test Engineer

Wyzwania w automatyzacji Selenium WebDriver

Programowanie poprzez testy z wykorzystaniem JUnit

Projektowanie Aplikacji Internetowych Temat: Serwer wymiany plików Documentation Page 1

Wdrożenie modułu płatności eservice. dla systemu Gekosale 1.4

Budowa prostej aplikacji wielowarstwowej. Laboratorium 1 Programowanie komponentowe Zofia Kruczkiewicz

Jak okiełznać frontend w Django? Piotr Maliński

Automaty do zadań specjalnych. Olga Maciaszek-Sharma, Artur Kotow Wersja 1,

Wdrożenie modułu płatności eservice. dla systemu oscommerce 2.3.x

Ciągłe dostarczanie oprogramowania : kompletny przewodnik / Eberhard Wolff. Gliwice, cop Spis treści

Zaawansowany kurs języka Python

Programowanie w Sieci Internet Python - c. d. Kraków, 28 listopada 2014 r. mgr Piotr Rytko Wydział Matematyki i Informatyki

Środowisko programisty

Db4o obiektowa baza danych wersja.net

Zaawansowany kurs języka Python

JĘZYK PYTHON - NARZĘDZIE DLA KAŻDEGO NAUKOWCA. Marcin Lewandowski [ mlew@ippt.gov.pl ]

MVC w praktyce tworzymy system artykułów. cz. 1

Kurs rozszerzony języka Python

Zaawansowane aplikacje internetowe - laboratorium Architektura Spring.

Zaawansowane aplikacje internetowe laboratorium REST

Program szkolenia: Tworzenie aplikacji w Ruby on Rails z wykorzystaniem zwinnych metodyk

(Apache) CouchDB. Krzysztof Kulewski 2008

Programowanie w Sieci Internet. Python: Wątki. Kraków, 12 grudnia 2014 r. mgr Piotr Rytko Wydział Matematyki i Informatyki

SSO Management API configuration

GNU GProf i GCov. przygotował: Krzysztof Jurczuk Politechnika Białostocka Wydział Informatyki Katedra Oprogramowania ul. Wiejska 45A Białystok

Dokumentacja techniczna API systemu SimPay.pl

Podręcznik Integracji

Praca Dyplomowa Magisterska

Podstawy programowania w Pythonie

Programowanie i projektowanie obiektowe

Android tworzenie aplikacji mobilnych

Automatyczne testowanie aplikacji Android

Architektura MVC w ASP.NET. Autor wykładu: Marek Wojciechowski

Instrukcja laboratoryjna

Zrąb JavascriptMVC. Krzysztof Płocharz. 6 kwiecień Uniwersytet Warszawski

Zaawansowany kurs języka Python

Dokumentacja interfejsu HTTPD. Platforma BSMS.PL Instrukcja podłączenia po przez http

Programowanie w Internecie

Gerard Frankowski, Zespół Bezpieczeństwa PCSS. Nowoczesne technologie bliżej nas Poznań,

Chatter Aplikacja internetowa

Instalacja. Dla przykładu, w instrukcji tej wykorzystano model TD-8817.

Automatyzacja Testowania w WEB 2.0

Informatyka I. Standard JDBC Programowanie aplikacji bazodanowych w języku Java

Zaawansowany kurs języka Python

Laboratorium z przedmiotu: Inżynieria Oprogramowania INP002017_ Laboratorium 11 Testy akceptacyjne z wykorzystaniem narzędzia FitNesse

Bazy danych. Plan wykładu. Rozproszona baza danych. Fragmetaryzacja. Cechy bazy rozproszonej. Replikacje (zalety) Wykład 15: Rozproszone bazy danych

Transkrypt:

Testy aplikacji webowych 13 kwietnia 2016 Testy aplikacji webowych 13 kwietnia 2016 1 / 26

1 Ogólnie 2 Django Baza danych Widoki Zaawansowane 3 Selenium 4 Testy wydajno±ciowe 5 Test Driven Developement 6 Technikala pythonowe Testy aplikacji webowych 13 kwietnia 2016 2 / 26

Test jednostkowy Test jednostkowy Test jednostkowy metoda testowania tworzonego oprogramowania poprzez wykonywanie testów werykuj cych poprawno± dziaªania pojedynczych elementów (jednostek) programu np. metod lub obiektów w programowaniu obiektowym lub procedur w programowaniu proceduralnym. Testowany fragment programu poddawany jest testowi, który wykonuje go i porównuje wynik (np. zwrócone warto±ci, stan obiektu, zgªoszone wyj tki) z oczekiwanymi wynikami tak pozytywnymi, jak i negatywnymi (niepowodzenie dziaªania kodu w okre±lonych sytuacjach równie» mo»e podlega testowaniu). * - wikipedia Testy aplikacji webowych 13 kwietnia 2016 3 / 26

Zalety Szybkie wykrycie bª dów Uproszczenie procesu wprowadzania zmian Dokumentacja Lepszy projekt aplikacji Testy aplikacji webowych 13 kwietnia 2016 4 / 26

Zastosowania Metodologie zwinne (TDD, Extreme Programming) Automatyzacja Szkielety do testowania Wsparcie ze strony j zyków Testy aplikacji webowych 13 kwietnia 2016 5 / 26

Przykªad w Django from django. test import TestCase from myapp. models import Animal class AnimalTestCase ( TestCase ): def setup ( self ): Animal. objects. create ( name =" lion ", sound =" roar ") Animal. objects. create ( name =" cat ", sound =" meow ") def test_ animals_ can_ speak ( self ): " Animals that can speak are correctly identified " lion = Animal. objects. get ( name =" lion ") cat = Animal. objects. get ( name =" cat ") self. assertequal ( lion. speak (), ' lion says " roar " ') self. assertequal ( cat. speak (), 'cat says " meow " ') Testy aplikacji webowych 13 kwietnia 2016 6 / 26

Uruchomienie $./ manage. py test Creating test database... ================================================== FAIL : test_ was_ published_ recently_ with_ future_ poll ( polls. tests. PollMethodTests ) -------------------------------------------------- Traceback ( most recent call last ): File "/ dev / mysite / polls / tests. py ", line 16, in test_ was_ published_ recently_ with_ future_ poll self. assertequal ( future_ poll. was_ published_ recently (), False ) AssertionError : True!= False --------------------------------------------------- Ran 1 test in 0.003 s FAILED ( failures =1) Testy 13 kwietnia 2016 7 / 26

Zasady Testy przechowujemy w plikach test*.py (tests.py i test_xxx.py) Testy wykonywane s w oddzielnych transakcjach Testy 13 kwietnia 2016 8 / 26

Baza danych Testy wymagaj ce bazy danych nie u»ywaj produkcyjnej bazy danych Baza danych tworzona jest specjalnie na potrzeby testu i kasowana po jego zako«czeniu (opcja keeppdb temu zapobiega) Testy 13 kwietnia 2016 9 / 26

Widoki Sztuczny Client Nie uruchamia serwera Testowanie odbywa si na zasadzie ±tring-matchingu" Testy 13 kwietnia 2016 10 / 26

Przykªad testu widoku from django. core. urlresolvers import reverse class QuestionViewTests ( TestCase ): def test_ index_ view_ with_ no_ questions ( self ): """ If no questions exist, an appropriate message should be displayed. """ response = self. client. get ( reverse ( ' polls : index ')) self. assertequal ( response. status_code, 200) self. assertcontains ( response, " No polls are available.") self. assertquerysetequal ( response. context [ ' latest_question_list '], []) Testy 13 kwietnia 2016 11 / 26

Opcje klienta >>> c = Client ( HTTP_USER_AGENT = ' Mozilla /5.0 ') >>> c = Client () >>> c. get ( '/ customers / details / ', { ' name ': ' fred ', 'age ': 7}) >>> c = Client () >>> c. get ( '/ customers / details / ', { ' name ': ' fred ', 'age ': 7},... HTTP_ X_ REQUESTED_ WITH = ' XMLHttpRequest ') >>> response = c. get ( '/ redirect_me / ', follow = True ) >>> response. redirect_ chain [( ' http :// testserver / next / ', 302), ( ' http :// testserver / final / ', 302)] >>> c = Client () >>> c. post ( '/ login / ', { ' name ': ' fred ', ' passwd ': ' secret '}) Testy 13 kwietnia 2016 12 / 26

U»ytkownicy >>> create_user ( ' fred ', email = None, password = ' secret ') >>> c = Client () >>> c. login ( username = ' fred ', password = ' secret ') Testy 13 kwietnia 2016 13 / 26

Odpowiedzi Response content - tre± odpowiedzi context - kontekst szablonu json - sparsowany json tre±ci status_code - jaki byª status resolver_match - jak zostaªa rozwi zana odpowied¹ Static cookies - ciasteczka session - sesja Testy 13 kwietnia 2016 14 / 26

RequestFactory class SimpleTest ( TestCase ): def setup ( self ): self. factory = RequestFactory () self. user = User. objects. create_user ( username = ' jacob ', email = ' jacob@ ', password = ' top_secret ') def test_ details ( self ): request = self. factory. get ( '/ customer / details ') request. user = self. user response = my_view ( request ) self. assertequal ( response. status_code, 200) Testy 13 kwietnia 2016 15 / 26

Bazy danych mo»na testowa wiele baz danych mo»na u»y bazy danych jako repliki mo»na u»ywa xtures (danych w plikach) mo»na resetowa sekwencje Testy 13 kwietnia 2016 16 / 26

Selenium Selenium Selenium to szkielet do testowania aplikacji webowych. Pozwala nagrywa sesje, zawiera wªasny j zyk makr oraz IDE. Posiada sterowniki do kilku popularnych j zyków. Mo»na go u»ywa np. z Firefoxem i Chrome. Ma odpowiedniki komercyjne. Testy 13 kwietnia 2016 17 / 26

Selenium-IDE Testy 13 kwietnia 2016 18 / 26

Python driver from selenium import webdriver from selenium. webdriver. common. keys import Keys driver = webdriver. Firefox () driver. get (" http :// www. python. org ") assert " Python " in driver. title elem = driver. find_element_by_name ("q") elem. send_keys (" pycon ") elem. send_keys ( Keys. RETURN ) assert " No results found." not in driver. page_ source driver. close () Testy 13 kwietnia 2016 19 / 26

Testy wydajno±ciowe Testuj zarówno aplikacj jak i infrastruktur Wymagaj ±rodowiska testowego Czasem potra co± zniszczy Ich przeprowadzenie wymaga niekiedy dodatkowych zasobów Testy 13 kwietnia 2016 20 / 26

Locust from locust import HttpLocust, TaskSet def login (l ): l. client. post ("/ login ", {" username ":" ellen_key ", " password ":" education " }) def index (l ): l. client. get ("/") def profile (l ): l. client. get ("/ profile ") class UserBehavior ( TaskSet ): tasks = { index :2, profile :1} def on_start ( self ): login ( self ) class WebsiteUser ( HttpLocust ): task_ set = UserBehavior min_ wait =5000 max_ wait =9000 Testy 13 kwietnia 2016 21 / 26

Locust Testy 13 kwietnia 2016 22 / 26

TDD Testy 13 kwietnia 2016 23 / 26

Zasady TDD manifest 1 Wymy±l co chesz zrobi 2 Wymy±l jak to przettestowa 3 Napisz maªy test. My±l o API 4 Napisz tyle kodu,»eby test si wywalaª 5 Patrz jak le»y 6 Napisz tyle kodu,»eby test przechodziª 7 Patrz jak przechodzi 8 Refaktoryzuj 9 Powtarzaj tak dªugo, a» nie masz pomysªów Testy 13 kwietnia 2016 24 / 26

Testowanie jako±ci kodu pep8 - wygl d pep257 - komentarze pylint3 - linter coverage - pokrycie testami Testy 13 kwietnia 2016 25 / 26

Syntastic Testy 13 kwietnia 2016 26 / 26