Miten integroida Jenkins ja Maven Seleniumin kanssa?
On 23 syyskuun, 2021 by adminTämä artikkeli on osa Content Hubia. Jos haluat syvällisempiä resursseja, tutustu sisältöhubiimme Jenkins Tutorial.
Jenkins on yksi suosituimmista työkaluista jatkuvaan integrointiin, rakentamisen hallintaan ja automaatiotestaukseen. Maven on suosittu rakentamisen automatisointityökalu, jota käytetään laajasti Java-projekteissa. Seleniumin, Mavenin ja Jenkinsin integroinnin yhdistelmä on jatkuvan integroinnin ja käyttöönoton huippu.
Automaatiotestauksen osana tiimisi keksii varmasti joka toinen päivä lukuisia Selenium-testiautomaatioskriptejä. Koska Seleniumia itseään ei käytetä jatkuvaan integrointiin, Seleniumia, Mavenia ja Jenkinsin integrointia hyödynnetään rakentamisen hallinnassa ja jatkuvassa integroinnissa. Tässä artikkelissa tarkastelemme Mavenin ja Jenkinsin käyttöä Seleniumin kanssa.
Lyhyt yhteenveto blogikirjoituksesta on alla:
Overview Of Selenium, Maven, & Jenkins
Maven on suosittu rakentamisen automatisointityökalu, jota käytetään pääasiassa Java-projekteissa. Mavenin käytön etuna on se, että Java-kirjastot ja lisäosat ladataan dynaamisesti Maven 2:n keskusvarastosta.
Riippuvuudet ja muut olennaiset rakentamiseen liittyvät tiedot tallennetaan projektin pom.xml-tiedostoon. Kun riippuvuudet on ladattu, ne tallennetaan paikalliseen välimuistiin (.M2-repository), ja samaa käytetään rakentamisen generointiin. Tämä yksinkertaistaa rakentamisprosessia, koska kaikki uudet projektin riippuvuudet on lisättävä vain pom.xml-tiedostoon, eli manuaalista lataamista ja asennuspakettien asentamista ei tarvita.
Selenium on laajalti käytetty testiautomaatiokehys web-sovellusten validointiin eri selainten, alustojen ja laitteiden (tai emulaattoreiden) yhdistelmillä. Voit tutustua blogeissamme siihen, miten Selenium Gridiä voidaan käyttää automatisoituun selaintestaukseen.
Jenkins on avoimen lähdekoodin CI/CD-työkalu, joka auttaa rakentamiseen, testaukseen ja käyttöönottoon liittyvien toimintojen automatisoinnissa. Jenkinsillä on laaja plugin-ekosysteemi, se on avointa lähdekoodia ja sillä on intohimoinen yhteisö – tekijöitä, jotka voidaan lukea Jenkinsin ominaisuuksiin.
Tässä Maven ja Jenkins Seleniumin kanssa -blogissa käyttäisimme TestNG:tä, joka on suosittu testikehys, joka on saanut vaikutteita JUnitista. Sitä käytetään laajalti testausalueilla, kuten toiminnallisessa testauksessa, päästä päähän -testauksessa ja muissa.
Nämä ovat joukko työkaluja, joita käyttäisimme esittelyssä:
- Maven – Projektinhallintatyökalu Javassa
- TestNG – Suosittu testiautomaatiokehys
- Selenium WebDriver – Kirjasto, jota käytetään ensisijaisesti selaimen vuorovaikutuksen automatisointiin
- Jenkins – Työkalu jatkuvaan integrointiin (Continuous Integration, CI) ja jatkuvaan käyttöönotoon (Continuous Deployment, CD)
Näissä on kokonaisvaltainen informaatiovirta, kun käytössä on selenium, Maven ja Jenkins on integroitu:
- Kun kehittäjä työntää koodia arkistoon (esim.g., GitHub), Jenkinsin build käynnistyy.
- Maven lataa riippuvaiset kirjastot &-paketit ja aloittaa buildin suorittamisen. Testisarjaan liittyvät tiedot löytyvät testing.xml-tiedostosta, ja samaa käytetään myös
pom.xml
. - Automaattisten testien suorittamista varten asetetaan build-tavoite (esim. install). Sama saavutetaan maven-surefire-pluginin avulla.
- Maven-surefire-plugin käskee TestNG:tä ajamaan testit, jotka ovat annotaation @Test alla.
- Riippuen AUT:sta (testattava sovellus) ja selaimesta (& käyttöjärjestelmäyhdistelmä), jolla selaintenväliset testit suoritetaan, Selenium WebDriver kutsuu vastaavan selaininstanssin ja suorittaa samat automaatiotestit.
- Testien tulokset julkaistaan HTML-raportteina, sillä raporttien tuottamiseen käytetään HTML Publisher -lisäosaa.
- Kaikkakin yksittäinen testitapaus on epäonnistunut, koko testi merkitään tilalla ’Failed.’
Hyötyjä Mavenin & Jenkinsin käytöstä Seleniumin kanssa
Ennen kuin esittelemme Selenium Maven Jenkins -integraation käyttöä, tarkastelemme Mavenin ja Jenkinsin käytön tärkeimpiä hyötyjä Seleniumin kanssa:
- Kunhan toteutukseen tehdään muutos, muutokset otetaan käyttöön testiympäristöön. Automaatiotestausta suoritetaan jatkuvasti, ja kehittäjät pidetään ajan tasalla rakennus- ja testivaiheen tuloksista.
- Testisarjat, jotka koostuvat monista testiskenaarioista (tai testiyhdistelmistä), saattavat kestää pidempään automaatiotestauksessa. Tällaisissa tapauksissa voidaan ajoittaa yöllinen build-ajo rakentamista ja suorittamista varten Jenkins-palvelimelle.
- Koska Maven käyttää pom.xml-tiedostoa, se vähentää yleistä riippuvuutta jar-tiedostojen manuaalisesta lataamisesta. Lisäksi Jenkinsin ’Maven Project’-tyyppi auttaa aloittamaan Selenium Maven, Jenkins-integraation muutamalla konfigurointiasetuksella.
- Selenium Maven Jenkins-integraatioasetus sopii eri maantieteellisiin paikkoihin hajautetuille kehitys- ja testausryhmille.
Edellytykset Jenkinsin Selenium-projektille
Mavenin ja Jenkinsin esittelyä varten Seleniumin kanssa seuraavat ohjelmistot tulisi olla asennettuna (tai saatavilla) koneelle, josta testit käynnistetään:
- Eclipse IDE tai IntelliJ IDEA (Maven tulee oletusarvoisesti molemmissa näissä IDE:ssä)
- Jenkins in .war-muodossa
- Chrome WebDriver, joka vastaa koneellasi olevan Chrome-selaimen versiota
- Microsoft Edge -ajuri
- Tili LambdaTestissä (koska testit suoritetaan LambdaTestin pilvipalveluun perustuvassa Selenium Grid -verkostossa)
Seleniumin ja Mavenin Jenkins-integraation havainnollistaminen Mavenin integraation demonstrointi
Ajanpuutteen vuoksi, emme tarkastelisi Maven-projektin luomisen jokaista vaihetta. Jos haluat nopean yhteenvedon Mavenista Seleniumin kanssa, voit tutustua tähän Mavenin opetusohjelmaan Seleniumin testiautomaatiota varten. Vaiheet, joita käytetään Maven-projektin luomisessa IntelliJ IDEA:ssa, ovat samanlaisia kuin Eclipse IDE:n Maven-projektin luomisessa.
Testisarja – 1
Testiskenaario – 1 (Chrome Windows 10:ssä)
- Navigoi tähän URL-osoitteeseen- https://lambdatest.github.io/sample-todo-app/.
- Valitse kaksi ensimmäistä valintaruutua.
- Kirjoita ’Happy Testing at LambdaTest’ alla olevaan tekstikenttään seuraavalla id:llä = sampletodotext.
- Klikkaa nyt Lisää-painiketta ja tarkista, onko teksti lisätty vai ei.
Testiskenaario – 2 (Testit neljällä eri selain- ja käyttöjärjestelmäyhdistelmällä)
- Navigoi tähän URL-osoitteeseen- https://www.google.com.
- Hae hakusanalla ”LambdaTest”.
- Klikkaa ensimmäistä testitulosta.
- Nyttäkää nyt Assert, jos Sivun otsikko ei vastaa odotettua otsikkoa.
Toteutus
Tarvittavat riippuvuudet ja liitännäiset on lisättävä projektin pom.xml-tiedostoon. Tässä ovat tärkeimmät paketit (tai purkit), jotka ovat osa pom.xml:
- Selenium 4 (Alpha)
- TestNG-kehys (versio 6.9.10)
- Maven Surefire -lisäosa testisarjan suorittamista varten, joka on osa testng.xml
- Maven Surefire Report -lisäosa testitulosraportin tuottamiseen HTML-muotoon
Jos aiot lisätä jonkin uuden lisäosan tai purkin yllä olevaan pom.xml:ään, etsi sama Maven Repositorystä ja lisää vastaava riippuvuus/plugin kyseiseen kohtaan.
Testisarja sisältää kaksi testitapausta, nimittäin test_Selenium4_ToDoApp() & test_Selenium4_GoogleSearch(). Kuten alla näkyy, näiden testitapausten toteutus on tallennettu erillisiin tiedostoihin CrossBrowserTest.java ja GoogleSearchTest.java, ja molemmat ovat osa pakettia org.selenium4.
Testiskenaario test_Selenium4_ToDoApp() on tarkoitettu suoritettavaksi Chrome-selaimella (uusin versio) Windows 10:lle. Toisaalta testiskenaario test_Selenium4_GoogleSearch() on suoritettava neljällä eri selain- ja käyttöjärjestelmäyhdistelmällä eli Chromella (uusin) Windows 10:ssä, Edgellä (84.0) Windows 10:ssä, Chromella (uusin) macOS Mojavessa ja Firefoxilla (uusin) OS X:ssä Mavericksissä.
testng.xml:n merkinnät test_Selenium4_GoogleSearch():n kohdalla on linjattu selainten kyvykkyyksien mukaan, jotka on luotu LambdaTestin kyvykkyyksien luomisella. Alla näkyvät esimerkkikyvyt, jotka on generoitu Chrome (uusin) & Windows 10 -yhdistelmälle:
Toteutuksessa käyttäisimme TestNG-kuuntelijoita Selenium WebDriverissä automaatiotestaukseen. Suite-tasolla määrittelemme TestNG xml-tiedostossa luokkien nimet kuuntelijoiden toteuttamiseksi. TestNG:n @listeners-annotaatiota käytetään luokan org.selenium4.GoogleSearchTest lisäämiseen.
Kuten alla näkyy, testin nimi ’Google Search Test – 1’ ottaa syöttöparametrit, jotka määrittävät selaimen, version, alustan ja näytön resoluution. Nämä arvot välitettäisiin testimenetelmälle argumentteina käyttämällä parametrisoituja annotaatioita (esim. @org.testng.annotations.Parameters(value={”browser”, ”version”, ”platform”, ”resolution”}).
CrossBrowserTest.java (Testiskenaarion toteutus – 1)
GoogleSearchTest.java (Testiskenaarion toteutus – 2)
Koodin läpikäynti
Vaihe 1 – Tarvittavat paketit tuodaan ennen kuin varsinainen toteutus käynnistyy. Koska TestNG-kehystä käytetään testaukseen; näin ollen myös sen paketit tuodaan ennen kuin sen annotaatioita voidaan käyttää.
1
2
3
4
4
5
|
import org.testng.annotations.AfterClass;
import org.testng.annotations.BeforeClass;
import org.testng.annotations.Test;
import static org.junit.Assert.*;
import org.junit.Test.*;
|
Vaihe 2 – IExecutionListeneriä käytetään testisarjan alun ja lopun seurantaan, sillä testiskenaario suoritettaisiin eri syötekombinaatioilla, jotka välitetään TestNG:n xml-tiedoston kautta.
IExecutionListener sisältää kaksi metodia – onExecutionStart() ja onExecutionFinish(). onExecutionStart() kutsutaan ennen testin alkua ja onExecutionFinish() kutsutaan, kun testit/testisarjat on suoritettu loppuun.
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
|
public class GoogleSearchTest implements IExecutionListener {
/* protected static EdgeDriver driver; */
String URL = ”https://www.google.com/”;
…………………………..
…………………………..
…………………………..
@Override
public void onExecutionStart() {
System.out.println(”onExecutionStart”);
}
@Override
public void onExecutionFinish() {
System.out.println(”onExecutionFinish”);
}
|
Vaihe 3 – @BeforeTest-annotaatiolla toteutettu metodi suoritetaan ennen kuin mitään kyseisen tagin alla olevaan luokkaan kuuluvaa testimetodia suoritetaan. Koska käytämme parametrisoitua testausta TestNG:n kanssa, testimetodiin lisätään annotaatio @Parameters(value={”browser”, ”version”, ”platform”, ”resolution”}).
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
21
|
Näille parametreille välitettäisiin arvot testng.xml:stä, esimerkkiparametri alla:
Vaihe 4 – Metodi testSetUp on parametrisoitu metodi, joka ottaa iteratiivisesti testiparametrit TestNG:ltä.xml:stä, kunnes testisarjan loppu saavutetaan.
Koska testit suoritetaan Selenium Grid -pilvipalvelussa LambdaTestissä, tunnistetiedot koostuvat käyttäjätunnuksesta & käyttäjätunnuksesta & käyttöoikeustunnuksesta, jolla voidaan käyttää LambdaTest Gridiä – @hub.lambdatest.com/wd/hub.
1
2
3
4
5
6
7
8
9
10
11
11
12
13
14
|
public void testSetUp(String browser, String version, String platform, String resolution) throws Exception {
DesiredCapabilities capabilities = new DesiredCapabilities();
capabilities.setCapability(”build”, ”Google Search – Maven Parallel Testing with Jenkins Pipeline”);
capabilities.setCapability(”name”, ”Google Search – Maven Parallel Testing with Jenkins Pipeline”);
………………………… …………………………
…………………………
try {
driver = new RemoteWebDriver(new URL(”http://” + käyttäjätunnus + ”:” + access_key + ”@hub.lambdatest.com/wd/hub”), capabilities);
} catch (MalformedURLException e) {
System.out.println(”Virheellinen verkko-URL-osoite (Invalid grid-URL)”);
}
System.out.println(”Started session”);
|
RemoteWebDrive API käyttää etä-URL:ää ja selainominaisuuksia, jotka luodaan LambdaTest-ominaisuuksien generaattorilla ja välitetään metodille syöttöparametreina.
1
2
3
4
|
try {
driver = new RemoteWebDriver(new URL(”http://” + käyttäjätunnus + ”:” + access_key + ”@hub.lambdatest.com/wd/hub”), capabilities);
}
catch (MalformedURLException e)
|
Vaihe 5 – Testimenetelmä on toteutettu @Test
-annotaation alla. Asianmukaisia Selenium-metodeja (findElement, sendKeys, submit ja muut) käytetään Web Elementin paikantamiseen ja asianmukaisten toimintojen suorittamiseen sille.
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
|
@Test
public void test_Selenium4_GoogleSearch() throws InterruptedException {
driver.navigate().to(URL);
driver.manage().window().maximize();
try {
/* Syötä hakusana Googlen hakukenttään */
search_box = driver.findElement(By.xpath(”//input”));
search_box.sendKeys(search_string);
search_box.submit();
……………………………………
……………………………………
}
……………………………………
……………………………………
}
|
Vaihe 6 – Viiveiden estäminen ei ole hyvä ohjelmointikäytäntö, mutta olemme lisänneet muutaman viiveen tuotoksen tarkkailua varten.
1
2
3
4
5
6
7
|
WebElement lt_link = driver.findElement(By.xpath(”//h3”));
lt_link.click();
/* Ei ole hyvä ohjelmointitapa, lisätty havainnollistamiseksi */
Thread.sleep(5000);
…………………………………… ……………………………………
……………………………………
|
Vaihe 7 – Annotaatiolla @AfterTest
toteutettu metodi vapauttaa instantioidun vastaavan WebDriverin varaamat resurssit.
1
2
3
4
5
6
7
|
@AfterClass
public void tearDown() {
if (driver != null) {
((JavascriptExecutor) driver).executeScript(”lambda-status=” + status);
driver.quit();
}
}
|
Testisarja – 2
Testiskenaario – 1 (Chrome Windows 10:ssä)
- Navigoi URL-osoitteeseen https://lambdatest.com
- Tarkista sivu. Otsikko
- Vertaa Sivun otsikkoa odotettuun otsikkoon
- Varmistus, jos otsikot eivät täsmää
Toteutus
Se on sama, jota käytetään testisuku-1, lukuun ottamatta artifactId:tä ja groupID:tä.
CrossBrowserTest.java
Mavenin ja Jenkinsin demonstroimiseksi Seleniumin kanssa suorittaisimme nämä kaksi testisarjaa rinnakkain käyttäen FreeStyle-projektia ja Jenkinsin putkea.
Woo-hoo! Kiitos, että liityit LambdaTestin viikoittaiseen uutiskirjeeseen!
Jenkinsin määrittäminen Jenkinsin Selenium-projektia varten
Ennen kuin luomme Jenkinsissä uuden työn, joka rakentaa aiemmin mainitun projektin, meidän on määritettävä Jenkinsin ympäristö.
Vaihe 1: JDK:n asennuspolku on lisättävä Järjestelmäympäristömuuttujaan. Tämä tarvitaan myös JRE:lle (Java Runtime Environment).
Vaihe 2: Lataa Jenkinsin .war-muodossa ja käynnistä Jenkins suorittamalla terminaalissa seuraava komento:
1
|
java -Dhudson.model.DirectoryBrowserSupport.CSP=”sandbox allow-scripts allow-popups allow-popups-to-escape-sandbox; style-src ’unsafe-inline’ *;” -Dsvnkit.http.sslProtocols=TLSv1 -jar Jenkins.war –httpPort=9090
|
8080:n (Jenkinsin käyttämä oletusporttinumero) sijaan käynnistämme Jenkins-palvelun porttiin 9090.
Vaihe 3: Käy localhost:9090
selaimessa aloittaaksesi Jenkinsin käytön.
Luo uusi käyttäjä (admin-oikeuksilla). Kirjaudu sisään tällä käyttäjätunnuksella jatkaaksesi Jenkinsin käyttöä.
Vaihe 4: Koska projektissa käytetään Mavenia ja Jenkinsiä Seleniumin kanssa, Jenkinsissä on määritettävä Javan & Mavenin globaalit asetukset ja polut. Näiden asetusten määrittämistä varten siirry kohtaan ’Configure System’ osiossa ’System Configuration’.
Kohdassa ’Globaalit ominaisuudet’ lisää seuraavat ympäristömuuttujat: < Sijainti, johon JDK on asennettu>
Meidän tapauksessamme merkinnät ovat seuraavat:
1
2
|
JAVA_HOME – C:\ Ohjelmatiedostot\Java\jdk1.8.0_251
MAVEN_HOME – C:\apache-maven\apache-maven-3.6.6.3\
|
Klikkaa Sovelletaan ja Tallenna.
Tämän ympäristömuuttujan lisääminen Järjestelmän kokoonpanoon tekee asetukset julkisiksi (i.e. voidaan käyttää Jenkins FreeStyle -projektissa ja Jenkins Pipeline -projektissa).
Vaihe 5: HTML Publisher Plugin on asennettava, ennen kuin testien post-build-toiminto voidaan suorittaa. Sama voidaan tehdä siirtymällä kohtaan ’Manage Plugins’ ja etsimällä ’HTML Publisher Plugin’ välilehdeltä ’Available’. Napsauta ’Install’ (Asenna) pluginin asentamiseksi.
Huomautus: Selaintenvälistä testausta varten on suositeltavaa käyttää Jenkinsiä .war-muodossa, koska testit suoritetaan ei-headless-tilassa vain, kun Jenkinsiä käytetään .war-muodossa.
Selenium Maven Jenkins -integraatio FreeStyle-projektia käyttäen
Luotaksesi FreeStyle-projektin, joka käyttää Selenium Maven Jenkins -integraatiota demonstraationa, suorita seuraavat vaiheet Jenkinsin käyttöliittymässä (i.
Jenkins tarjoaa myös mahdollisuuden luoda ’Maven’-projekti, jossa projektin perustamiseen tarvittavat konfigurointiasetukset ovat minimaaliset. Tässä esittelyssä olemme kuitenkin käyttäneet ’FreeStyle’-projektia.
Vaihe 3: Siirry ’Build’ ? ’Kutsu ylätason Maven-kohteita’. Maven-version tulee viitata koneelle asennettuun Maven-versioon. Meidän tapauksessamme se on Maven 3.6.3.
Vaihe 4: Napsauta ’Advanced’ (Lisäasetukset) asettaaksesi Goals (Tavoitteet), määritä POM-tiedostojen sijainti kahdelle testisarjalle. Meidän tapauksessamme projektin sijainnit ovat alla:
Koska haluamme suorittaa rinnakkaisrakentamisen, käytämme mvn-komennon kanssa seuraavaa vaihtoehtoa:
1
|
mvn -T 4 clean install
|
Komennolla suoritetaan rakentaminen neljällä säikeellä. Kohtaan ’Goals’ tulee kirjoittaa -T 4 clean install. Sama tavoite asetetaan molempien projektien Maven-rakennuksille. Anna kohdassa ’POM’ absoluuttinen sijainti pom.xml
(eli Build 1 – C:\Users\Lenovo\IdeaProjects\Maven_Jenkins\pom.xml
Build 2 – C:\Users\Lenovo\IdeaProjects\Maven_Jenkins_2\pom.xml)
Vaihe 5: ’Post-Build-toiminto’ on julkaista HTML-raportit, jotka antavat tietoa yleisestä testiskenaariosta (esim. läpäistyjen/hylättyjen/hylättyjen testien määrä jne.). Valitse ’Publish HTML Reports’ (Julkaise HTML-raportit) kohdassa ’Add post-build action’ (Lisää rakentamisen jälkeinen toiminto).
Vaihe 6: Maven Surefire Report -liitännäinen jäsentää luodut TEST-*.xml-tiedostot, jotka ovat osoitteessa ${project_dir}/target/surefire-reports (${project_dir}/target/surefire-reports), ja renderöi ne DOXIA:n avulla. Kirjoita kohtaan ’HTML-hakemisto arkistoitavaksi’ sen sijainnin absoluuttinen polku, joka sisältää surefire-raportit.
Testisarjan 1 osalta: ${project_dir_1}/target/surefire-reports
Testisarjan 2 osalta:
1
2
3
|
HTML-hakemisto arkistoon – ${project_dir_2}/target/surefire-reports
Hakemistosivu(t) – index.html
Raportin otsikko – Test Scenario 2 Report
|
Vaihe 7: Projekti on nyt build-valmis. Napsauta ’Build Now’ (Rakenna nyt) -vaihtoehtoa käynnistääksesi rakentamisen.
Vaihe 8: Napsauta ’Console Output’ (Konsolin ulostulo) -vaihtoehtoa todistaaksesi rakentamis-, testaus- ja raportointivaiheiden edistymisen.
Vaihe 9: Kuten ’Konsolin lokitiedoista’ nähdään; testit suoritetaan onnistuneesti – viisi testitapausta osana ensimmäistä testisarjaa ja yksi testitapaus osana toista testisarjaa.
Tässä ovat kuvakaappaukset HTML-raporteista, jotka HTML Publisher Plugin tuottaa kahdesta testisarjasta.
Selenium Maven Jenkins-integraatio Jenkins-putken avulla
Tässä osiossa Mavenin ja Jenkinsin ja Seleniumin välinen demo, käyttäisimme Jenkinsin putkilinjaa, joka käyttää Domain Specific Language (DSL) -kieltä putkilinjan toteuttamiseen koodina.
Jenkins-putkiston määrittely kirjoitetaan yleensä tiedostoon nimeltä Jenkinsfile. Tämä tiedosto sisältäisi Jenkins-putkiston suorittamiseen tarvittavat vaiheet. Jos haluat nopean yhteenvedon deklaratiivisesta Jenkins-putkistosta, voit tutustua tähän Jenkins-putkisto-oppaaseen.
Mavenin ja Seleniumin integroimiseksi Jenkins-putkistoon sinun on suoritettava alla mainitut vaiheet:
Vaihe 1: Luo uusi elementti otsikolla ’LambdaTest – Selenium Maven Jenkins-integraatio (putkistoprojekti)’, jonka tyyppi on tyypiltään ’Pipeline’.
Vaihe 2: Liitä Pipeline-määrittelyssä Jenkinsfile-tiedoston sisältö alla esitetyllä tavalla. Napsauta Apply (Käytä) ja Save (Tallenna) -painiketta.
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
|
pipeline {
agent any
tools {
maven ’MAVEN_3.6.3’
jdk ’JDK_1.8.0_251’
} }
stages {
stage(’Run Tests’) {
environment {
PROJECT_DIR_1 = ”C:\\Users\\\Lenovo\\\IdeaProjects\\\Maven_Jenkins”
PROJECT_DIR_2 = ”C:\\\Users\\\Lenovo\\\IdeaProjects\\\\Maven_Jenkins_2”
}
parallel {
stage(’Test Scenario 1’) {
agent {
label ”Slave_1”
}
steps {
echo ’maven clean’
bat ’ mvn -f %PROJECT_DIR_1%\\pom.xml clean install’
}
post {
success {
publishHTML ()
}
}
}
stage(’Test Scenario 2’) {
agent {
label ”Slave_2”
}
steps {
echo ’maven clean’
bat ’ mvn -f %PROJECT_DIR_2%\\pom.xml clean install’
} } }
post {
success {
publishHTML ()
}
}
}
}
}
}
}
|
Vaihe 3: Rakentamisen jälkeisessä osiossa käytetään HTML Publisher Plugin -liitännäistä, jolla luodaan suorituksen jälkeiset testiraportit kahdelle testiskenaariolle.
Pipeline Walkthrough
Vaihe 1: Tämä tietty Jenkins-tehtävä voidaan suorittaa millä tahansa agentilla. Työkalut-direktiivillä varustettu osio sisältää kaikki työkalut, jotka on asennettava automaattisesti. Sama lisätään sitten myös PATH-ympäristömuuttujaan.
1
2
3
4
5
6
|
pipeline {
agent any
tools {
maven ’MAVEN_3.6.3’
jdk ’JDK_1.8.0_251’
} }
|
Koneeseen, jossa testit suoritetaan, on asennettu JDK 1.8.0_251 ja Maven 3.6.3. Aliasit maven ja jdk viittaavat vastaaviin Maven- ja JDK-versioihin.
Vaihe 2: Ympäristödirektiivillä määritellään ympäristömuuttujat PROJECT_DIR_1 ja PROJECT_DIR_2, jotka viittaavat paikkaan, jossa Java-projektit ovat. Näitä ympäristömuuttujia voidaan käyttää kaikissa vaiheissa tai vaihekohtaisissa vaiheissa, koska ne määritellään päävaiheessa ’Run Tests.’
1
2
3
4
5
6
|
stages {
stage(’Run Tests’) {
environment {
PROJECT_DIR_1 = ”C:\\Users\\\Lenovo\\\IdeaProjects\\\Maven_Jenkins”
PROJECT_DIR_2 = ”C:\\Users\\\Lenovo\\\IdeaProjects\\\\Maven_Jenkins_2”
}
|
Vaihe 3: Jenkinsin rinnakkaisdirektiiviä käytetään Pipeline-vaiheiden suorittamiseen rinnakkain. Meidän tapauksessamme Jenkinsin Pipeline koostuu kahdesta vaiheesta – Test Scenario 1 ja Test Scenario 2.
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
|
vaiheet {
vaihe(’Testien suorittaminen’) {
ympäristöt {
PROJEKTI_LUETTELO_1 = ”C:\\Users\\\Lenovo\\\IdeaProjects\\\Maven_Jenkins”
PROJECT_DIR_2 = ”C:\\Users\\\Lenovo\\\IdeaProjects\\\\Maven_Jenkins_2”
}
parallel {
stage(’Test Scenario 1’) {
…………………………………..
…………………………………..
}
stage(’Test Scenario 2’) {
…………………………………..
…………………………………..
}
}
}
}
|
Vaihe 4: Molemmissa vaiheissa suoritettavat toimenpiteet ovat täsmälleen samanlaisia, paitsi että ne suoritetaan eri projekteille. Vaihe ’Test Scenario 1
’ suoritetaan solmussa ’Slave_1
’ ja vaihe ’Test Scenario 2
’ suoritetaan solmussa ’Slave_2
’.
1
2
3
4
5
6
7
8
9
10
11
|
parallel {
stage(’Test Scenario 1’) {
agent {
label ”Slave_1”
}
………….
………….
stage(’Test Scenario 2’) {
agent {
label ”Slave_2”
}
|
Jos aiot suorittaa putken millä tahansa agentilla, voit ohittaa minkään tietyn agentin nimen käytön näissä vaiheissa. Voit tutustua Mikä on Jenkins -blogiimme ymmärtääksesi solmujen luomisen Jenkinsissä.
Tapauksessamme loimme kaksi solmua (Slave_1 ja Slave_2) ja laitoimme ne verkkoon ennen testien suorittamista.
Vaihe 5: Seuraavassa vaiheessa käynnistetään build. Tämän jälkeen suoritetaan komento mvn clean install projektin hakemistossa olevaan pom.xml-tiedostoon. Käytämme Windows-konetta suoritukseen, joten olemme käyttäneet bat (tai batch) -komentoa Mavenin rakentamisen käynnistämiseen.
1
2
3
4
|
steps {
echo ’maven clean’
bat ’ mvn -f %PROJECT_DIR_1%\\\pom.xml clean install’
}
|
Vaihe 6: Post-build-toimintoa käytetään HTML-raporttien julkaisemiseen kunkin vaiheen osalta. Toiminnot lisätään ’post’-direktiivin alle. Haluamme kutsua testiraportin luomista vain, jos rakentaminen onnistuu. Näin ollen toiminnot ovat success-direktiivin alla.
Kuten FreeStyle-projektia käyttävässä demonstraatiossa nähtiin, reportDir asetetaan paikkaan, jossa surefire-raportit luodaan (eli ${project_dir}/target/surefire-reports). ReportFiles-kentän arvoksi asetetaan index.html (eli ${project_dir}/target/surefire-reports/index.html).
1
2
3
4
5
6
7
8
9
10
11
12
13
|
post {
success {
publishHTML ()
}
}
|
Kun putkilinja on lisätty Jenkinsfileen, napsauta ’Build Now’ (Rakenna nyt) aloittaaksesi rakentamisprosessin.
Voit viedä hiiren hiirellä minkä tahansa vaiheen kohdalle ja napsauttaa ’Logs’ (Lokeja), jotta voit tarkastella kyseisen vaiheen suorituksen edistymistä. Kuten Stagen tilannekuvasta näkyy, kaksi vaihetta suoritetaan rinnakkain.
Koska käytämme rinnakkaisia vaiheita deklaratiivisen Pipeline-putken kanssa Jenkinsissä, vastaavat testitapaukset suoritetaan rinnakkain pilvipohjaisessa Selenium-verkossa LambdaTestissä. Kuten alla näkyy, suunnitelmamme LambdaTestissä tukee enintään viiden testin rinnakkaista suorittamista.
Kuten alla näkyy, testit on suoritettu onnistuneesti.
Kokonaissuoritusaika oli noin 6 minuuttia. Voit tarkastella kyseiseen vaiheeseen liittyviä lokitietoja, kun viet hiiren hiirellä minkä tahansa vaiheen päälle.
Katkaistuista lokitiedostoista käy ilmi, että kahden vaiheen vaiheet suoritettiin rinnakkain:
Tässä on kuvakaappaus HTML-raporteista, jotka luodaan osana rakentamisen jälkeistä toimintaa:
Pakkaus
Selenium-testien suorittaminen Jenkinsissä antaa joustavuutta testien suorittamiseen joka kerta, kun ohjelmistoon tehdään muutoksia, ja nämä muutokset on testattava erilaisilla syöttöyhdistelmillä. Mavenia käytetään Java-projekteissa, koska se helpottaa riippuvuuksien hallintaa pom.xml-tiedoston avulla.
Jenkinsin freestyle-projekteja tulisi käyttää projekteissa, jotka eivät ole kovin monimutkaisia. Jenkins Pipelinea tulisi käyttää, kun halutaan määritellä käyttöönottoputki koodina. Jenkins Pipeline -direktiiviä parallel tulisi käyttää, jos halutaan hyödyntää vaiheiden rinnakkaista suorittamista Jenkinsissä. Jenkins Pipeline voidaan integroida pilvipohjaiseen Selenium Gridiin, kuten LambdaTestiin, jonka avulla myös Maven ja Jenkins voidaan integroida tehokkaammin Seleniumiin.
Toivomme, että seuraamalla tätä opetusohjelmaa voit helposti integroida Mavenin ja Jenkinsin Seleniumin kanssa. Kiitos lukemisesta!
Himanshu Sheth
Himanshu Sheth
Himanshu Shethilla on yli 7 vuoden kokemus testiautomaatiosta, BDD:stä ja TDD:stä, ja hän työskentelee automatisointi-insinöörinä LambdaTestissä. Hän on myös innokas bloggaaja.
Vastaa