[QE 2018] Paul Gerrard – Automating Assurance: Tools, Collaboration and DevOps
Testy akceptacyjne w pigułce.
1.
2. Klient
0 Korporacja specjalizująca się w tworzeniu
oprogramowania dla użytkowników transportu
publicznego i prywatnego
0 Bogaty portfel projektów, od aplikacji internetowych
po aplikacje na urządzenia mobilne, webowe i
natywne
3. Problem
0Częste release jak poradzić sobie z
zapewnieniem jakości dla kolejnych wersji
oprogramowania ułatwiającego korzystanie z
komunikacji miejskiej w Wielkiej Brytanii?
0Wiele klientów dedykowane rozwiązania pod
wybrane obszary Wielkiej Brytanii o zbliżonej
funkcjonalności
0Wiele aplikacji wachlarz implementacji... od
aplikacji internetowych po aplikacje internetowe
mobilne oraz natywne mobilne
13. Ograniczenia
0 Co z osobami, które nie mają doświadczenia w
programowaniu... Czy oni mogą tworzyć
automatyczne skrypty?
0 Przy dobrej architekturze mogą tworzyć
automatyczne przypadki testowe, skorzystać ze
stworzonych kroków testowych
15. Page Objects
0 Niech nasza strona bedzie zbudowana z
komponentów, obiektów, specjalizujących się w
wybranych funkcjach
HomePage
*SearchPane
- (void) search(String term)
*ResultsPane
- (Collection<SearchResult>)
getResults()
16. Page Factory
0 Zamiast ręcznie wyszukiwać elementy użyj czytelnych anotacji
@FindBy(how = How.NAME, using = "q")
private WebElement searchBox;
0 Skorzystaj z opóźnionego wyszukiwania przy AJAX
ElementLocatorFactory finder = new
AjaxElementLocatorFactory(
this.driver, TIMEOUT);
PageFactory.initElements(finder, this);
17. Loadable Components
0 Niech twoje narzędzie samo zarządza wczytywaniem odpowiednich
PageObjects i sprawdzaniem ich poprawności
@Override
protected void load() {
driver.get("http://code.google.com/p/selenium/issues/en
try");
}
@Override
protected void isLoaded() throws Error {
String url = driver.getCurrentUrl();
assertTrue("Not on the issue entry page: " + url,
url.endsWith("/entry"));
}
18. Data Driven Testing
0 Generuj nowe dane testowe z różnych podzbiorów,
testuj swoje oprogramowanie zbiorami rozmytymi,
nie popadaj w rutynę! Staraj sie tworzyć unikalne
zbiory testowe, by jeszcze bardziej uniezależnić swoje
testy.
19. Wstrzykiwanie kontekstu
0 Korzystaj z narzędzi umożliwiających zarządzanie
kontekstem poprzez wstrzykiwanie. Wstrzykuj
inormacje o środowisku testowym, wstrzykuj
informacje o testowanym serwisie, dane testowe,
reguły tworzenia obiektów, etc.
20. Set up & Tear down
0 Korzystaj z Set up i Tear down do generacji
unikalnych danych testowych i tworzenia
odpowiedniej konfiguracji bazy danych i innych
zależności, dzięki czemu będziesz w stanie tworzyć
testy niezależne, które będziesz w stanie uruchomić
jednocześnie na wielu maszynach.
40. Stabilne Środowisko
0 Przydatne narzędzia
0 PsExec – zdalna kontrola nad maszynami z systemem
Windows z poziomu linii poleceń
0 Ssh – zdalna kontrola nad maszynami z systemem Linux z
poziomu linii poleceń
0 CCleaner – czyszczenie cache i historii aplikacji, przeglądarek,
systemu operacyjnego
0 VMRun – zdalna kontrola nad maszynami VMWare,
restartowanie, przywracanie obrazów, z poziomu linii poleceń
0 Adb – kontrola nad emulatorami Androida z poziomu linii
poleceń
42. Zarządzanie Przypadkami
Testowymi
0 Scenariusze w BDD - Cucumber
Feature: As a user I want to find places and nearby stops
@web @mobile
Scenario Outline: As a user I want to places matching my
choice
Given I navigated to the home page
When I search for <place> from the home page
Then the following list of matched places is returned
| name
| postcode
|
| <first-name>
| <first-postcode>
|
| <second-name>
| <second-postcode>
|
| <third-name>
| <third-postcode>
|
| <fourth-name>
| <fourth-postcode>
|
45. Zarządzanie Konfiguracjami
Testowymi
0 Narzędzia
0 Maven
0 PicoContainer
0 Jenkins
0 Technika
0 Parametryzowanie
0 Wstrzykiwanie
0 Rezultat
0 Możliwość definiowania konfiguracji testowej w pliku XML
0 Możliwość uruchamiania testów dla odpowiedniej konfiguracji z
poziomu lini poleceń
0 Rozszerzalność konfiguracji
0 Definicje uruchomień dla różnych konfiguracji
46. Zarządzanie Harmonogramem
Testów
0 Narzędzia
0 Jenkins
0 Technika
0 Nasłuchiwanie na wykonanie projektu nadrzędnego
0 Wykonywanie z zadaną częstotliwością
0 Rezultat
0 Okresowa kontrola jakości projektu
Pokazać pare przykładowych stron, aplikacji na androida, pokazać funkcjonalnośc aplikacji.
Pokazać przykłady aplikacji tworzonych dla web, web mobile i native z jednego portfela.
Zazanczyć, że każda z warstw jest bardzo ważna i rozpatrywanie ich oddzielnie może powodować problemu we wdrażaniu automatyzacji.
Zaznaczyć, że jak w przypadku warstw problemu również należy implementować skrypty zwracając uwagę na wszystkie trzy czynniki.Zaznaczyć, że dobry software tester powinien być również dobrym developerem, gdyż jakość tworzonych skryptów i ich wdrażanie oraz maintenance zależy od jakości jego kodu.
Pokazać przykładowe testy napisane z wykorzystaniem API WebDriver i Robotium.Wskazać wspólne cechy, wskazać różnice.Opisać proces instalacji narzędzi oraz wykonywania testów.
Wspomnieć, że przykładowe rozwiązanie problemu zostanie przedstawione w dalszej części prezentacji.
Narzędzia są niczym bez zastosowania dobrych praktyk tworzenia skryptów automatyzujacych testowanie.Pokazać przykładowe fragmenty kodu bez wykorzystania technik i dobrych praktyk oraz z ich zastosowaniem.Zaprezentować Page Objects i Page Factory, wspomnieć o Data Driven Testing oraz poinformować, że przykad tej techniki będzie pokazany w późniejszej cześci wykładu.Wskazać argumenty za stosowanie dobrych praktyk, rozszerzalność, czytelność, łatwość zmiany, etc.Przygotowywanie danych testowych pod wilowatkowe wywolanie, korzystanie z set up i tear down, tworzenie wlasnych zbiorow danych testowych, niezaleznych testow.
Wszystki trzy składniki tworzą kompletne środowisko.Środowiska powinny być tworzone pod produkty, na podstawie ich specyfikacji.
Omówić zagadnienie rozproszenia na przykładzie komunikacji Master – Slave.
Rozproszenie z wykorzystaniem WebDriver Grida.Pokazać przy pomocy dwu maszyn wirtualnych jak proste jest zestawienie grida.Pokazać jak proste jest połączenie do grida, wybranie przeglądark i odpalenie testu.Pokazać grid firmowy.Wspomnieć, że na jednym slave może być dostępnych wiele przeglądarek oraz, że możliwy jest wybór na której przeglądarce, wraz z wersją, chcemy uruchomić test, poinformować, że idea będzie przedstawiona przy omawianiu zagadnienia zarządzania.
Jenkins jest masterem... ale troszke innym, gdyż nie rozdziela zadań tak jak w przypadku grida.Pokazać jak instaluje się webdriver na emulatorach i urzadzeniach rzeczywistych.Uświadomić róninice pomiędzy webdriver grid a testowaniem webmobile z użyciem iponedriver, czy androidriver.Wspomnieć, że na jednym slave może być dostępnych wiele emulatorów oraz, że możliwy jest wybór na którym emulatorze chcemy uruchomić test, poinformować, że idea będzie przedstawiona przy omawianiu zagadnienia zarządzania.Wspomnięć, że tak samo jak emulatora do slave mogą zostać przyłączone rzeczywiste urządzenia na których mogą być uruchamiane testy.
Rozproszenie za pomocą jenkins master-slave.Pokazać jak proste jest przyłączenie slave do mastera w jenkinsie.Pokazać jak sie definiuje, który job ma być wykorzystywany na jakim slave.Wskazać różnice tego rozwiązania z innymi.Wspomnieć, że na jednym slave może być dostępnych wiele emulatorów oraz, że możliwy jest wybór na którym emulatorze chcemy uruchomić test, poinformować, że idea będzie przedstawiona przy omawianiu zagadnienia zarządzania.Wspomnięć, że tak samo jak emulatora do slave mogą zostać przyłączone rzeczywiste urządzenia na których mogą być uruchamiane testy.
Omówić co tak na prawdę znaczy zróżnicowane, że chodzi o ilość dostępnych, różnych konfiguracji testowych.Wspomnieć w jaki sposób zdefiniować konfiguracje testowe w środowisku, na podstawie dokumentacji projektu, statystyk użytkowania urządzeń, przeglądarek, systemów operacyjnych, czy rzeczywistych statystyk użytkowania aplikacji.
Wspomnięć o różnych przeglądarkach, wersjach przeglądarek, popularyzcji IE w korporacjach, szczególnie niższych wersji ze względu na politykę bezpieczeństa i podejście do tworzenia dedykowanego oprogramowania.
Wspomieć o dostępnych systemach operacyjnych, o tym, że powinny być dzielone na rodziny (rodzina systemów windows), że nie powinniśmy testować np. przeglądarki chrome dla wielu systemów operacyjnych rodziny windows (sandbox).
Wspomnieć o różnych dostępnych rodzinach urządzeń mobilnych, o tym, że testować możemy emulatory i urządzenia rzeczywiste.Poinformować, że chociaż jest dostępny webdriver dla blackberry, jest on jednak bardzo niestabilny i nie będzie omawiany.Poopowiadać troche o developmencie na BlackBerry.
Wspomnieć o różnych systemach operacyjnych na urządzeniach mobilnych.Wspomnięc również o konieczności testowania różnych rożdzielczości, landscape, portrait.
Zaznaczyć, że prezentacja będzie omawiała jedynie testowanie Native Mobile pod Androidem.Chociaż można testować na urządzeniach, to lepiej żeby byłu zrootowane, tj. z dostępem do ciemnych zakamarków pamięci, by odzyskać wyniki testów.
Wspomnięć o konieczności testowania aplikacji na różnych wersjach androida, back capability.
Co to znaczy środowisko stabilne? Takie, które dla każdego przebiegu testów będzie zachowywało się tak samo, nie będzie podatne na zmiany wynikające z czynników zewnętrznych (aktualizacji), jak i przez same testy (zapisywanie informacji w cache, historii, etc.).
Wspomnięć o napotkanych problemach i w jaki sposób je rozwiązano.Wspomnieć o pre, post stepach w Jenkinsie, o dodatkowym serwerze zarządzającym stanem slave i masterem.
Najważniejsza kwestia.Sama implementacja i środowisko jest nieważne, jeżeli nie będziemy w stanie odpowiednio wszystkim zarządzać, otrzymywać odpowiednie rezultaty.Wspomnieć, że często do automatyzacji nie podchodzi się jak do projektu, pomijając kwestie zarządzania, przez co automatyzacja może zakończyć się klęską.
Co tak na prawdę definiuje gdzie jakie testy zostaną uruchomione.Wspomnieć, że automatyzacja to nie tylko automatyzacja przypadków testowych ale również całego procesu.Pokazać na przykładzie jak łatwo definiować kontekst testu, konfigurację testową na jakiej ma zostać wykonany.
Wspomnieć, że nie zawsze wykonywanie testów po każdej zmianie jest optymalne.Testy akceptacyjne po GUI są relatywnie wolne.Wspomnieć o różnych typach testów aumatycznych, jednostkowe, integracyjne, systemowe, akceptacyjne, w jakich częstotliwościach powinny być wykonywane.Wspomnieć o problemie zatykania kolejek uruchomieniowych przez testy automatyczne, o problemie jednoczesnego uruchomienia, ustalenia dobrego harmonogramu.