TestNG البرنامج التعليمي
⚡ ملخص ذكي
TestNG هو جيل جديد Java إطار اختبار يتوافق مع Selenium لأتمتة منظمة، وإعداد تقارير شاملة، وتنفيذ متوازٍ. يغطي هذا الدليل التعليمي التعليقات التوضيحية الأساسية، وإعداد المشروع في Eclipse، وكتابة حالة الاختبار الأولى، وتقارير HTML، واستخدام المعلمات المتقدمة.

ما هي تفاصيل TestNG?
TestNG هو إطار عمل لاختبار الأتمتة حيث يرمز "NG" إلى "الجيل التالي". TestNG مستوحاة من JUnit ويستخدم Java تُستخدم التعليقات التوضيحية (@) للتحكم في سير الاختبار. وهي تتغلب على JUnitالقيود السابقة، وهو مصمم لجعل اختبار شامل أسهل.
مع TestNG يمكنك إنشاء تقرير مفصل والاطلاع فوراً على عدد الاختبارات الناجحة والفاشلة والمتجاوزة. كما يمكنك إعادة تشغيل الحالات الفاشلة فقط.
فمثلا:
- لنفترض أن لديك خمس حالات اختبار، كل منها في طريقتها الخاصة، مكتوبة بدون TestNGنجحت ثلاث محاولات، وفشلت الرابعة. بعد إصلاح الرابعة، تريد إعادة تشغيلها فقط، لأن المحاولات الثلاث الأولى نجحت بالفعل. يصعب فعل ذلك باستخدام كود دالة main() العادية.
- TestNG ويوفر
testng-failed.xmlملف فيtest-outputالمجلد. تشغيل ملف XML هذا يعيد تنفيذ الحالات الفاشلة فقط.
بالإضافة إلى ذلك، ستتعرف على مزايا TestNGكيفية كتابة أساليب الاختبار باستخدام التعليقات التوضيحية @Test، وكيفية تحويل فئاتك إلى مجموعة اختبار يتم تشغيلها من Eclipse أو سطر الأوامر.
لماذا الاستخدام TestNG مع Selenium?
افتراضيا، Selenium لا تُنتج الاختبارات نتائج منسقة بشكل جيد. مع TestNG بمجرد توصيله، يقوم برنامج تشغيل الاختبار بإصدار تقرير منظم يمكنك مشاركته مع الفريق.
معظم Selenium يفضل المستخدمون TestNG على مدى JUnit وذلك بفضل مجموعة ميزاته الأوسع. الميزات الرئيسية لـ Selenium هي:
- التقارير التي تتضمن عدد حالات الاختبار التي تم تشغيلها، والتي نجحت، والتي فشلت، والتي تم تخطيها.
- سهلping من حالات الاختبار عبر
testng.xmlملف، مع تحديد أولويات التنفيذ. - كرر الاختبار عدة مرات بدون استخدام الحلقات
invocationCount. - قم بإجراء اختبارات متعددة على متصفحات متعددة — عبراختبار المتصفح دعم.
- تكامل سلس مع Maven، Jenkinsوغيرها من أدوات التكامل المستمر.
- Readable التعليقات التوضيحية - على سبيل المثال، @BeforeMethod، @AfterMethod، @BeforeTest، @AfterTest.
- Selenium لا يحتوي WebDriver على تقارير أصلية؛ TestNG يسد هذا النقص بتقرير HTML نظيف مثل التقرير أدناه.
- TestNG يُبسط ذلك كود الاختبار. لم تعد بحاجة إلى دالة رئيسية ثابتة؛ فالتعليقات التوضيحية هي التي تحدد ما يتم تشغيله ومتى.
- يتم التعامل مع الاستثناءات غير المعالجة بسلاسة بواسطة TestNGيتم الإبلاغ عنها كخطوات فاشلة دون إنهاء التشغيل بالكامل.
مزايا TestNG على مدى JUnit
TestNG يوفر ثلاث مزايا رئيسية مقارنة بـ JUnit:
- التعليقات التوضيحية أسهل في الفهم والاستخدام.
- يمكن تجميع حالات الاختبار وتحديد أولوياتها بجهد أقل.
- يدعم النظام تنفيذ الاختبارات المتوازية بشكل افتراضي.
ما هو التعليق التوضيحي في TestNG?
الشروحات في TestNG هي أسطر من التعليمات البرمجية توضع فوق طريقة ما للتحكم في كيفية تنفيذها. تبدأ هذه الرموز دائمًا بالرمز @. يُعرض أدناه مثال بسيط.
تُغطى التعليقات التوضيحية بالتفصيل في القسم "التعليقات المستخدمة في TestNG" لاحقًا في هذا الدرس التعليمي، لذا فإن المثال أعلاه هو فقط لتحديد التوقعات. TestNG تُعدّ التعليقات التوضيحية أسهل في البرمجة والقراءة من... JUnit المكافئات، وهي ضرورية عند إجراء الاختبارات على Selenium شبكة حيث يكون التنفيذ المتوازي مهماً.
كيفية كتابة حالات الاختبار في TestNG
كتابة TestNG تتضمن حالة الاختبار ثلاث خطوات:
- اكتب منطق عملك وحدد مكانه TestNG التعليقات التوضيحية أعلى كل طريقة.
- أضف بيانات وصفية مثل اسم الفئة واسم المجموعة واسم الحزمة.
- تشغيل TestNG الفئة من بيئة التطوير المتكاملة (IDE) أو سطر الأوامر.
إنشاء حالة اختبار باستخدام TestNG الشروح
سنقوم الآن بإنشاء حالة الاختبار الأولى باستخدام TestNG التعليقات التوضيحية في Seleniumقبل كتابة الاختبار، قم بإعداد جديد TestNG مشروع في Eclipse و نسميها الاسم الأولTestNGمشروع.
إنشاء جديد TestNG مشروع
الخطوة 1) انقر ملف > جديد > Java مشروع.
الخطوة 2) أدخل الاسم الأولTestNGمشروع كاسم للمشروع، ثم انقر لتالي.
الخطوة 3) قم باستيراد ملف TestNG المكتبات. انقر فوق المكتبات علامة التبويب ثم إضافة مكتبة….
الخطوة 4) في خانة رمز الخصم، أدخل TABBYDAY. أضف مكتبة الحوار، اختر TestNG ثم انقر لتالي.
الخطوة 5) انقر نهاية.
TestNG ينبغي أن يظهر الآن في قائمة المكتبات.
الخطوة 6) أضف ملفات JAR التي تحتوي على Selenium واجهة برمجة التطبيقات (API). هذه تأتي من Java تم تنزيل برنامج تشغيل العميل من selenium.dev/downloads.
انتقل إلى المجلد الذي يحتوي على Selenium يتم تخزين ملفات JAR.
بعد إضافة ملفات JAR الخارجية، يجب أن تبدو الشاشة كما يلي.
الخطوة 7) انقر نهاية. الجديد الاسم الأولTestNGمشروع يظهر في مستكشف الحزم.
كيفية إنشاء ملف TestNG ملف الاختبار
بعد تجهيز المشروع، أنشئ مشروعًا جديدًا TestNG ملف.
الخطوة 1) انقر بزر الماوس الأيمن فوق src مجلد واختيار جديد > أخرى….
الخطوة 2) توسيع TestNG المجلد، حدد TestNG فئة، ثم انقر لتالي.
الخطوة 3) أدخل القيم الموضحة أدناه وانقر نهاية. Java الملف اسمه الاسم الأولTestNGقم بتقديم.
الخطوة 4) Eclipse يولد ال TestNG النموذج الموضح أدناه.
كتابة أول تجربة برمجية TestNG حالة الاختبار
أنشئ الأول حالة اختبار وهذا يؤكد عنوان Mercury الصفحة الرئيسية للجولات.
package firsttestngpackage;
import org.openqa.selenium.WebDriver;
import org.openqa.selenium.firefox.FirefoxDriver;
import org.testng.Assert;
import org.testng.annotations.Test;
public class FirstTestNGFile {
public String baseUrl = "https://demo.guru99.com/test/newtours/";
public WebDriver driver;
@Test
public void verifyHomepageTitle() {
System.out.println("launching firefox browser");
// Selenium 4 ships Selenium Manager, so the driver path is no longer required.
driver = new FirefoxDriver();
driver.get(baseUrl);
String expectedTitle = "Welcome: Mercury Tours";
String actualTitle = driver.getTitle();
Assert.assertEquals(actualTitle, expectedTitle);
driver.quit();
}
}
الأشياء التي يجب ملاحظتها:
- TestNG لا يحتاج إلى
main()الأسلوب. - لا يشترط أن تكون الطرق ثابتة.
- استخدم @اختبار علامة التعليق
verifyHomepageTitle()كحالة اختبار. - توجد التعليقات التوضيحية في
org.testng.annotations.*الحزمة. - استخدم أكد فئة من
org.testng.Assertعمليات التحقق من محركات الأقراص.
يمكنك استخدام عدة تعليقات توضيحية من نوع @Test في تعليق واحد TestNG سنتناول ذلك في الملف. "التعليقات المستخدمة في TestNG" والقسم الخاص به.
إجراء الاختبار
انقر بزر الماوس الأيمن على الملف وقم بتشغيله كـ TestNG الاختبار. Eclipse ينتج البرنامج مخرجين: نتيجة نصية في نافذة وحدة التحكم ونتيجة رسومية في TestNG نافذة النتائج.
التحقق من التقارير التي تم إنشاؤها بواسطة TestNG
توفر نافذة وحدة التحكم ملخصًا نصيًا بينما TestNG تعرض نافذة النتائج عرضًا بيانيًا.
توليد تقارير HTML
TestNG كما يمكنه إنشاء تقارير HTML كاملة.
الخطوة 1) بعد تشغيل الاسم الأولTestNGقم بتقديمانقر بزر الماوس الأيمن على المشروع واختر تحديث.
الخطوة 2) A مخرجات الاختبار يظهر المجلد. قم بتوسيعه وابحث عن index.html — تقرير HTML لأحدث عملية تشغيل.
الخطوة 3) Double-انقر index.html لفتحه من الداخل Eclipseمتصفحك. اضغط F5 للتحديث بعد عمليات التشغيل اللاحقة.
التعليقات المستخدمة في TestNG
لقد اطلعت بالفعل على التعليق التوضيحي @Test. أما بقية هذا القسم فتغطي أهم التعليقات التوضيحية المتقدمة.
حالات اختبار متعددة
A واحد TestNG يمكن للملف أن يحتوي على عدة تعليقات توضيحية من نوع @Test. بشكل افتراضي، يتم تنفيذ الطرق التي تحمل تعليقًا توضيحيًا من نوع @Test بالترتيب الأبجدي. في الكود أدناه، الطرق c_test, a_testو b_test يتم تشغيلها أبجديًا بغض النظر عن ترتيب المصدر.
قم بتشغيل الكود وافتحه index.html. انقر عرض زمني.
المعاملات
لتجاوز الترتيب الافتراضي، استخدم priority المعلمة. المعلمات هي كلمات مفتاحية تعمل على تعديل سلوك التعليق التوضيحي.
- قم بتعيين قيمة باستخدام
=. - قم بتغليف المعلمات بين قوسين موضوعين مباشرة بعد التعليق التوضيحي، كما هو موضح أدناه.
TestNG ينفذ التعليقات التوضيحية @Test من أدنى قيمة أولوية إلى أعلى قيمة. لا يشترط أن تكون أرقام الأولوية متسلسلة.
يؤكد تقرير HTML أن الطرق تم تنفيذها بترتيب أولوية تصاعدي.
معلمات متعددة
بالإضافة إلى priorityيقبل @Test alwaysRun المعامل (صواب أو خطأ). لاستخدام معلمتين أو أكثر في تعليق توضيحي واحد، افصل بينهما بفاصلة:
@Test(priority = 0, alwaysRun = true)
@BeforeTest وAfterTest
| @قبل الاختبار | الطرق التي تندرج تحت هذا التعليق التوضيحي تعمل قبل أول حالة اختبار في TestNG ملف. |
| تضمين التغريدة | الطرق التي تندرج تحت هذا التعليق التوضيحي تعمل بعد كل حالات الاختبار في TestNG إنهاء الملف. |
النظر في الكود أدناه.
package firsttestngpackage;
import org.openqa.selenium.WebDriver;
import org.openqa.selenium.firefox.FirefoxDriver;
import org.testng.Assert;
import org.testng.annotations.*;
public class FirstTestNGFile {
public String baseUrl = "https://demo.guru99.com/test/newtours/";
public WebDriver driver;
@BeforeTest
public void launchBrowser() {
System.out.println("launching firefox browser");
driver = new FirefoxDriver();
driver.get(baseUrl);
}
@Test
public void verifyHomepageTitle() {
String expectedTitle = "Welcome: Mercury Tours";
String actualTitle = driver.getTitle();
Assert.assertEquals(actualTitle, expectedTitle);
}
@AfterTest
public void terminateBrowser() {
driver.quit();
}
}
انطلاقاً من الجدول والرمز، يمكننا التنبؤ بأن التسلسل سيكون كالتالي:
- 1-
launchBrowser() - 2-
verifyHomepageTitle() - 3-
terminateBrowser()
لا يؤثر وضع كتل التعليقات التوضيحية في ملف المصدر على ترتيب تنفيذها. حاول إعادة ترتيب الطرق كما هو موضح أدناه.
package firsttestngpackage;
import org.openqa.selenium.WebDriver;
import org.openqa.selenium.firefox.FirefoxDriver;
import org.testng.Assert;
import org.testng.annotations.*;
public class FirstTestNGFile {
public String baseUrl = "https://demo.guru99.com/test/newtours/";
public WebDriver driver;
@AfterTest // Jumbled
public void terminateBrowser() {
driver.quit();
}
@BeforeTest // Jumbled
public void launchBrowser() {
System.out.println("launching firefox browser");
driver = new FirefoxDriver();
driver.get(baseUrl);
}
@Test // Jumbled
public void verifyHomepageTitle() {
String expectedTitle = "Welcome: Mercury Tours";
String actualTitle = driver.getTitle();
Assert.assertEquals(actualTitle, expectedTitle);
}
}
قم بتشغيل الكود وتحقق من النتيجة.
@BeforeMethod وAfterMethod
| تضمين التغريدة | الطرق التي تندرج تحت هذا التعليق التوضيحي تعمل قبل كل طريقة اختبار. |
| تضمين التغريدة | الطرق التي تندرج تحت هذا التعليق التوضيحي تعمل اتبع كل طريقة اختبار. |
In Mercury لنفترض أننا نريد التحقق من عناوين صفحتين مستهدفتين يتم الوصول إليهما من الصفحة الرئيسية.
تسلسل الاختبار كالتالي:
- افتح الصفحة الرئيسية وتحقق من عنوانها.
- انقر فوق تسجيل وتحقق من عنوان الصفحة المستهدفة.
- ارجع إلى الصفحة الرئيسية وتحقق من العنوان.
- انقر فوق "الدعم" وتحقق من عنوان الصفحة المستهدفة.
- ارجع إلى الصفحة الرئيسية وتحقق من العنوان مرة أخرى.
يوضح الكود أدناه كيفية تعامل @BeforeMethod و @AfterMethod مع الخطوات المتكررة.
package firsttestngpackage;
import org.openqa.selenium.By;
import org.openqa.selenium.WebDriver;
import org.openqa.selenium.firefox.FirefoxDriver;
import org.testng.Assert;
import org.testng.annotations.*;
public class FirstTestNGFile {
public String baseUrl = "https://demo.guru99.com/test/newtours/";
public WebDriver driver;
public String expected = null;
public String actual = null;
@BeforeTest
public void launchBrowser() {
System.out.println("launching firefox browser");
driver = new FirefoxDriver();
driver.get(baseUrl);
}
@BeforeMethod
public void verifyHomepageTitle() {
String expectedTitle = "Welcome: Mercury Tours";
String actualTitle = driver.getTitle();
Assert.assertEquals(actualTitle, expectedTitle);
}
@Test(priority = 0)
public void register() {
driver.findElement(By.linkText("REGISTER")).click();
expected = "Register: Mercury Tours";
actual = driver.getTitle();
Assert.assertEquals(actual, expected);
}
@Test(priority = 1)
public void support() {
driver.findElement(By.linkText("SUPPORT")).click();
expected = "Under Construction: Mercury Tours";
actual = driver.getTitle();
Assert.assertEquals(actual, expected);
}
@AfterMethod
public void goBackToHomepage() {
driver.findElement(By.linkText("Home")).click();
}
@AfterTest
public void terminateBrowser() {
driver.quit();
}
}
بعد إجراء الاختبار، TestNG يُبلغ عن التسلسل أدناه.
باختصار: ضع خطوات الإعداد في الداخل تضمين التغريدة وإعادة ضبط نظام الملاحة أو التنظيف في الداخل تضمين التغريدة لذا تبدأ كل حالة اختبار وتنتهي في حالة معروفة.
ملخص TestNG الشروح
- @BeforeSuite: يتم تشغيله قبل جميع الاختبارات في المجموعة.
- @AfterSuite: يتم تشغيله بعد جميع الاختبارات في المجموعة.
- @قبل الاختبار: يتم تشغيلها قبل أي طريقة اختبار تابعة للفئات الموجودة داخل علامة.
- @AfterTest: يتم تشغيلها بعد جميع طرق الاختبار التابعة للفئات الموجودة داخل علامة.
- @BeforeGroups: يتم تشغيله قبل وقت قصير من أول طريقة اختبار تنتمي إلى أي مجموعة مدرجة.
- @AfterGroups: يتم تشغيله بعد فترة وجيزة من آخر طريقة اختبار تنتمي إلى أي مجموعة مدرجة.
- @قبل_الدرس: يتم تشغيلها قبل أول طريقة اختبار في الفئة الحالية.
- @AfterClass: يتم تشغيله بعد جميع طرق الاختبار في الفئة الحالية.
- @BeforeMethod: يتم تشغيلها قبل كل طريقة اختبار.
- @AfterMethod: يتم تشغيلها بعد كل طريقة اختبار.
- @امتحان: يُشير إلى الطريقة كحالة اختبار.

































