Successfully reported this slideshow.
We use your LinkedIn profile and activity data to personalize ads and to show you more relevant ads. You can change your ad preferences anytime.

TGT#14 - @Before – Nie będę automatyzować @After – No dobra, to nie jest takie złe - Przemysław Biesek

188 views

Published on

TGT#14 - @Before – Nie będę automatyzować @After – No dobra, to nie jest takie złe - Przemysław Biesek

Published in: Technology
  • Be the first to comment

  • Be the first to like this

TGT#14 - @Before – Nie będę automatyzować @After – No dobra, to nie jest takie złe - Przemysław Biesek

  1. 1. @Before – Nie będe automatyzować !!! @After – No dobra to nie jest takie złe
  2. 2. Sierpień 2016 ...
  3. 3. Dlaczego nie chciałem parać sie automatami ? - za trudne ? - automatyzacja nie zawsze opłacalna ? - za duza przepaść pomiędzy testami manualnymi a automatycznymi ?
  4. 4. import org.openqa.selenium.WebDriver; import org.openqa.selenium.remote.DesiredCapabilities; import org.openqa.selenium.remote.RemoteWebDriver; import java.net.URL; public class SampleSauceTest { public static final String USERNAME = "YOUR_USERNAME"; public static final String ACCESS_KEY = "YOUR_ACCESS_KEY"; public static final String URL = "https://" + USERNAME + ":" + ACCESS_KEY + "@ondemand.saucelabs.com:443/wd/hub"; public static void main(String[] args) throws Exception { DesiredCapabilities caps = DesiredCapabilities.chrome(); caps.setCapability("platform", "Windows XP"); caps.setCapability("version", "43.0"); WebDriver driver = new RemoteWebDriver(new URL(URL), caps); /** * Goes to Sauce Lab's guinea-pig page and prints title */ driver.get("https://saucelabs.com/test/guinea-pig"); System.out.println("title of page is: " + driver.getTitle()); driver.quit(); } } Poziom abstracji testów dla laika
  5. 5. Test Steps: 1. Navigate to gmail.com 2. In the ’email’ field, enter the email of the registered user. 3. Click the ‘Next’ button. 4. Enter the password of the registered user 5. Click ‘Sign In’ Expected Result: A page displaying the gmail user’s inbox should load, showing any new message at the top of the page. Testy manualne są prostsze ??? Ale czy aby na pewno ...
  6. 6. Proof of Concept : Znaleźć i zaimplementować najlepszy wg mnie BDD Test Framework BDD – It is all about Behaviour !!! A może by jednak spróbować?
  7. 7. Given Portal Sign In page is open in browser When User enters correct credentials And User clicks Sign In button Then User should be logged into the platform A gdyby test automatyczny wyglądał podobnie jak manualny
  8. 8. Narzędzie do wykonywania automatycznych testów funkcjonalnych Cucumber „rozumie” testy pisane w języku Gherkin Feature – opis funkcjonalności Scenario – jakie kroki trzeba wykonać żeby sprawdzić daną funkcjonalność Given – założenia początkowe And – dodatkowy warunek When – warunek Then – wynik ( expected result ) Cucumber jako jedno z rozwiązań
  9. 9. 3 poziomy testu !!! Feature Step Definition Page Object Największa zaleta dla mnie ?
  10. 10. Scenario Outline: Unsuccessful login with wrong credentials Given Portal Sign In page is open in browser When User enters login : "<user>" And User enters password : "<password>" And User tries to Sign In Then User should be informed that credentials are wrong Examples: Using different combination of correct and wrong credentials |user|password| |nowyuser100|111| |222|hasloNOWEGOusera!123| |hasloNOWEGOusera!123|nowyuser100| |standard_user1|hasloNOWEGOusera!123| |nowyuser100|Password!1| Background: Given Portal login page is open in browser When user opens sign-up page Then Sign-up page is opened Scenario Outline i Backgrounds
  11. 11. Trochę pouczyć się trzeba  ALE ... 1. Taka struktura testów pozwala łatwiej „ogarnąć” testy automatyczne. 2. Taka struktura pozwala wykorzystywać te same stepy jako keywordy do kolejnych testów. 3. To po prostu jest bardziej zrozumiałe (przynajmniej dla mnie ). I to jest takie proste ?
  12. 12. Znalazłem juz narzędzie do testowania które jest zrozumiałe Ale ... Konfiguracja jest kłopotliwa. Instalacja upierdliwa. Raporty brzydkie. Wracając do POC-a
  13. 13. Serenity BDD - witamy w świecie prostej konfiguracji i ładnych raportów No to szukamy dalej
  14. 14. Bo to tak naprawdę Cucumber obudowany w narzędzie pozwalające na proste zarządzanie raportami. Dlaczego Serenity ???
  15. 15. Instalujemy mvn-a Tworzymy projekt bazowy na podstawie archetypu mvn archetype:generate -Dfilter=serenity Instalacja
  16. 16. Instalujemy jakieś IDE np Intelij IDEA i zaczynamy zabawę  Instalacja
  17. 17. serenity.properties # Define the default driver webdriver.driver=phantomjs # Appears at the top of the reports serenity.project.name = Demo Project using Serenity and Cucumber serenity.requirement.types = epic,ability serenity.take.screenshots = AFTER_EACH_STEP serenity.requirements.dir = src/test/resources/feature serenity.test.root=features webdriver.chrome.driver=src/test/resources/webdriver/chromedriver.exe webdriver.ie.driver=src/test/resources/webdriver/IEDriverServer.exe firefox.preferences=app.update.auto=false;browser.shell.checkDefaultBrowser=false;app.update.enabled=false;app.update.silent=false # Odpalanie testow na jednej przegladarce serenity.use.unique.browser = false # TimeOut - defaultowo 5s webdriver.wait.for.timeout = 10000 # Customise browser size #serenity.browser.height = 1200 #serenity.browser.width = 1200 #logging level serenity.logging=VERBOSE show.related.tags=true Zalety
  18. 18. Zarządzanie screenshotami – jedno ustawienie i gotowe serenity.take.screenshots FOR_EACH_ACTION BEFORE_AND_AFTER_EACH_STEP AFTER_EACH_STEP FOR_FAILURES DISABLED Jesli nie chcemy na screenshotach pokazywac żadnych „sensitive information” używamy czegos takiego : @BlurScreenshots("HEAVY") Jeśli zależy nam na czasie to radze używać FOR_FAILURES Zalety
  19. 19. Integracja z Jirą Ustawienia : jira.url - link do jiry Dodatkowo otagowanie scenariusza numerem ticketu, daje nam link z raportu sernity do ticketu z Jiry. @issue #FH-17 Jesli dodatkowo ustawimy serenity.public.url na lokalizacje raportu z testów serenity, serenity zaczyna dodawac raport z testów jako komentarz w tickecie :
  20. 20. Raporty
  21. 21. Dużo wbudowanych metod które ułatwiaja testowanie : public <T extends WebElementFacade> T typeAndTab(String value); public void setWindowFocus(); public <T extends WebElementFacade> T selectByVisibleText(String label); public <T extends WebElementFacade> T selectByValue(String value); public <T extends WebElementFacade> T selectByIndex(int indexValue); public <T extends WebElementFacade> T waitUntilVisible(); public <T extends WebElementFacade> T waitUntilPresent(); public Wait<WebDriver> waitForCondition(); public <T extends WebElementFacade> T waitUntilNotVisible(); public String getValue(); public String getText(); public <T extends WebElementFacade> T waitUntilEnabled(); public <T extends WebElementFacade> T waitUntilClickable(); public <T extends WebElementFacade> T waitUntilDisabled();
  22. 22. Wsparcie i community Fora: https://groups.google.com/forum/#!forum/thucydides-users https://groups.google.com/forum/#!forum/thucydides-dev Tutoriale: http://testerstories.com/2016/07/using-serenity-with-cucumber-part-1/ Manual: http://serenity-bdd.info/docs/serenity/
  23. 23. mvn clean verify -Dwebdriver.driver=chrome / firefox / iexplorer / phantomJS mvn clean verify -Dcucumber.options="--tags @Req-4-3„ Jak uruchamiać testy ?
  24. 24. Oczywiście, że nie. Nie ma idealnych rzeczy. @Before / @After puszczane są dla każdego testu - wydłużenie czasu testów – można to pominąc poprzez otagowanie @Before/@After. Kiedy test sfailuje na @Before, jest oznaczany jako Ignored, a nie jako Failed – zgłosiliśmy to i „podobno” naprawiają. Refactoring „keywordów” może być kłopotliwy jeśli się nie jest ostrożnym. Brak locatorów w stacktrace w przypadku gdy WebElement nie został znaleziony. Idealne rozwiązanie ?
  25. 25. Odpowiedzcie sobie sami  Ja uważam, że tak skoro jeszcze się nie zniechęciłem Czy automaty to jedyna słuszna droga ? – Na pewno nie – wszystko zależy od proporcji: automaty/testy manualne Czy warto ?
  26. 26. Dziekuję za uwagę Przemysław Biesek przemyslaw.biesek@gmail.com

×