blog.testowka.pl

Archiwum wiadomości z Listopad, 2012

Kurs Selenium część 4 – Pierwszy Test

opublikowany przez 22, Lis, 2012, w kategoriach Automatyzacja, Kurs Selenium, Testowanie

Całość kursu dostępna tutaj
Potrzebujemy zaimportować odpowiednie zależności:

import org.openqa.selenium.WebDriver;
import org.openqa.selenium.firefox.FirefoxDriver;
import org.testng.annotations.Test;

Powyższe powinno wystarczyć
Aby nasze testy mogły korzystać z selenium driver potrzebujemy zainicjować obiekt WebDriver oraz potrzebujemy adnotacji @Test.

@Test
public AppTest(String testName) {
	WebDriver driver = new FirefoxDriver();
	driver.get("http://blog.testowka.pl");
        driver.close();
}

Teraz wystarczy trochę posprzątać. Przede wszystkim wyciągamy inicjację drivera do metody setUp() oznaczoną adnotacją @BeforeClass.

@BeforeClass
public void setUp() {
	driver = new FirefoxDriver();
}

Następnie zamykanie przeglądarki do metody tearDown() oznaczonej adnotacją @AfterClass

@AfterClass
public static void tearDown() {
	driver.close();
}

Nasz test powinien wyglądać tak:

import org.testng.annotations.AfterClass;
import org.openqa.selenium.WebDriver;
import org.openqa.selenium.firefox.FirefoxDriver;
import org.testng.annotations.BeforeClass;
import org.testng.annotations.Test;

public class AppTest {

	static WebDriver driver;

	@BeforeClass
	public void setUp() {
		driver = new FirefoxDriver();
	}

	@Test
	public void ShouldTestowkaPlPageBeOpenable() {
		driver.get("http://blog.testowka.pl");
	}

	@AfterClass
	public static void tearDown() {
		driver.close();
	}
}

Jak zapewne zauważyliście nasz test jeszcze niczego nie testuje, gdyż nie ma w nim asercji. Dodajemy więc asercje sprawdzającą czy tytuł strony jest poprawny.

Importujemy bibliotekę z asercjami:

import static org.testng.Assert.*;

Dodajemy asercje do testu:

@Test
public void ShouldTestowkaPlPageBeOpenable() {
	driver.get("http://blog.testowka.pl");
	assertEquals(driver.getTitle(), "blog.testowka.pl");
}

 

6 komentarzy więcej...

Jak uczyć się szybciej?

opublikowany przez 20, Lis, 2012, w kategoriach Inne

Na naszych szkoleniach z automatyzacji testów zaczęliśmy ostatnio stosować programowanie w parach. Zrobiliśmy tak, gdyż, stanęliśmy w pewnym momencie przed wyzwaniem w jaki sposób możemy obniżyć cenę szkolenia tak, by było ono dostępne dla większej ilości osób. Pierwsza myśl (w tym przypadku jak do tej pory najlepsza) obniżamy koszty! Jak więc obniżyć koszty czterodniowego szkolenia? Najlepiej skrócić je do 3 dni… Ale jak to?

Podstawowym celem naszych warsztatów było i jest przekazanie testerom, którzy najczęściej nigdy wcześniej nie mieli do czynienia z automatyzacją testów i programowaniem wiedzy, która wystarczy im do tego, by zaraz po szkoleniu rozpocząć automatyzację. Przeprowadziliśmy wcześniej już kilka szkoleń czterodniowych dla różnych grup i zauważyliśmy, że materiał który mamy jest przeważnie w sam raz na te cztery dni intensywnych warsztatów.
Pierwsze co zrobiliśmy to rewizja tego, czy to co jest w programie szkolenia na pewno jest tym, co tam musi się znaleźć. Udało nam się kilka rzeczy ze sobą połączyć. Podczas następnego czterodniowego szkolenia podstawowy materiał skończył się jakieś 2 godziny przed planowanym zakończeniem warsztatów. To już nieźle ale nadal za mało. Szukaliśmy kolejnych sposobów na to by przyspieszyć przyswajanie wiedzy i przypomnieliśmy sobie o programowaniu w parach.

Następne szkolenie było już zaplanowane jako trzydniowe dlatego też staliśmy trochę pod ścianą i Pair programming okazał się być naszą ostatnią szansą i nadzieja. I… udało się! Skończyliśmy cały materiał w niecałe 3 dni.

Jak to wyglądało? Po krótkim wstępie teoretycznym podzieliliśmy kilkunastoosobową grupę na pary – a w zasadzie poprosiliśmy ich żeby się sami podzielili. Jako, że było tam kilka osób, które wcześniej już ze sobą pracowały a ponadto wcześniej poprosiliśmy, by wszyscy opowiedzieli o swoich doświadczeniach w programowaniu i automatyzacji jednym z kryteriów doboru w pary był poziom umiejętności. Zgodnie z naszymi wcześniejszymi doświadczeniami i tym co na temat programowania w parach czytaliśmy i słyszeliśmy najbardziej efektywne są pary w których developerzy są na mniej więcej tym samym poziomie.

Pracowaliśmy w dwie osoby przy jednym komputerze. Co 15 minut odliczanych na timerze, który robił „Beep!” zmieniała się osoba przy klawiaturze.

Efekty były zaskakujące. Już od pierwszych minut zaskoczył nas gwar dyskusji i zapał z jakim do wykonywania ćwiczeń przystąpili uczestnicy szkolenia. Pod koniec pierwszego dnia już wiedzieliśmy, że jest dobrze – przerobiliśmy część materiału, którą zazwyczaj kończyliśmy pod koniec drugiego dnia!

Mniej więcej po obiedzie trzeciego dnia warsztatów zostało nam jeszcze sporo czasu na powtórki i dodatkowe pytania, oraz wspólne rozwiązywanie konkretnych problemów uczestników szkolenia.

Kilka uwag odnośnie Pair Programming:

  1. Odpowiedni dobór par jest kluczowy – osoby na podobnym poziomie uczą się najszybciej. W sytuacji gdy mamy jedną znacznie lepszą osobę nudzi się ona i frustruje, gdy ta druga jest przy klawiaturze. Gdy zaś ta mocniejsza osoba programuje słabsza nie nadąża i nie rozumie niektórych rzeczy. Dwie osoby na podobnym poziomie wspólnie odkrywają nowe rzeczy i obydwu przynosi to satysfakcje, a jednocześnie zawsze są pewne drobne różnice w umiejętnościach którymi się wymieniają.
  2. Stałe interwały czasowe pozwalały nadać rytm pracy. Częste zmiany przy klawiaturze sprawiały, że osoba siedząca z boku musiała cały czas aktywnie uczestniczyć w programowaniu jako nawigator, gdyż gdyby choć na chwilę straciła uwagę wdrożenie się gdy przyjdzie jej kolej trwało by zbyt długo.
  3. Praca w parach jest bardzo męcząca! Co 45 minut robiliśmy 10-15 minutową przerwę a mimo to po 6 godzinach wszyscy byliśmy już wykończeni.
  4. Pair Programming skutecznie blokuje wszelkie rozpraszacze. Każde sprawdzanie maili, przeglądanie facebook czy inne bzdury były bardzo skutecznie zwalczane wewnątrz par. Nie było po prostu na to czasu tym bardziej, że naokoło inne pary szły do przodu z materiałem.
  5. Dużo mniej problemów. Tak jak na początku przypuszczaliśmy dzięki wspólnemu programowaniu było znacznie mniej pytań niż zwykle – większość „podstawowych” problemów była szybko rozwiązywana w parze przy użyciu google lub manuali.

Podsumowując – polecam programowanie w parach i nie tylko programowanie wszędzie tam, gdzie potrzebujecie przyspieszyć proces uczenia.

1 komentarz więcej...

Kurs Selenium część 3 – Operacje na elementach stron WWW

opublikowany przez 19, Lis, 2012, w kategoriach Automatyzacja, Kurs Selenium, Testowanie

Całość kursu dostępna tutaj

Selenium WebDriver jest biblioteką w pełni obiektową. Zgodnie z założeniem wszystko w tym także elementy na stronie są obiektami. Dzięki takiemu podejściu możemy elementy wyszukiwać i zapisywać w pamięci jako obiekty, po czym wykonywać akcje na obiektach.

Model obiektowy przydaje się także podczas modelowania struktury naszych testów, ale o tym będzie w kolejnych rozdziałach.

Najpierw inicjalizujemy obiekt typu WebElement

import org.openqa.selenium.By;
import org.openqa.selenium.WebElement;

 

WebElement linkToAgilePage = driver.findElement(By.linkText("Agile"));

Istnieje wiele różnych sposobów na wyszukiwanie elementów na stronie.
Aby sprawdzić czego możemy użyć wpisujemy w Eclipse:

driver.findElement(By.

i wciskamy [SPACJA]. IDE podpowie nam czego możemy użyć.

Najczęściej używane (przeze mnie) to:

By.id();
By.name();
By.linkText();
By.xpath();

Dzieki takiej różnorodności możemy wybrać metodę poszukiwania elementów na stronie, która będzie najmniej ryzykowna. Chodzi tutaj o ryzyko tego, że dany element wkrótce może się zmienić albo nie będzie unikatowy.

Następnie możemy wykonywać już akcje na wyszukanych obiektach.

linkToAgilePage.click();

Przykładowy test z kilkoma akcjami wykonanymi na elementach strony znajdziecie poniżej. W następnym rozdziale zajmiemy się czyszczeniem naszych testów tak by były bardziej fczytelne.

package pl.testowka;

import static org.testng.Assert.*;
import org.testng.annotations.AfterClass;
import org.openqa.selenium.By;
import org.openqa.selenium.WebDriver;
import org.openqa.selenium.WebElement;
import org.openqa.selenium.firefox.FirefoxDriver;
import org.testng.annotations.BeforeClass;
import org.testng.annotations.Test;

public class TestowkaTest {

	static WebDriver driver;

	@BeforeClass
	public void setUp() {
		driver = new FirefoxDriver();
	}

	@Test
	public void ShouldBePosibleToSearchTestowkaAtGoogle()
			throws InterruptedException {
		driver.get("http://google.pl");
		WebElement searchField = driver.findElement(By.name("q"));
		searchField.sendKeys("testowka.pl");
		WebElement searchButton = driver.findElement(By
				.xpath("//*[@id=\"gbqfb\"]/span"));
		searchButton.click();
		for (int second = 0;; second++) {
			if (second >= 60)
				fail("timeout");
			try {
				if (driver.findElement(By.linkText("Testowka.pl"))
						.isDisplayed()) {
					break;
				}
			} catch (Exception e) {
			}
			Thread.sleep(1000);
		}
		WebElement linkToTestowka = driver.findElement(By
				.linkText("Testowka.pl"));
		linkToTestowka.click();
	}

	@AfterClass
	public static void tearDown() {
		driver.close();
	}

}

 

5 komentarzy więcej...

Kurs Selenium część 2 – Maven i zależności

opublikowany przez 13, Lis, 2012, w kategoriach Automatyzacja, Kurs Selenium, Testowanie

Całość kursu dostępna tutaj

Aby utworzyć nowy projekt przy użyciu Maven wchodzimy do katalogu workspace wskazanego w eclipse i w konsoli wpisujemy:

mvn archetype:generate

Kolejno odpowiadamy na pytania:
Pierwsze zostawiam default: ENTER
Wersję maven:  zostawiam domyślnie  ENTER
GroupID : wpisuję nazwę np. „testowka”
ArchetypeID: wpisuję np. „pl”
Wersję projektu:  zostawiam domyślnie ENTER
Package: zostawiam domyślnie jako „testowka”

Następnie sprawdzamy czy projekt się kompiluje.

mvn clean install

Otwieramy Eclipse klikamy prawym przyciskiem myszy na drzewie projektów i wybieramy Import -> Maven Project -> wybieramy katalog utworzonego projektu.

Dla pewności w Eclipse odpalamy Run As -> Maven Install.

W eclipse klikamy prawym na plik pom.xml i wybieramy Maven -> Add dependency. Wpisujemy w wyszukiwarkę TestNG wybieramy org.testng testng, następnie to samo dla Firefox org.seleniumhq.selenium selenium-firefox-driver.

Teraz już możemy używać selenium WebDriver w naszych testach odpalanych przy pomocy TestNG.

Nasz plik pom.xml powinien wyglądać mniej więcej tak:

<project xmlns="http://maven.apache.org/POM/4.0.0" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
  xsi:schemaLocation="http://maven.apache.org/POM/4.0.0 http://maven.apache.org/xsd/maven-4.0.0.xsd">
  <modelVersion>4.0.0</modelVersion>

  <groupId>testowka</groupId>
  <artifactId>pl</artifactId>
  <version>0.0.1-SNAPSHOT</version>
  <packaging>jar</packaging>

  <name>test</name>
  <url>http://maven.apache.org</url>

  <properties>
    <project.build.sourceEncoding>UTF-8</project.build.sourceEncoding>
  </properties>

  <dependencies>

    <dependency>
    	<groupId>org.testng</groupId>
    	<artifactId>testng</artifactId>
    	<version>6.8</version>
    </dependency>
    <dependency>
    	<groupId>org.seleniumhq.selenium</groupId>
    	<artifactId>selenium-chrome-driver</artifactId>
    	<version>2.42.2</version>
    </dependency>
    <dependency>
    	<groupId>org.seleniumhq.selenium</groupId>
    	<artifactId>selenium-firefox-driver</artifactId>
    	<version>2.42.2</version>
    </dependency>
  </dependencies>
</project>
12 komentarzy więcej...

Kurs selenium część 1 – instalacja i setup środowiska

opublikowany przez 09, Lis, 2012, w kategoriach Automatyzacja, Kurs Selenium, Testowanie

Całość kursu dostępna tutaj

Początki są podobno najtrudniejsze…

Poniżej krótki opis tego co będziemy potrzebować by rozpocząć pracę z testami selenium (W środowisku Java).

Co będziemy potrzebować:

  • Java (JDK 1.7)
  • Eclipse
  • Maven
  • Firefox
  • Pluginy do Eclipse

Poniżej krótka instrukcja instalacji poszczególnych narzędzi.

JDK 1.7

Pobieramy najnowsza wersję Java SE JDK ze strony http://www.oracle.com/technetwork/java/javase/downloads/index.html i instalujemy za pomocą instalatora.

Eclipse lub IntelliJ

Pobieramy najnowszą wersję Eclipse IDE for Java EE z http://www.eclipse.org/downloads/. Rozpakowujemy archiwum do jakiegoś katalogu. Uruchamiamy Eclipse poprzez kliknięcie w ikonę eclipse.exe (Windows) lub z konsoli (Linux).

Lub alternatywnie IntlliJ http://www.jetbrains.com/idea/download/ wtedy mamy natywne wsparcie dla Mavena, Gita i innych przydatnych później rzeczy.

Maven

Pobieramy najnowszą wersję Maven z http://maven.apache.org/download.html. Rozpakowujemy archiwum w wybranym katalogu.

Maven Konfiguracja (Windows)

Wchodzimy w Panel Sterowania -> System i Zabezpieczenia -> System – Zaawansowane Ustawienia Systemu -> Zaawansowane ->Zmienne Środowiskowe.

Dodajemy/edytujemy zmienne systemowe :

JAVA_HOME = (Ścieżka do katalogu gdzie zainstalowane jest JDK)

MAVEN_HOME = (Ścieżka do katalogu z Mavenem)

M2 = %MAVEN_HOME%\bin

PATH = %M2%; %JAVA_HOME%\bin (UWAGA! Jeśli zmienna PATH istnieje to nie usuwamy jej zawartości tylko dodajemy to co po lewej na końcu po średniku)

Otwieramy konsolę i sprawdzamy czy Maven działa poprzez wpisanie

 mvn --version 

Firefox

No bez przesady… Dacie radę sami…

Zalecam jednak by wersja przeglądarki była tak 1-2 wersje do tyłu. Twórcy Selenium mają pewne opóźnienie w aktualizowaniu wersji drivera więc może się okazać (i często się okazuje), że nasze testy nie będą działać z najnowszą przeglądarką.

Pluginy do Eclipse

Wchodzimy w Help->Eclipse Market

Wyszukujemy i instaluje kolejno (za każdym razem restartując Eclipse):

– TestNG plugin

TestNG for Eclipse

http://marketplace.eclipse.org/content/testng-eclipse

6 komentarzy więcej...

Nowy Kurs Selenium

opublikowany przez 05, Lis, 2012, w kategoriach Automatyzacja, Kurs Selenium, Testowanie

Jak niektórzy z Was zapewne zauważyli na blogu pojawił się ostatnio nowy kurs Selenium. Postanowiłem zacząć od nowa, gdyż poprzednia wersja kursu mocno się zdezaktualizowała na przestrzeni ostatnich trzech lat. Pierwsze dwa rozdziały dotyczące samej instalacji i konfiguracji środowiska są już dostępne. Następne rozdziały będą ukazywać się wkrótce.

Kurs jest dużym skrótem tego co prezentujemy na naszych szkoleniach z automatyzacji testów, na które zapraszam jeśli chcecie się dowiedzieć więcej.

Dodaj komentarz więcej...