TestNG البرنامج التعليمي

⚡ ملخص ذكي

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

  • 🧱 الإطار الأساسي: TestNG يمتد JUnit أفكار مع شروح، مجموعاتpingوتنفيذ الاختبارات بالتوازي لـ Selenium الأجنحة.
  • 🏷️ التعليقات التوضيحية تُحسّن سير العمل: @Test، @BeforeMethod، @AfterMethod، @BeforeTest، و@AfterTest: إعداد التسلسل، والاختبار، والتفكيك.
  • 🗂️ Eclipse الإعداد: بناء TestNG أضف إلى المشروع TestNG مكتبة و Selenium ثم قم بإنشاء ملفات JAR، ثم أنشئ فئات الاختبار من المعالج.
  • 📊 التقرير: TestNG يقوم بإنتاج تقارير نصية ورسومية وتقارير HTML في مجلد مخرجات الاختبار، بما في ذلك العروض الزمنية.
  • ⚙️ المعلمات: استخدم priority و alwaysRun و dataProvider للتحكم في ترتيب التنفيذ وتغذية البيانات في الاختبارات.
  • 🤖 تعزيز الذكاء الاصطناعي: مساعدو البرمجة المدعومون بالذكاء الاصطناعي يسرعون TestNG إنشاء الفئات، وتحديثات المحددات، وإنشاء هيكل موفر البيانات.

TestNG البرنامج التعليمي

ما هي تفاصيل 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 نموذج تقرير HTML لـ Selenium اختبارات

  • TestNG يُبسط ذلك كود الاختبار. لم تعد بحاجة إلى دالة رئيسية ثابتة؛ فالتعليقات التوضيحية هي التي تحدد ما يتم تشغيله ومتى.

معتاد Java اختبار بنية فئة مع طريقة رئيسية

TestNG اختبار بنية الفئة باستخدام التعليقات التوضيحية

  • يتم التعامل مع الاستثناءات غير المعالجة بسلاسة بواسطة TestNGيتم الإبلاغ عنها كخطوات فاشلة دون إنهاء التشغيل بالكامل.

مزايا TestNG على مدى JUnit

TestNG يوفر ثلاث مزايا رئيسية مقارنة بـ JUnit:

  • التعليقات التوضيحية أسهل في الفهم والاستخدام.
  • يمكن تجميع حالات الاختبار وتحديد أولوياتها بجهد أقل.
  • يدعم النظام تنفيذ الاختبارات المتوازية بشكل افتراضي.

ما هو التعليق التوضيحي في TestNG?

الشروحات في TestNG هي أسطر من التعليمات البرمجية توضع فوق طريقة ما للتحكم في كيفية تنفيذها. تبدأ هذه الرموز دائمًا بالرمز @. يُعرض أدناه مثال بسيط.

مثال TestNG التعليق أعلاه أ Java طريقة

تُغطى التعليقات التوضيحية بالتفصيل في القسم "التعليقات المستخدمة في TestNG" لاحقًا في هذا الدرس التعليمي، لذا فإن المثال أعلاه هو فقط لتحديد التوقعات. TestNG تُعدّ التعليقات التوضيحية أسهل في البرمجة والقراءة من... JUnit المكافئات، وهي ضرورية عند إجراء الاختبارات على Selenium شبكة حيث يكون التنفيذ المتوازي مهماً.

كيفية كتابة حالات الاختبار في TestNG

كتابة TestNG تتضمن حالة الاختبار ثلاث خطوات:

  1. اكتب منطق عملك وحدد مكانه TestNG التعليقات التوضيحية أعلى كل طريقة.
  2. أضف بيانات وصفية مثل اسم الفئة واسم المجموعة واسم الحزمة.
  3. تشغيل TestNG الفئة من بيئة التطوير المتكاملة (IDE) أو سطر الأوامر.

إنشاء حالة اختبار باستخدام TestNG الشروح

سنقوم الآن بإنشاء حالة الاختبار الأولى باستخدام TestNG التعليقات التوضيحية في Seleniumقبل كتابة الاختبار، قم بإعداد جديد TestNG مشروع في Eclipse و نسميها الاسم الأولTestNGمشروع.

إنشاء جديد TestNG مشروع

الخطوة 1) انقر ملف > جديد > Java مشروع.

Eclipse قائمة لإنشاء جديد Java تنفيذ المشاريع

الخطوة 2) أدخل الاسم الأولTestNGمشروع كاسم للمشروع، ثم انقر لتالي.

جديد Java معالج المشروع باسم FirstTestNGمشروع

الخطوة 3) قم باستيراد ملف TestNG المكتبات. انقر فوق المكتبات علامة التبويب ثم إضافة مكتبة….

علامة تبويب المكتبات مع خيار إضافة مكتبة في Eclipse

الخطوة 4) في خانة رمز الخصم، أدخل TABBYDAY. أضف مكتبة الحوار، اختر TestNG ثم انقر لتالي.

اختيار TestNG في مربع حوار إضافة مكتبة

الخطوة 5) انقر نهاية.

إنهاء معالج إضافة المكتبة

TestNG ينبغي أن يظهر الآن في قائمة المكتبات.

TestNG يظهر في قائمة المكتبات

الخطوة 6) أضف ملفات JAR التي تحتوي على Selenium واجهة برمجة التطبيقات (API). هذه تأتي من Java تم تنزيل برنامج تشغيل العميل من selenium.dev/downloads.

إضافة مربع حوار JAR خارجي في Eclipse

انتقل إلى المجلد الذي يحتوي على Selenium يتم تخزين ملفات JAR.

اختيار Selenium ملفات JAR لمسار الإنشاء

بعد إضافة ملفات JAR الخارجية، يجب أن تبدو الشاشة كما يلي.

Selenium تمت إضافة ملفات JAR إلى قائمة المكتبات

الخطوة 7) انقر نهاية. الجديد الاسم الأولTestNGمشروع يظهر في مستكشف الحزم.

الاسم الأولTestNGالمشروع مرئي في مستكشف الحزم

كيفية إنشاء ملف TestNG ملف الاختبار

بعد تجهيز المشروع، أنشئ مشروعًا جديدًا TestNG ملف.

الخطوة 1) انقر بزر الماوس الأيمن فوق src مجلد واختيار جديد > أخرى….

قائمة "أخرى" جديدة من مجلد src في Eclipse

الخطوة 2) توسيع TestNG المجلد، حدد TestNG فئة، ثم انقر لتالي.

TestNG خيار الفئة في المعالج الجديد

الخطوة 3) أدخل القيم الموضحة أدناه وانقر نهاية. Java الملف اسمه الاسم الأولTestNGقم بتقديم.

TestNG معالج الفصل مع الأولTestNGقيم الملفات

الخطوة 4) Eclipse يولد ال TestNG النموذج الموضح أدناه.

ولدت TestNG قالب الفئة في Eclipse رئيس التحرير

كتابة أول تجربة برمجية 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 نافذة النتائج مع نتيجة الاختبار

Eclipse نافذة وحدة التحكم مع TestNG إخراج النص

التحقق من التقارير التي تم إنشاؤها بواسطة TestNG

توفر نافذة وحدة التحكم ملخصًا نصيًا بينما TestNG تعرض نافذة النتائج عرضًا بيانيًا.

نص مقابل رسوم بيانية TestNG مقارنة النتائج

توليد تقارير HTML

TestNG كما يمكنه إنشاء تقارير HTML كاملة.

الخطوة 1) بعد تشغيل الاسم الأولTestNGقم بتقديمانقر بزر الماوس الأيمن على المشروع واختر تحديث.

خيار التحديث لـ TestNG مشروع في Eclipse

الخطوة 2) A مخرجات الاختبار يظهر المجلد. قم بتوسيعه وابحث عن index.html — تقرير HTML لأحدث عملية تشغيل.

مجلد مخرجات الاختبار مع تمييز ملف index.html

الخطوة 3) Double-انقر index.html لفتحه من الداخل Eclipseمتصفحك. اضغط F5 للتحديث بعد عمليات التشغيل اللاحقة.

TestNG تقرير فهرس HTML مُعرَض في Eclipse

التعليقات المستخدمة في TestNG

لقد اطلعت بالفعل على التعليق التوضيحي @Test. أما بقية هذا القسم فتغطي أهم التعليقات التوضيحية المتقدمة.

حالات اختبار متعددة

A واحد TestNG يمكن للملف أن يحتوي على عدة تعليقات توضيحية من نوع @Test. بشكل افتراضي، يتم تنفيذ الطرق التي تحمل تعليقًا توضيحيًا من نوع @Test بالترتيب الأبجدي. في الكود أدناه، الطرق c_test, a_testو b_test يتم تشغيلها أبجديًا بغض النظر عن ترتيب المصدر.

طرق اختبار متعددة في طريقة واحدة TestNG فئة

قم بتشغيل الكود وافتحه index.html. انقر عرض زمني.

عرض زمني لتعدد TestNG طرق

المعاملات

لتجاوز الترتيب الافتراضي، استخدم priority المعلمة. المعلمات هي كلمات مفتاحية تعمل على تعديل سلوك التعليق التوضيحي.

  • قم بتعيين قيمة باستخدام =.
  • قم بتغليف المعلمات بين قوسين موضوعين مباشرة بعد التعليق التوضيحي، كما هو موضح أدناه.

TestNG التعليق باستخدام بناء جملة المعلمات والقيم

TestNG ينفذ التعليقات التوضيحية @Test من أدنى قيمة أولوية إلى أعلى قيمة. لا يشترط أن تكون أرقام الأولوية متسلسلة.

الكود الكامل مع معلمات الأولوية @Test

يؤكد تقرير HTML أن الطرق تم تنفيذها بترتيب أولوية تصاعدي.

TestNG تقرير يوضح الطرق التي يتم تشغيلها حسب الأولوية التصاعدية

معلمات متعددة

بالإضافة إلى priorityيقبل @Test alwaysRun المعامل (صواب أو خطأ). لاستخدام معلمتين أو أكثر في تعليق توضيحي واحد، افصل بينهما بفاصلة:

@Test(priority = 0, alwaysRun = true)

مثال على معلمات متعددة داخل تعليق @Test

@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);
    }
}

قم بتشغيل الكود وتحقق من النتيجة.

TestNG النتيجة تؤكد الترتيب على الرغم من التعليقات المتداخلة

@BeforeMethod وAfterMethod

تضمين التغريدة الطرق التي تندرج تحت هذا التعليق التوضيحي تعمل قبل كل طريقة اختبار.
تضمين التغريدة الطرق التي تندرج تحت هذا التعليق التوضيحي تعمل اتبع كل طريقة اختبار.

In Mercury لنفترض أننا نريد التحقق من عناوين صفحتين مستهدفتين يتم الوصول إليهما من الصفحة الرئيسية.

ثلاثة روابط من 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 تسلسل التقرير باستخدام BeforeMethod و AfterMethod

باختصار: ضع خطوات الإعداد في الداخل تضمين التغريدة وإعادة ضبط نظام الملاحة أو التنظيف في الداخل تضمين التغريدة لذا تبدأ كل حالة اختبار وتنتهي في حالة معروفة.

ملخص TestNG الشروح

  • @BeforeSuite: يتم تشغيله قبل جميع الاختبارات في المجموعة.
  • @AfterSuite: يتم تشغيله بعد جميع الاختبارات في المجموعة.
  • @قبل الاختبار: يتم تشغيلها قبل أي طريقة اختبار تابعة للفئات الموجودة داخل علامة.
  • @AfterTest: يتم تشغيلها بعد جميع طرق الاختبار التابعة للفئات الموجودة داخل علامة.
  • @BeforeGroups: يتم تشغيله قبل وقت قصير من أول طريقة اختبار تنتمي إلى أي مجموعة مدرجة.
  • @AfterGroups: يتم تشغيله بعد فترة وجيزة من آخر طريقة اختبار تنتمي إلى أي مجموعة مدرجة.
  • @قبل_الدرس: يتم تشغيلها قبل أول طريقة اختبار في الفئة الحالية.
  • @AfterClass: يتم تشغيله بعد جميع طرق الاختبار في الفئة الحالية.
  • @BeforeMethod: يتم تشغيلها قبل كل طريقة اختبار.
  • @AfterMethod: يتم تشغيلها بعد كل طريقة اختبار.
  • @امتحان: يُشير إلى الطريقة كحالة اختبار.

الأسئلة الشائعة

JUnit 5 تم تحديثها JUnit باستخدام واجهة برمجة تطبيقات جوبيتر ونموذج الامتداد. TestNG لا تزال تتصدر في مجال التنفيذ المتوازي، ومجموعات مستوى المجموعةping، يعتمد على، وموفر البيانات. كثير Selenium الفرق تختار TestNG للمجموعات المتكاملة و JUnit 5 لاختبارات الوحدة.

أضف السمة parallel="methods" أو parallel="classes" بالإضافة إلى سمة thread-count في الوسم داخل ملف testng.xml. TestNG ثم يوزع أساليب الاختبار على الخيوط، وهو أمر مثالي لـ Selenium تشغيل الشبكة أو السحابة عبر المتصفحات.

يُغذي @DataProvider عدة مجموعات بيانات إلى دالة @Test واحدة. كل صف في الموفر يُمثل عملية تنفيذ واحدة. هذا هو النمط القياسي للبرمجة القائمة على البيانات. Selenium الاختبارات على النماذج، أو مربعات البحث، أو شاشات تسجيل الدخول.

نعم. AI يقوم مساعدو البرمجة بإنشاء TestNG الهياكل العظمية، وشرح طرق @Test، وبناء فئات كائن الصفحة، وصياغة مصفوفات DataProvider من ملفات CSV النموذجية، مما يقلل بشكل كبير من وقت إنشاء الهياكل.

تستوعب تقنيات الذكاء الاصطناعي التوليدي ملفات testng-results.xml وسجلات Surefire، وتُصنّف حالات الفشل المتشابهة، وتقترح الأسباب الجذرية المحتملة، وتُنشئ تذاكر Jira. هذا يُقلّل من وقت فرز الاختبارات غير المستقرة ويُساعد قادة ضمان الجودة على تحديد أولويات إصلاحات التكامل المستمر.

تلخيص هذه التدوينة بـ: