Apache ANT opetusohjelma
โก รlykรคs yhteenveto
Apache Ant on avoimen lรคhdekoodin, Java-pohjainen kรครคnnรถstyรถkalu, joka automatisoi kรครคntรคmisen, testauksen, pakkaamisen ja kรคyttรถรถnoton yhden build.xml-tiedoston avulla. Integroitu Selenium ja TestNG, se tekee testien suorituksesta toistettavaa, jรคrjestelmรคllistรค ja helppoa missรค tahansa.

Mikรค on Apache Ant?
Tรคydellistรค ohjelmistotuotetta luotaessa on huolehdittava erilaisista kolmannen osapuolen API:ista, niiden luokkapolusta, aiempien suoritettavien binรครคritiedostojen puhdistamisesta, lรคhdekoodimme kรครคntรคmisestรค, lรคhdekoodin suorittamisesta, raporttien ja kรคyttรถรถnottokoodikannan luomisesta jne. Jos nรคmรค tehtรคvรคt ovat tehdรค yksitellen manuaalisesti, se vie valtavasti aikaa ja prosessi on altis virheille.
Tรคssรค tulee esiin Anten kaltaisen rakennustyรถkalun merkitys. Se tallentaa, suorittaa ja automatisoi kaikki prosessit Ant:n asetustiedostossa (yleensรค build.xml) mainitussa jรคrjestyksessรค.
Ant-rakennuksen etu
- Ant luo sovelluksen elinkaaren eli puhdistaa, kรครคntรครค, asettaa riippuvuuden, suorittaa, raportoi jne.
- Kolmannen osapuolen API-riippuvuuden voi asettaa Ant eli muun Jar-tiedoston luokkapolun mรครคrittรครค Ant-koontitiedosto.
- Tรคydellinen sovellus luodaan pรครคstรค pรครคhรคn -toimitusta ja kรคyttรถรถnottoa varten.
- Se on yksinkertainen rakennustyรถkalu, jossa kaikki asetukset voidaan tehdรค XML-tiedostolla ja joka voidaan suorittaa komentoriviltรค.
- Se tekee koodistasi puhtaan, koska kokoonpano on erillinen todellisesta sovelluslogiikasta.
Kuinka asentaa Ant
Antin asentamisen vaiheet Windows on seuraava
Vaihe 1) Mene https://ant.apache.org/bindownload.cgi Tai Lataa .zip-tiedosto osoitteesta apache-ant-1.9.4-bin.zip
Vaihe 2) Pura kansio ja siirry ja kopioi polku puretun kansion juureen
Vaihe 3) Siirry kohtaan Kรคynnistรค -> Tietokone -> napsauta hiiren kakkospainikkeella tรคtรค ja valitse "Ominaisuudet" ja napsauta sitten Jรคrjestelmรคn lisรคasetukset
Vaihe 4) Uusi ikkuna avautuu. Napsauta "Ympรคristรถmuuttujaโฆ" -painiketta.
Vaihe 5) Napsauta Newโฆ-painiketta ja aseta muuttujan nimeksi ANT_HOME ja muuttujan arvo puretun kansion juuripoluksi ja napsauta OK.
Vaihe 6) valitse nyt luettelosta 'Path'-muuttuja ja napsauta 'Muokkaa' ja liitรค; %ANT_HOME%\bin.
Kรคynnistรค jรคrjestelmรค uudelleen kerran ja olet valmis kรคyttรคmรครคn Ant build -tyรถkalua nyt.
Vaihe 7) Ant-version tarkistaminen komentorivin avulla:
Ant โ versio
Build.xml:n ymmรคrtรคminen
Build.xml on Ant-rakennustyรถkalun tรคrkein osa. a Java projekti, kaikki puhdistukseen, asennukseen, kรครคnnรถkseen ja kรคyttรถรถnottoon liittyvรคt tehtรคvรคt mainitaan tรคssรค tiedostossa XML-muodossa. Kun suoritamme tรคmรคn XML-tiedoston komentorivillรค tai millรค tahansa IDE-laajennuksella, kaikki tรคhรคn tiedostoon kirjoitetut ohjeet suoritetaan perรคkkรคin.
Ymmรคrretรครคn esimerkki build.XML:n koodista
-
Projektitunnistetta kรคytetรครคn mainitsemaan projektin nimi ja baseir-attribuutti. Basedir on sovelluksen juurihakemisto
<project name="YTMonetize" basedir=".">
- Ominaisuustunnisteita kรคytetรครคn muuttujina build.XML-tiedostossa, jota kรคytetรครคn jatkossa
<property name="build.dir" value="${basedir}/build"/> <property name="external.jars" value=".\resources"/> <property name="ytoperation.dir" value="${external.jars}/YTOperation"/> <property name="src.dir"value="${basedir}/src"/>
- Target tagit, joita kรคytetรครคn vaiheina, jotka suoritetaan perรคkkรคisessรค jรคrjestyksessรค. Name-attribuutti on kohteen nimi. Yhdessรค build.xml-tiedostossa voi olla useita kohteita
<target name="setClassPath"> - polkutunnistetta kรคytetรครคn niputtamaan kaikki tiedostot loogisesti, jotka ovat yhteisessรค paikassa
<path id="classpath_jars"> - pathelement-tunniste asettaa polun yhteisen sijainnin juureen, johon kaikki tiedostot on tallennettu
<pathelement path="${basedir}/"/> - pathconvert-tunnistetta kรคytetรครคn muuntamaan kaikkien polkutunnisteen sisรคllรค olevien yleisten tiedostojen polut jรคrjestelmรคn luokkapolkumuotoon
<pathconvert pathsep=";" property="test.classpath" refid="classpath_jars"/>
- fileset-tagi, jota kรคytetรครคn luokkapolun asettamiseen eri kolmannen osapuolen jarille projektissamme
<fileset dir="${ytoperation.dir}" includes="*.jar"/>
- Kaikutunnistetta kรคytetรครคn tekstin tulostamiseen konsoliin
<echo message="deleting existing build directory"/>
- Poista tagi puhdistaa tiedot annetusta kansiosta
<delete dir="${build.dir}"/>
- mkdir-tunniste luo uuden hakemiston
<mkdir dir="${build.dir}"/>
- javac-tunniste, jota kรคytetรครคn Java-lรคhdekoodin kรครคntรคmiseen ja .class-tiedostojen siirtรคmiseen uuteen kansioon
<javac destdir="${build.dir}" srcdir="${src.dir}"> <classpath refid="classpath_jars"/> </javac>
- jar-tunniste luo jar-tiedoston .class-tiedostoista
<jar destfile="${ytoperation.dir}/YTOperation.jar" basedir="${build.dir}">
- manifest-tunniste asettaa pรครคluokkasi suoritusta varten
<manifest> <attribute name="Main-Class" value="test.Main"/> </manifest>
- 'depends'-attribuutti, jota kรคytetรครคn saamaan yksi kohde riippuvaiseksi toisesta kohteesta
<target name="run" depends="compile">
- java-tunniste suorittaa pรครคtoiminnon kรครคnnรถskohdeosiossa luodusta jarista
<java jar="${ytoperation.dir}/YTOperation.jar" fork="true"/>
Suorita Ant kรคyttรคmรคllรค Eclipse kytkeรค
Suorita Ant from eclipse siirtymรคllรค build.xml-tiedostoon -> napsauta tiedostoa hiiren kakkospainikkeella -> Suorita nimellรคโฆ -> napsauta Build file
esimerkki
Otamme pienen nรคyteohjelman, joka selittรครค Ant-toiminnallisuuden erittรคin selkeรคsti. Projektirakenteemme nรคyttรครค tรคltรค -
Tรคssรค esimerkissรค meillรค on 4 kohdetta
- Aseta luokkapolku ulkoisille purkeille,
- Puhdista aiemmin noudatettu koodi
- Kรครคntรครค olemassa olevaa Java-koodia
- Suorita koodi
Guru99AntClass.class
package testAnt; import java.util.Date; public class Guru99AntClass { public static void main(String...s){ System.out.println("HELLO GURU99 ANT PROGRAM"); System.out.println("TODAY's DATE IS->"+ currentDate() ); } public static String currentDate(){ return new Date().toString(); } }
Build.xml
<?xml version="1.0" encoding="UTF-8" standalone="no"?> <!--Project tag used to mention the project name, and basedir attribute will be the root directory of the application--> <project name="YTMonetize" basedir="."> <!--Property tags will be used as variables in build.xml file to use in further steps--> <property name="build.dir" value="${basedir}/build"/> <property name="external.jars" value=".\resources"/> <property name="ytoperation.dir" value="${external.jars}/YTOperation"/> <property name="src.dir"value="${basedir}/src"/> <!--Target tags used as steps that will execute in sequential order. name attribute will be the name of the target and < a name=OLE_LINK1 >'depends' attribute used to make one target to depend on another target --> <target name="setClassPath"> <path id="classpath_jars"> <pathelement path="${basedir}/"/> </path> <pathconvert pathsep=";"property="test.classpath" refid="classpath_jars"/> </target> <target name="clean"> <!--echo tag will use to print text on console--> <echo message="deleting existing build directory"/> <!--delete tag will clean data from given folder--> <delete dir="${build.dir}"/> </target> <target name="compile" depends="clean,setClassPath"> <echo message="classpath:${test.classpath}"/> <echo message="compiling.........."/> <!--mkdir tag will create new director--> <mkdir dir="${build.dir}"/> <echo message="classpath:${test.classpath}"/> <echo message="compiling.........."/> <!--javac tag used to compile java source code and move .class files to a new folder--> <javac destdir="${build.dir}" srcdir="${src.dir}"> <classpath refid="classpath_jars"/> </javac> <!--jar tag will create jar file from .class files--> <jar destfile="${ytoperation.dir}/YTOperation.jar"basedir="${build.dir}"> <!--manifest tag will set your main class for execution--> <manifest> <attribute name="Main-Class" value="testAnt.Guru99AntClass"/> </manifest> </jar> </target> <target name="run" depends="compile"> <!--java tag will execute main function from the jar created in compile target section--> <java jar="${ytoperation.dir}/YTOperation.jar"fork="true"/> </target> </project>
Kuinka Suorittaa TestNG koodi Ant
Tรครคllรค luomme luokan Testng menetelmรคt ja aseta luokkapolku Testaus tiedostossa build.xml.
Nyt testausmenetelmรคn suorittamiseksi luomme toisen testng.xml-tiedoston ja kutsumme tรคtรค tiedostoa build.xml-tiedostosta.
Vaihe 1) Luomme "Guru99Muurahaisluokka.luokkaโ paketissa testAnt
Guru99AntClass.class
package testAnt; import java.util.Date; import org.testng.annotations.Test; public class Guru99AntClass { @Test public void Guru99AntTestNGMethod(){ System.out.println("HELLO GURU99 ANT PROGRAM"); System.out.println("TODAY's DATE IS->"+ currentDate() ); } public static String currentDate(){ return new Date().toString(); } }
Vaihe 2) Luo kohde tรคmรคn luokan lataamiseksi Build.xml:ssรค
<!-- Load testNG and add to the class path of application --> <target name="loadTestNG" depends="setClassPath"> <!โusing taskdef tag we can add a task to run on the current project. In below line, we are adding testing task in this project. Using testing task here now we can run testing code using the ant script --> <taskdef resource="testngtasks" classpath="${test.classpath}"/> </target>
Vaihe 3) Luo testng.xml
testng.xml
<?xml version="1.0"encoding="UTF-8"?> <!DOCTYPE suite SYSTEM "http://testng.org/testng-1.0.dtd"> <suite name="YT"thread-count="1"> <test name="GURU99TestNGAnt"> <classes> <class name="testAnt.Guru99AntClass"> </class> </classes> </test> </suite>
Vaihe 4) luoda Target Build.xml:ssรค suorittaaksesi tรคmรคn TestNG koodi
<target name="runGuru99TestNGAnt" depends="compile"> <!-- testng tag will be used to execute testng code using corresponding testng.xml file. Here classpath attribute is setting classpath for testng's jar to the project--> <testng classpath="${test.classpath};${build.dir}"> <!โxmlfileset tag is used here to run testng's code using testing.xml file. Using includes tag we are mentioning path to testing.xml file--> <xmlfileset dir="${basedir}" includes="testng.xml"/> </testng>
Vaihe 5) Tรคydellinen Build.xml
<?xml version="1.0"encoding="UTF-8"standalone="no"?> <!--Project tag used to mention the project name, and basedir attribute will be the root directory of the application--> <project name="YTMonetize" basedir="."> <!--Property tags will be used as variables in build.xml file to use in further steps--> <property name="build.dir"value="${basedir}/build"/> <!-- put testng related jar in the resource folder --> <property name="external.jars" value=".\resource"/> <property name="src.dir" value="${basedir}/src"/> <!--Target tags used as steps that will execute in sequential order. name attribute will be the name of the target and 'depends' attribute used to make one target to depend on another target--> <!-- Load testNG and add to the class path of application --> <target name="loadTestNG"depends="setClassPath"> <taskdef resource="testngtasks"classpath="${test.classpath}"/> </target> <target name="setClassPath"> <path id="classpath_jars"> <pathelement path="${basedir}/"/> <fileset dir="${external.jars}" includes="*.jar"/> </path> <pathconvert pathsep=";"property="test.classpath"refid="classpath_jars"/> </target> <target name="clean"> <!--echo tag will use to print text on console--> <echo message="deleting existing build directory"/> <!--delete tag will clean data from given folder--> <delete dir="${build.dir}"/> </target> <target name="compile"depends="clean,setClassPath,loadTestNG"> <echo message="classpath:${test.classpath}"/> <echo message="compiling.........."/> <!--mkdir tag will create new director--> <mkdir dir="${build.dir}"/> <echo message="classpath:${test.classpath}"/> <echo message="compiling.........."/> <!--javac tag used to compile java source code and move .class files to a new folder--> <javac destdir="${build.dir}"srcdir="${src.dir}"> <classpath refid="classpath_jars"/> </javac> </target> <target name="runGuru99TestNGAnt"depends="compile"> <!-- testng tag will be used to execute testng code using corresponding testng.xml file --> <testng classpath="${test.classpath};${build.dir}"> <xmlfileset dir="${basedir}"includes="testng.xml"/> </testng> </target> </project>
Vaihe 6) ulostulo
Antin hallinnoidessa rakennusta ja TestNG kytkettynรค, seuraava vaihe kytkee Antin suoraan Selenium WebDriver.
Muurahainen kanssa Selenium Web-ohjain
Tรคhรคn mennessรค olemme oppineet, ettรค Antin avulla voimme sijoittaa kaikki kolmannen osapuolen jar-tiedostot tiettyyn paikkaan jรคrjestelmรคssรค ja mรครคrittรครค niiden polun projektillemme. Tรคllรค menetelmรคllรค asetamme kaikki projektimme riippuvuudet yhteen paikkaan ja teemme siitรค luotettavamman kรครคntรคmisen, suorittamisen ja kรคyttรถรถnoton kannalta.
Vastaavasti seleeniรค kรคyttรคvissรค testausprojekteissamme voimme helposti mainita seleeniriippuvuuden build.xml:ssรค, eikรค meidรคn tarvitse lisรคtรค sen luokkapolkua manuaalisesti sovellukseemme.
Joten nyt voit jรคttรครค huomioimatta alla mainitun perinteisen tavan asettaa luokkapolut projektille.
Esimerkiksi:
Aiomme muokata edellistรค esimerkkiรค
Vaihe 1) Aseta ominaisuus seleen.jars arvoksi seleeniin liittyvรค jar resurssikansiossa
<property name="selenium.jars" value=".\selenium"/>
Vaihe 2) Lisรครค seleenitiedostot kohde-setClassPathiin
<target name="setClassPath"> <path id="classpath_jars"> <pathelement path="${basedir}/"/> <fileset dir="${external.jars}" includes="*.jar"/> <!-- selenium jar added here --> <fileset dir="${selenium.jars}" includes="*.jar"/> </path>
Vaihe 3) Tรคydellinen Build.xml:
<?xml version="1.0" encoding="UTF-8" standalone="no"?> <!--Project tag used to mention the project name, and basedir attribute will be the root directory of the application--> <project name="YTMonetize" basedir="."> <!--Property tags will be used as variables in build.xml file to use in further steps--> <property name="build.dir" value="${basedir}/build"/> <!-- put testng related jar in the resource folder --> <property name="external.jars" value=".\resource"/> <!-- put selenium related jar in resource folder --> <property name="selenium.jars" value=".\selenium"/> <property name="src.dir" value="${basedir}/src"/> <!--Target tags used as steps that will execute in sequential order. name attribute will be the name of the target and 'depends' attribute used to make one target to depend on another target--> <!-- Load testNG and add to the class path of application --> <target name="loadTestNG" depends="setClassPath"> <taskdef resource="testngtasks" classpath="${test.classpath}"/> </target> <target name="setClassPath"> <path id="classpath_jars"> <pathelement path="${basedir}/"/> <fileset dir="${external.jars}" includes="*.jar"/> <!-- selenium jar added here --> <fileset dir="${selenium.jars}"includes="*.jar"/> </path> <pathconvert pathsep=";" property="test.classpath" refid="classpath_jars"/> </target> <target name="clean"> <!--echo tag will use to print text on console--> <echo message="deleting existing build directory"/> <!--delete tag will clean data from given folder--> <delete dir="${build.dir}"/> </target> <target name="compile" depends="clean,setClassPath,loadTestNG"> <echo message="classpath:${test.classpath}"/> <echo message="compiling.........."/> <!--mkdir tag will create new director--> <mkdir dir="${build.dir}"/> <echo message="classpath:${test.classpath}"/> <echo message="compiling.........."/> <!--javac tag used to compile java source code and move .class files to new folder--> <javac destdir="${build.dir}"srcdir="${src.dir}"> <classpath refid="classpath_jars"/> </javac> </target> <target name="runGuru99TestNGAnt" depends="compile"> <!-- testng tag will be used to execute testng code using corresponding testng.xml file --> <testng classpath="${test.classpath};${build.dir}"> <xmlfileset dir="${basedir}" includes="testng.xml"/> </testng> </target> </project>
Vaihe 4) Muuta nyt aiemmin luotua luokkaa Guru99AntClass.java uudella koodilla.
Tรคssรค tรคssรค esimerkissรค vaiheemme kรคyttรคmรคllรค Selenium ovat:
- Mene https://demo.guru99.com/test/guru99home/
- Lue kaikki kurssilinkit yksitellen
- Tulosta kaikkien kurssien hyperlinkki konsolissa.
Guru99AntClass.java:
package testAnt; import java.util.List; 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.Test; public class Guru99AntClass { @Test public void Guru99AntTestNGMethod(){ WebDriver driver = new FirefoxDriver(); driver.get("https://demo.guru99.com/test/guru99home/"); List<WebElement> listAllCourseLinks = driver.findElements(By.xpath("//div[@class='canvas-middle']//a")); for(WebElement webElement : listAllCourseLinks) { System.out.println(webElement.getAttribute("href")); } } }
Vaihe 5) Onnistuneen suorituksen jรคlkeen tulos nรคyttรครค tรคltรค:
Lataa yllรค oleva esimerkkitiedosto















