#dockerApps01 – SeleniumGrid co to, na co to komu ? Dlaczego w Dockerze ?

Reading Time: 5 minutes

Witajcie po krótszej przerwie.
Kolejny wpis dopiero drugi w tym roku.
Nie da się, nie da się z takim tempem życia robić wpisów codziennie ! 😀
Ale jak to się mówi ma być JAKOŚĆ a nie JAKOŚ !!!

Zaczynamy, Selenium Grid a cóż to takiego ?
Selenium Grid to składowa z całego pakietu Selenium.
W skrócie jest to serwer, który izoluje uruchomienie naszych testów.
Ale jak to izoluje ?
A no składa się on z huba oraz nodów.
Node to takie jedno izolowane środowisko.
W skrócie to coś takiego, jakbyście postawili linuxa z chromem lub firefoxem zamiast uruchamiania na systemie, którym puszczacie testy to puszczalibyście to na tym linuxie.
To mniej więcej taki poziom izolacji.
Może zrobię wpis w sekcji #testerskieNarzędzia jak postawić Selenium Grid na Windowsie bez dockera, ale odpowiadając na ostatnie pytanie z tematu.
Docker to przyszłość, na dockerze wszystko działa bardzo sprawnie.
Zaś postawiony osobno na dedykowanym serwerze działa super !!!
Ciekawostką jest, że część firm rezygnuje z tradycyjnych serwerów i opakowuje to wszystko w dockera 🙂

Ale wracamy Selenium Grid – nody i hub.
Hub to tak jakby administracyjna cześć grida, która wszystkim zarządza.
Zaś nody to po prostu te izolowane serwery / środowiska.
Czyli po prostu widać, że Selenium Grid + Docker to połączenie idealne 🙂
A więc lokalnie w testach odwołujemy się do WebDrivera, korzystając z huba odwołujemy się do RemoteDrivera.

Obraz należy do portalu testelka.pl i został wykorzystany tylko do pokazania czym jest ten Grid.

Tam na blogu opisali Windowsa ja skupiam się na Dockerze.
Po pierwsze jeśli nie macie Dockera na swojej Windzie to przejdźcie do wpisu : https://gregkaqa.pl/index.php/2019/12/30/administracjadocker01-instalacja-dockera-na-systemie-windows/

Odpalamy najpierw docker desktop, następnie konsole i sprawdzamy czy nasz docker działa.
Ale najpierw niech wystartuje.

W trayu czekamy aż się odpali.
Chwile przemielił i się odpalił u mnie na SSD trwa to około 2-3 minuty.

Widzimy po wpisaniu docker, że wszystko jest okej.
Jakby ktoś pytał to program, którego używam zamiast konsoli to Cmder
Dostępny tutaj – > https://cmder.net/, jest to zamiennik standardowej linii poleceń Windowsa z mnóstwem opcji, będzie o nim, zapewne krótki wpis 🙂

Robimy na ‚Jana’, czyli na początek pobieramy najprostszą linią oporu wpisując w konsoli :
docker run -d -p 4444:4444 -v /dev/shm:/dev/shm selenium/standalone-chrome:3.141.59-yttrium
Dostajemy info, że nie można znaleźć obrazu selenium/standalone-firefox:3.141.59-yttrium plus wszystkiego co z nim powiązane 🙂
Docker sam zaczyna pullowanie (czyli pobieranie obrazu z repo)
W tym wypadku jest to selenium/standalone-chrome.

Czas pobierania obrazów zależy od prędkości waszego internetu, jednak trochę trzeba poczekać, jeśli nie usuwacie obrazu przed testami, to czynność będzie jednorazowa, niemniej są różne wersje przeglądarek, później nowsze wersje i warto to potem oskryptować, aby nie zabierać niezbędnego miejsca, kiedy bawiłem się Dockerem po jakimś czasie nazbierałem 15gb zajętego miejsca samymi obrazami, na serwerach z ograniczoną ilością miejsca, może być to niebagatelny problem !

Uff poszło trochę czasu to zajęło.

Wpisując docker ps widzimy, że nasz grid został uruchomiony.

Nasz Selenium działa aktualnie jest to Chrome.

Przechodząc pod stronę : http://localhost:4444/wd/hub/static/resource/hub.html można sprawdzić sesje, gdzie aktualnie nie mamy żadnych sesji.

Można sobie ręcznie stworzyć ale ja pokażę na przykładzie projektu Java, którego robimy jak zacząć, potem oczywiście będzie rozwinięcie tego.

W skrócie deklaracja RemoteWebDriver, stworzenie Capabilities i zwrócenie Drivera odpowiedniej przeglądarki.
I użycie RemoteDrivera do czynności testowych zamiast zwykłego WebDrivera.

Niestety nie udało mi się zrobić Screenshota 🙁 😀

Znana klasa Test1.java wygląda już tak :

import io.github.bonigarcia.wdm.WebDriverManager;
import org.openqa.selenium.By;
import org.openqa.selenium.WebDriver;
import org.openqa.selenium.chrome.ChromeDriver; //poprawnie zaimprtowało nam to z mavena
import org.openqa.selenium.chrome.ChromeOptions;
import org.openqa.selenium.firefox.FirefoxDriver;
import org.openqa.selenium.remote.DesiredCapabilities;
import org.openqa.selenium.remote.RemoteWebDriver;
import org.testng.annotations.AfterSuite;
import org.testng.annotations.BeforeSuite;
import org.testng.annotations.Test;

import java.net.MalformedURLException;
import java.net.URL;

public class Test1 {
    /**/
    public WebDriver driver;
    public RemoteWebDriver drivero;
    public String RemoteURL = "http://localhost:4444/wd/hub";
    public boolean chrome = true;

    /*adnotacja przed zestawie testów suite to zestaw testów robimy metode ktora cos robi przed testami*/
    @BeforeSuite
    public void przedTestami() throws MalformedURLException {
        if (chrome) {
            //WebDriverManager.chromedriver().avoidAutoVersion();
            //WebDriverManager.chromedriver().setup();
            //driver = new ChromeDriver();
            DesiredCapabilities capa = DesiredCapabilities.chrome();
           // ChromeOptions chrome = new ChromeOptions();
            capa.setBrowserName("chrome");
            drivero = new RemoteWebDriver(new URL(RemoteURL), capa);
        } else {
           /* WebDriverManager.firefoxdriver().avoidAutoVersion();
            WebDriverManager.firefoxdriver().setup();
            driver = new FirefoxDriver();*/
           DesiredCapabilities capa =  DesiredCapabilities.firefox();
           capa.setBrowserName("firefox");
           drivero = new RemoteWebDriver(new URL(RemoteURL), capa);
        }
    }

    /*adnotacja po zestawie testów suite to zestaw testów robimy metode ktora cos robi po testach*/
    @AfterSuite
    public void poTestach() {
        drivero.close();
    }

    /*właściwe testy*/
    @Test
    public void pierwszyTest() throws InterruptedException {
        boolean chrome = false;
       /* driver.get("http://www.bing.com");
        driver.findElement(By.id("sb_form_q")).sendKeys("pogoda warszawa");
        driver.findElement(By.id("sb_form_go")).click();*/
       drivero.get("http://www.bing.com");
        drivero.findElement(By.id("sb_form_q")).sendKeys("pogoda warszawa");
        drivero.findElement(By.id("sb_form_go")).click();
    }

    @Test
    public void drugiTest() throws InterruptedException {
        boolean chrome = false;
        if (chrome) {
           /* driver.get("http://duckduckgo.com/");
            driver.findElement(By.id("search_form_input_homepage")).sendKeys("pogoda gdańsk");
            driver.findElement(By.id("search_button_homepage")).click();*/
            drivero.get("http://duckduckgo.com/");
            drivero.findElement(By.id("search_form_input_homepage")).sendKeys("pogoda gdańsk");
            drivero.findElement(By.id("search_button_homepage")).click();
        }
    }
}

Będzie to bardziej tłumaczone w odpowiednim wpisie o Javie.

Co prawa pod adresem githuba.
https://github.com/SeleniumHQ/docker-selenium
Można ogarnąć VNC czyli widzielibyśmy jak nasze testy się toczą jednak, udało mi się to VNC ogarnąc ale nic nie ma, wyłączyłem headless dla driverów i nic to nie dało, nie wiem o co chodzi ale pokażę, wam screena z następnego wpisu, bo na pewne rzeczy jest czas ale na to selenium grid badziewne nie ma sensu się rozpisywać. Także widzicie screenshot error, vnc nie chce się ogarnąć słabizna, dlatego dwa następne wpisy o tagach #dockerApps czyli Zelenium oraz Selenoid, ten ostatni jest moim zdaniem najlepszy 🙂 Ale Zelenium przy dobrej konfiguracji też jest okej. Ma VNC, który realnie można klikać w selenoid tylko zobaczymy co się dzieje na ekranie.

Następny wpis Zelenium a tutaj screenshot szybki zrzutek


Tam widzicie jeden z testów strona binga zaraz walne vnc wiekszy screenshot.

I macie vnc trzy linijki vnc działa, najfajniejsze ze np. puszczacie dwa osobne testy a on sobie ogarnie, który node jest wolny.
Zero zmiany kodów w Javie, to co ustawiałem do Selenium Grid.
Ponieważ alternatywy bazują na gridzie, a nie są jakimś nowym wynalazkiem 🙂

Tu widzicie Firefoxa, różnica to te odstępy w firefoxie, także jak widać obie przeglądarki działają sam sobie wybiera noda, który jest dostępny i o tym będzie w następnym wpisie.

Także do zobaczenia w następnym wpisie o Zelenium.
Schudnij w nowym roku ! 😀

Napisz komentarz

Witryna wykorzystuje Akismet, aby ograniczyć spam. Dowiedz się więcej jak przetwarzane są dane komentarzy.