Kom hurtigt i gang med funktionelle tests i Ruby, Cucumber, Selenium og Docker.
- Kom i gang
- Start et selenium netværk
- Bygg en container for at køre dine tests
- Kør dine tests indenfor din container
- Skriv nye tests
Du skal have brug for Git og Docker
Klon det her repository med git.
git clone git@github.com:sermoa/agurkesalat.git
cd agurkesalat
Vi bruger filen docker-compose.yml
til at starte 3 Docker containers:
- selenium_hub
- firefox
- chrome
Sådan:
docker-compose up -d
Besøg http://localhost:4444/grid/console om at se dit selenium netværk.
Her har du skabet et selenium netværk med 3 containers: en selenium hub og 2 selenium nodes, en til firefox browser, og en til chrome browser. Containerne er klar til at køre tests for dig.
Containerne eksisterer i et netværk, der hedder agurkesalat_default
.
Hvis du vil, kan du tilføje flere nodes af firefox og chrome. Det kan være nyttigt når du vil køre flere tests parallelt.
docker-compose up -d --scale firefox=3 --scale chrome=3
Nu har du 3 firefox nodes og 3 chrome nodes.
Du kan godt se hvor mange docker containers kører på tidspunkt:
docker container ls
Når du er færdig med netværket, stopper du det sådan:
docker-compose down
Vi bruger filen Dockerfile
til at bygge en container med Ruby og Cucumber. Vi kan tagge den som agurkesalat
(et andet navn er også okay, men husk navnet!)
docker build -t agurkesalat .
docker run -t --network agurkesalat_default agurkesalat
Vi kører containeren agurkesalat
og bruger netværket agurkesalat_default
som blev skabet før med docker-compose
kommandoen.
Nu har du en anden container i det samme netværk, som kan tale med din selenium hub. Din selenium hub skal vælge en node (firefox eller chrome) der kan køre dine tests.
Som standard kører testerne i Firefox. Sådan kan du styre testerne ved Chrome:
docker run -t --network agurkesalat_default agurkesalat cucumber --profile chrome
Vær sikker på at flere Chrome eller Firefox nodes kører.
Nu kan du køre tests parallelt, i Firefox:
docker run -t --network agurkesalat_default agurkesalat \
parallel_cucumber features -n 3 --group-by scenarios -o '-p firefox'
Eller Chrome:
docker run -t --network agurkesalat_default agurkesalat \
parallel_cucumber features -n 3 --group-by scenarios -o '-p chrome'
Du har ikke brug for at køre din egen Selenium Grid og nodes i containerer, når der er en anden Selenium Grid tilgængelig til dig. Brug derfor en miljøvariable i stedet for dit eget netværk:
docker run -t --env SELENIUM_HUB_ADDR=10.112.13.16 agurkesalat \
parallel_cucumber features -n 3 --group-by scenarios -o '-p firefox'
docker run -t --env SELENIUM_HUB_ADDR=10.112.13.16 agurkesalat \
parallel_cucumber features -n 3 --group-by scenarios -o '-p chrome'
De følgende profiles er tilgængelige, hvis du har nodes der kan køre dem:
- chrome
- firefox
- safari
- edge
- ie
- linux_chrome
- linux_firefox
- osx_chrome
- osx_firefox
- osx_safari
- windows_chrome
- windows_firefox
- windows_edge
- windows_ie
Normalt kører testerne som blev bygget i containeren. Når du ikke vil bygge kontinuerligt en nye container image, kan du montere en lokale mappe inden containeren sådan:
docker run -t --network agurkesalat_default --volume `pwd`/:/arbejde agurkesalat
Jeg kan godt lide at køre kun en test ad gangen når jeg skriver nye tests. Jeg bruger en @wip
tag og kører cucumber sådan:
docker run -t --network agurkesalat_default --volume `pwd`/:/arbejde agurkesalat cucumber --tags @wip
Simpelthen skriv debug page
i dine trin definitioner. Et skærmbillede skal findes i en skaermbilleder
mappe.
Givet("jeg er på radio-oversigten") do
visit '/radio/oversigt'
accept_cookies
debug page
end
Husk at fjerne debug trinnet bagefter.
Du kan køre bash indenfor containeren sådan:
docker run -ti --network agurkesalat_default --volume `pwd`/:/arbejde agurkesalat /bin/bash
Tilføj den til Gemfile
og kør den her kommando til at opdatere Gemfile.lock
:
docker run --rm --volume `pwd`:/arbejde --workdir /arbejde ruby:2.5.1 bundle lock --update
Husk at genbygge din agurkesalat container.
docker build -t agurkesalat .