Apache ANT με Selenium: Ολοκληρωμένο σεμινάριο
Τι είναι το Apache Ant;
Κατά τη δημιουργία ενός πλήρους προϊόντος λογισμικού, κάποιος πρέπει να φροντίσει το διαφορετικό API τρίτων κατασκευαστών, τη διαδρομή της τάξης τους, τον καθαρισμό προηγούμενων εκτελέσιμων δυαδικών αρχείων, τη μεταγλώττιση του πηγαίου κώδικα, την εκτέλεση του πηγαίου κώδικα, τη δημιουργία αναφορών και τη βάση κώδικα ανάπτυξης κ.λπ. Εάν αυτές οι εργασίες είναι γίνεται ένα προς ένα χειροκίνητα, θα χρειαστεί τεράστιος χρόνος και η διαδικασία θα είναι επιρρεπής σε σφάλματα.
Εδώ έρχεται η σημασία ενός εργαλείου κατασκευής όπως το Ant. Αποθηκεύει, εκτελεί και αυτοματοποιεί όλες τις διαδικασίες με διαδοχική σειρά που αναφέρεται στο αρχείο διαμόρφωσης του Ant (συνήθως build.xml).
Οφέλη από την κατασκευή του μυρμηγκιού
- Το Ant δημιουργεί τον κύκλο ζωής της εφαρμογής, δηλαδή καθαρισμό, μεταγλώττιση, ρύθμιση εξάρτησης, εκτέλεση, αναφορά κ.λπ.
- Η εξάρτηση API τρίτου μέρους μπορεί να οριστεί από το Ant, δηλαδή η διαδρομή κλάσης άλλων αρχείων Jar ορίζεται από το αρχείο κατασκευής Ant.
- Δημιουργείται μια πλήρης εφαρμογή για παράδοση και ανάπτυξη από άκρο σε άκρο.
- Είναι ένα απλό εργαλείο κατασκευής όπου όλες οι διαμορφώσεις μπορούν να γίνουν χρησιμοποιώντας αρχείο XML και το οποίο μπορεί να εκτελεστεί από τη γραμμή εντολών.
- Καθιστά τον κώδικά σας καθαρό καθώς η διαμόρφωση είναι ξεχωριστή από την πραγματική λογική της εφαρμογής.
Πώς να εγκαταστήσετε το Ant
Βήματα για την εγκατάσταση του Ant Windows είναι όπως ακολουθεί
Βήμα 1) Πηγαίνετε στο https://ant.apache.org/bindownload.cgi Ή Λήψη αρχείου .zip από apache-ant-1.9.4-bin.zip
Βήμα 2) Αποσυμπιέστε το φάκελο και μεταβείτε και αντιγράψτε τη διαδρομή στη ρίζα του αποσυμπιεσμένου φακέλου
Βήμα 3) Μεταβείτε στην Έναρξη -> Υπολογιστής -> κάντε δεξί κλικ εδώ και επιλέξτε "Ιδιότητες" και στη συνέχεια κάντε κλικ στις Ρυθμίσεις συστήματος για προχωρημένους
Βήμα 4) Ανοίγει ένα νέο παράθυρο. Κάντε κλικ στο κουμπί «Μεταβλητή περιβάλλοντος…».
Βήμα 5) Κάντε κλικ στο κουμπί «Νέο…» και ορίστε το όνομα της μεταβλητής ως «ANT_HOME» και την τιμή της μεταβλητής ως τη ριζική διαδρομή προς τον αποσυμπιεσμένο φάκελο και κάντε κλικ στο OK.
Βήμα 6) τώρα επιλέξτε τη μεταβλητή «Διαδρομή» από τη λίστα και κάντε κλικ στην «Επεξεργασία» και προσάρτηση. %ANT_HOME%\bin.
Κάντε επανεκκίνηση του συστήματος μία φορά και είστε έτοιμοι να χρησιμοποιήσετε το εργαλείο κατασκευής Ant τώρα.
Βήμα 7) Για να ελέγξετε την έκδοση του Ant χρησιμοποιώντας τη γραμμή εντολών:
Ant – έκδοση
Κατανόηση του Build.xml
Το Build.xml είναι το πιο σημαντικό στοιχείο του εργαλείου κατασκευής Ant. Για ένα Java έργο, όλες οι εργασίες που σχετίζονται με τον καθαρισμό, τη ρύθμιση, τη μεταγλώττιση και την ανάπτυξη αναφέρονται σε αυτό το αρχείο σε μορφή XML. Όταν εκτελούμε αυτό το αρχείο XML χρησιμοποιώντας γραμμή εντολών ή οποιοδήποτε πρόσθετο IDE, όλες οι οδηγίες που είναι γραμμένες σε αυτό το αρχείο θα εκτελούνται με διαδοχικό τρόπο.
Ας κατανοήσουμε τον κώδικα σε ένα δείγμα build.XML
-
Η ετικέτα έργου χρησιμοποιείται για να αναφέρει ένα όνομα έργου και ένα χαρακτηριστικό basedir. Το basedir είναι ο ριζικός κατάλογος μιας εφαρμογής
<project name="YTMonetize" basedir=".">
- Οι ετικέτες ιδιοτήτων χρησιμοποιούνται ως μεταβλητές στο αρχείο build.XML για χρήση σε περαιτέρω βήματα
<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 ετικέτες που χρησιμοποιούνται ως βήματα που θα εκτελεστούν με διαδοχική σειρά. Το χαρακτηριστικό Name είναι το όνομα του στόχου. Μπορείτε να έχετε πολλούς στόχους σε ένα build.xml
<target name="setClassPath">
- Η ετικέτα διαδρομής χρησιμοποιείται για τη ομαδοποίηση όλων των αρχείων που βρίσκονται στην κοινή θέση
<path id="classpath_jars">
- Η ετικέτα pathelement θα ορίσει τη διαδρομή προς τη ρίζα της κοινής θέσης όπου αποθηκεύονται όλα τα αρχεία
<pathelement path="${basedir}/"/>
- ετικέτα pathconvert που χρησιμοποιείται για τη μετατροπή των διαδρομών όλων των κοινών αρχείων μέσα στην ετικέτα διαδρομής στη μορφή classpath του συστήματος
<pathconvert pathsep=";" property="test.classpath" refid="classpath_jars"/>
- Η ετικέτα του συνόλου αρχείων χρησιμοποιείται για τον ορισμό της διαδρομής τάξης για διαφορετικό βάζο τρίτων στο έργο μας
<fileset dir="${ytoperation.dir}" includes="*.jar"/>
- Η ετικέτα Echo χρησιμοποιείται για την εκτύπωση κειμένου στην κονσόλα
<echo message="deleting existing build directory"/>
- Η διαγραφή ετικέτας θα καθαρίσει τα δεδομένα από τον συγκεκριμένο φάκελο
<delete dir="${build.dir}"/>
- Η ετικέτα mkdir θα δημιουργήσει έναν νέο κατάλογο
<mkdir dir="${build.dir}"/>
- ετικέτα javac που χρησιμοποιείται για τη μεταγλώττιση του πηγαίου κώδικα java και τη μετακίνηση αρχείων .class σε νέο φάκελο
<javac destdir="${build.dir}" srcdir="${src.dir}"> <classpath refid="classpath_jars"/> </javac>
- Η ετικέτα jar θα δημιουργήσει αρχείο jar από αρχεία .class
<jar destfile="${ytoperation.dir}/YTOperation.jar" basedir="${build.dir}">
- Η ετικέτα manifest θα ορίσει την κύρια κλάση σας για εκτέλεση
<manifest> <attribute name="Main-Class" value="test.Main"/> </manifest>
- Το χαρακτηριστικό 'εξαρτάται' χρησιμοποιείται για να κάνει έναν στόχο να εξαρτάται από έναν άλλο στόχο
<target name="run" depends="compile">
- Η ετικέτα java θα εκτελέσει την κύρια λειτουργία από το βάζο που δημιουργήθηκε στην ενότητα στόχου μεταγλώττισης
<java jar="${ytoperation.dir}/YTOperation.jar" fork="true"/>
Εκτελέστε το Ant χρησιμοποιώντας Eclipse συνδέω
Για να εκτελέσετε το Ant από το eclipse, μεταβείτε στο αρχείο build.xml -> δεξί κλικ στο αρχείο -> Εκτέλεση ως… -> κάντε κλικ στην επιλογή Δημιουργία αρχείου
Παράδειγμα
Θα πάρουμε ένα μικρό δείγμα προγράμματος που θα εξηγεί τη λειτουργικότητα του Ant πολύ καθαρά. Η δομή του έργου μας θα μοιάζει με -
Εδώ σε αυτό το παράδειγμα έχουμε 4 στόχους
- Ορισμός διαδρομής τάξης για εξωτερικά βάζα,
- Καθαρίστε τον κώδικα που συμμορφώθηκε προηγουμένως
- Μεταγλώττιση υπάρχοντος κώδικα java
- Εκτελέστε τον κωδικό
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>
Πώς να εκτελέσετε TestNG κώδικας χρησιμοποιώντας Αντ
Εδώ θα δημιουργήσουμε μια τάξη με Testng μεθόδους και ορίστε τη διαδρομή κλάσης για Δοκιμές στο build.xml.
Τώρα για να εκτελέσουμε τη μέθοδο testng θα δημιουργήσουμε ένα άλλο αρχείο testng.xml και θα καλέσουμε αυτό το αρχείο από το αρχείο build.xml.
Βήμα 1) Δημιουργούμε ένα “Guru99AntClass.class” σε συσκευασία δοκιμαζόμενος
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(); } }
Βήμα 2) Δημιουργήστε έναν στόχο για να φορτώσετε αυτήν την κλάση στο Build.xml
<!-- 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>
Βήμα 3) Δημιουργία 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>
Βήμα 4) Δημιουργία Target στο Build.xml για να το εκτελέσετε TestNG κωδικός
<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>
Βήμα 5) Το πλήρες 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>
Βήμα 6) Παραγωγή
Μυρμήγκι με Selenium Πρόγραμμα οδήγησης Web
Μέχρι στιγμής, μάθαμε ότι χρησιμοποιώντας το ANT μπορούμε να τοποθετήσουμε όλα τα βάζα τρίτων σε μια συγκεκριμένη θέση στο σύστημα και να ορίσουμε την πορεία τους για το έργο μας. Χρησιμοποιώντας αυτήν τη μέθοδο, ρυθμίζουμε όλες τις εξαρτήσεις του έργου μας σε ένα μόνο μέρος και το κάνουμε πιο αξιόπιστο για τη μεταγλώττιση, την εκτέλεση και την ανάπτυξη.
Ομοίως, για τα έργα δοκιμών μας που χρησιμοποιούν σελήνιο, μπορούμε εύκολα να αναφέρουμε την εξάρτηση από σελήνιο στο build.xml και δεν χρειάζεται να προσθέσουμε μια διαδρομή κλάσης του με μη αυτόματο τρόπο στην εφαρμογή μας.
Έτσι, τώρα μπορείτε να αγνοήσετε τον παρακάτω παραδοσιακό τρόπο ορισμού μαθημάτων για έργο.
Παράδειγμα:
Θα τροποποιήσουμε το προηγούμενο παράδειγμα
Βήμα 1) Ορίστε την ιδιότητα selenium.jars σε βάζο που σχετίζεται με το σελήνιο στον φάκελο πόρων
<property name="selenium.jars" value=".\selenium"/>
Βήμα 2) Στο στόχο setClassPath, προσθέστε τα αρχεία σεληνίου
<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>
Βήμα 3) Ολοκληρώστε το 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>
Βήμα 4) Τώρα αλλάξτε την κλάση Guru99AntClass.java που δημιουργήθηκε προηγουμένως με νέο κώδικα.
Εδώ σε αυτό το παράδειγμα τα βήματά μας χρησιμοποιώντας Selenium είναι:
- Πηγαίνετε στο
http://demo.guru99.com/test/guru99home/
- Διαβάστε όλους τους συνδέσμους των μαθημάτων έναν προς έναν
- Εκτύπωση υπερ-σύνδεσης όλων των μαθημάτων στην κονσόλα.
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("http://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")); } } }
Βήμα 5) Μετά την επιτυχή εκτέλεση, η έξοδος θα μοιάζει με αυτό:
Κατεβάστε το παραπάνω Παράδειγμα αρχείου
Σύνοψη
Το μυρμήγκι είναι ένα εργαλείο κατασκευής για Java.
Μυρμήγκι που χρησιμοποιείται για τη μεταγλώττιση κώδικα, την ανάπτυξη, τη διαδικασία εκτέλεσης.
Το Ant μπορεί να γίνει λήψη από Apache ιστοσελίδα.
Το αρχείο Build.xml χρησιμοποιείται για τη διαμόρφωση στόχων εκτέλεσης χρησιμοποιώντας το Ant.
Το Ant μπορεί να εκτελεστεί από τη γραμμή εντολών ή από κατάλληλο πρόσθετο IDE όπως το eclipse.