أباتشي النمل التعليمي
⚡ ملخص ذكي
أباتشي أنت هو برنامج مفتوح المصدر، Javaأداة بناء قائمة على [اسم الأداة] تعمل على أتمتة عمليات التجميع والاختبار والتغليف والنشر من خلال ملف build.xml واحد. متكاملة مع Selenium و TestNGفهو يجعل تنفيذ الاختبارات قابلاً للتكرار، ومنظماً، وسهل التشغيل في أي مكان.

ما هو أباتشي النمل؟
أثناء إنشاء منتج برمجي كامل، يحتاج المرء إلى الاهتمام بواجهة برمجة تطبيقات الطرف الثالث المختلفة، ومسار الفئة، وتنظيف الملفات الثنائية السابقة القابلة للتنفيذ، وتجميع كود المصدر الخاص بنا، وتنفيذ كود المصدر، وإنشاء التقارير وقاعدة كود النشر وما إلى ذلك. إذا كانت هذه المهام إذا تم إجراء ذلك واحدًا تلو الآخر يدويًا، فسوف يستغرق الأمر وقتًا طويلاً، وستكون العملية عرضة للأخطاء.
هنا تأتي أهمية أداة البناء مثل Ant. يقوم بتخزين وتنفيذ وأتمتة جميع العمليات بترتيب تسلسلي مذكور في ملف تكوين Ant (عادةً build.xml).
فائدة بناء النملة
- يقوم Ant بإنشاء دورة حياة التطبيق، أي التنظيف والتجميع وتعيين التبعية والتنفيذ والإبلاغ وما إلى ذلك.
- يمكن تعيين تبعية API لجهة خارجية بواسطة Ant، أي يتم تعيين مسار فئة ملف Jar الآخر بواسطة ملف إنشاء Ant.
- يتم إنشاء تطبيق كامل للتسليم والنشر من النهاية إلى النهاية.
- إنها أداة بناء بسيطة حيث يمكن إجراء جميع التكوينات باستخدام ملف XML والتي يمكن تنفيذها من سطر الأوامر.
- فهو يجعل التعليمات البرمجية الخاصة بك نظيفة لأن التكوين منفصل عن منطق التطبيق الفعلي.
كيفية تثبيت النمل
خطوات تثبيت Ant في Windows على النحو التالي
الخطوة 1) انتقل إلى البرنامج المساعد في التأليف https://ant.apache.org/bindownload.cgi أو قم بتنزيل ملف .zip من أباتشي-النمل-1.9.4-bin.zip
الخطوة 2) قم بفك ضغط المجلد وانتقل إلى المسار وانسخه إلى جذر المجلد الذي تم فك ضغطه
الخطوة 3) انتقل إلى ابدأ -> الكمبيوتر -> انقر بزر الماوس الأيمن هنا وحدد "خصائص" ثم انقر فوق "إعدادات النظام المتقدمة".
الخطوة 4) تفتح نافذة جديدة. انقر فوق الزر "متغير البيئة...".
الخطوة 5) انقر فوق الزر "جديد..." وقم بتعيين اسم المتغير كـ "ANT_HOME" وقيمة المتغير كمسار جذر للمجلد الذي تم فك ضغطه وانقر فوق "موافق".
الخطوة 6) الآن حدد متغير "المسار" من القائمة وانقر فوق "تحرير" وإلحاق؛ %ANT_HOME%\bin.
أعد تشغيل النظام مرة واحدة وستكون جاهزًا لاستخدام أداة Ant build الآن.
الخطوة 7) للتحقق من إصدار Ant الخاص بك باستخدام سطر الأوامر:
نسخة النمل
فهم Build.xml
يعد Build.xml أهم مكون في أداة بناء Ant. ل Java المشروع، جميع المهام المتعلقة بالتنظيف والإعداد والتجميع والنشر مذكورة في هذا الملف بتنسيق XML. عندما نقوم بتنفيذ ملف XML هذا باستخدام سطر الأوامر أو أي مكون إضافي لـ IDE، سيتم تنفيذ جميع التعليمات المكتوبة في هذا الملف بطريقة تسلسلية.
دعونا نفهم التعليمات البرمجية داخل نموذج build.XML
-
يتم استخدام علامة المشروع لذكر اسم المشروع والسمة المستندة إليه. الأساس هو الدليل الجذر للتطبيق
<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 العلامات المستخدمة كخطوات سيتم تنفيذها بالترتيب المتسلسل. سمة الاسم هي اسم الهدف. يمكنك الحصول على أهداف متعددة في ملف 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 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> <attribute name="Main-Class" value="test.Main"/> </manifest>
- السمة "يعتمد" المستخدمة لجعل هدف واحد يعتمد على هدف آخر
<target name="run" depends="compile">
- ستقوم علامة Java بتنفيذ الوظيفة الرئيسية من الجرة التي تم إنشاؤها في القسم المستهدف للترجمة
<java jar="${ytoperation.dir}/YTOperation.jar" fork="true"/>
تشغيل النمل باستخدام Eclipse المساعد
لتشغيل Ant من Eclipse، انتقل إلى ملف build.xml -> انقر بزر الماوس الأيمن على الملف -> تشغيل كـ… -> انقر فوق إنشاء الملف
مثال
سنأخذ نموذجًا صغيرًا من البرنامج يشرح وظائف Ant بشكل واضح جدًا. سيبدو هيكل مشروعنا كما يلي -
هنا في هذا المثال لدينا 4 أهداف
- تعيين مسار الفصل للجرار الخارجية،
- تنظيف التعليمات البرمجية التي تم الالتزام بها مسبقًا
- تجميع كود جافا الموجود
- قم بتشغيل الكود
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 الكود باستخدام Ant
هنا سوف نقوم بإنشاء فئة مع تستنج الأساليب وتعيين مسار الفصل لـ الاختبار في build.xml.
الآن لتنفيذ طريقة testng سنقوم بإنشاء ملف testng.xml آخر ونستدعي هذا الملف من ملف build.xml.
الخطوة 1) نقوم بإنشاء ملف "Guru99AntClass.class" في الحزمة 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(); } }
الخطوة 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
اختبار.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) الناتج
مع تولي أنت إدارة عملية البناء و TestNG بعد توصيلها بالأسلاك، تتمثل الخطوة التالية في توصيل جهاز Ant مباشرة بـ Selenium برنامج تشغيل الويب.
النملة مع Selenium برنامج تشغيل الويب
لقد تعلمنا حتى الآن أنه باستخدام Ant، يمكننا وضع جميع ملفات JAR الخارجية في موقع محدد في النظام وتحديد مسارها لمشروعنا. بهذه الطريقة، نحدد جميع تبعيات مشروعنا في مكان واحد، مما يجعله أكثر موثوقية في عمليات التجميع والتنفيذ والنشر.
على نحو مماثل، بالنسبة لمشاريع الاختبار الخاصة بنا باستخدام السيلينيوم، يمكننا بسهولة ذكر اعتماد السيلينيوم في build.xml ولا نحتاج إلى إضافة مسار فئة له يدويًا في تطبيقنا.
يمكنك الآن تجاهل الطريقة التقليدية المذكورة أدناه لتعيين مسارات الفئات للمشروع.
على سبيل المثال:
سنقوم بتعديل المثال السابق
الخطوة 1) قم بتعيين الخاصية selenium.jars إلى ملف jar المرتبط بـ selenium في مجلد الموارد
<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 هي:
- انتقل إلى البرنامج المساعد في التأليف https://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("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")); } } }
الخطوة 5) بعد التنفيذ الناجح سيبدو الإخراج كما يلي:















