TestDriven ja Selenium

Lasse Koskelan loistavasta TestDriven-kirjasta tuli juuri ulos loputkin kappaleet, ja siitä innostuneena päätin tehdä päivän hyvänteon ja demota muille kuinka Selenium toimii, ja miten sillä voidaan tehdä testitapauksia verkkosovelluksille. Testaaminen ja testitapauksien tekeminen ei ole koskaan helppoa, mutta hyvät työkalut tekevät siitä onneksi helpompaa ja hauskempaa. Isompi kysymys on aina oman ajattelun ja koodaustavan muuttaminen sellaiseksi, että testaaminen on helppoa. Lasse käsittelee näitä asioita loistavasti kirjassaan – tiivistäen samalla kertaa teorian ja konkretisoiden asiat käytännössä- ja siksi suosittelenkin kirjan lukemista kaikille asiasta kiinnostuneille.

Kirjassa käsitellään jonkin verran yleisiä testaustyökaluja, mutta www-sovelluksien tekijöille ehdoton huipputyökalu Selenium jää lähes kokonaan käsittelemättä. Täyttääkseni tätä rakoa nopea tutustuminen Seleniumiin ja lopuksi vielä videodemo siitä, miltä testien tekeminen ja ajaminen Seleniumissa tuntuu.

Selenium on Thoughtworksissa kehitetty testausframework, joka on kehitetty hyväksymistestien tekemiseen. Se toimii suoraan selaimessa browser-tekniikoita hyväksikäyttäen, perustuen DOM-puun käsittelyyn ja sitä kautta sivujen sisällön tutkimiseen ja muokkaamiseen. Testien tekemiseen on muutama loistava työkalu, tärkeimpinä SeleniumIDE – Firefox-laajennus testien tallentamiseksi suoraan selaimessa, ja Selenium RemoteControl – joka mahdollistaa testien ajamisen ohjelmallisesti esimerkiksi Java-unit -testistä.

Seleniumin käyttöönottaminen on aluksi tuntunut pelottavalta ja monimutkaiselta, mutta käytännössä sen perusteiden oppiminen vie vain muutaman minuutin aikaa – minkä jälkeen isompi työ onkin palauttaa mieliin kunnolla miten DOM-puusta kannattaa xpathilla kysessä asioita, tai millaisia regexpejä annattaa patternien tunnistamista varten kirjoittaa. Niiden kanssa pähkäily tuntuu kuitenkin pieneltä siinä vaiheessa kun Selenium on onnistuneesti asennettuna koneella – ja tietää että seuraavat vaiheet ovatkin jo itse testien kirjoittamista sovellusta varten.

Video esittelee miten käytännössä SeleniumIDE:ä ja Selenium RemoteControlia käytetään:


http://s3.amazonaws.com/huimanet/seleniumdemo-large.mov

Huomiota remote-control -testin tekemisestä:

Selenium-serverin käynnistäminen: java -jar selenium-server.jar -proxyInjectionMode -browserSessionReuse

Java-projektiin pitää kopioida classpathiin sekä java-driver -luokat, että java-server-luokka. Eclipsessä projektiin pitää myös lisitä JUnit4.

Käytettävä Java-koodi, suoraan Seleniumin oman Google-demo -koodin pohjalta:


package net.huima.selenium;

import junit.framework.*;

import org.openqa.selenium.server.*;

import com.thoughtworks.selenium.DefaultSelenium;
import com.thoughtworks.selenium.Selenium;

public class SeleniumTest extends TestCase {

private Selenium selenium;

public void setUp() throws Exception {
String url = "http://www.google.com";
selenium = new DefaultSelenium("localhost", SeleniumServer.getDefaultPort(), "*custom /Applications/Firefox.app/Contents/MacOS/firefox-bin -P testprofile", url);
//HUOM! *custom - selitän siitä tarkemmin alla
selenium.start();
}

protected void tearDown() throws Exception {
selenium.stop();
}

public void testGoogle() throws Throwable {
selenium.open("http://www.google.com/webhp");

assertEquals("Google", selenium.getTitle());

selenium.type("q", "Selenium OpenQA");
assertEquals("Selenium OpenQA", selenium.getValue("q"));
selenium.click("btnG");
selenium.waitForPageToLoad("5000");
assertEquals("Selenium OpenQA - Google Search", selenium.getTitle());

String[] links = selenium.getAllLinks();
System.out.println(" Sivulla " + links.length + " linkkiä ");

System.out.println(" Sivun sisällön koko on " + selenium.getBodyText().length());

}

}

*custom -kohdassa määritetään minkä selaimen – ja miten – Selenium aukaisee. Tässä tapauksessa avataan Firefox, mutta Firefoxille määritetään default-profiilin sijaan toinen profiili. ( Profiileita pääsee muokkaamaan ja luomaan käynnistämällä Firefoxin -Profilemanager flägin kanssa)

Profiiliin on lisätty Certificate Authorityksi Seleniumin sivuilta löytyvä VAARALLINEN CA, jota ei saisi vahingossakaan laittaa omaan käyttämäänsä profiiliin. Profiilissa on myös laitettu proxy-tiedoiksi localhost 4444 kaikille protokollille, jotta yhteydet menisivät Selenium-serveriin, joka proxyttaa ne eteenpäin oikein.

Firefoxissa proxy-asetukset voi tehdä kohdassa Preferences -> Advanced -> Network -> Settings

Ja Certificate Authorityn kohdassa Preferences -> Advanced -> Encryption -> View Certificates -> Authorities. Siellä sitten lataamallesi tiedostolle import.

Seleniumin pääsivu

SeleniumIDE


Selenium RemoteControl


Ohjeita Selenium Coren käyttämisestä

Reference-dokumentaatio

Lyhyt XPAth-tutorial muistin virkistämiseksi

This entry was posted in java, programming. Bookmark the permalink.

Vastaa

Täytä tietosi alle tai klikkaa kuvaketta kirjautuaksesi sisään:

WordPress.com-logo

Olet kommentoimassa WordPress.com -tilin nimissä. Log Out / Muuta )

Twitter-kuva

Olet kommentoimassa Twitter -tilin nimissä. Log Out / Muuta )

Facebook-kuva

Olet kommentoimassa Facebook -tilin nimissä. Log Out / Muuta )

Google+ photo

Olet kommentoimassa Google+ -tilin nimissä. Log Out / Muuta )

Muodostetaan yhteyttä palveluun %s