برنامج TestNG التعليمي: ما هو الشروح والإطار في السيلينيوم

ما هو TestNG؟

اختبار هو إطار عمل لاختبار الأتمتة حيث يرمز NG إلى "الجيل القادم". TestNG مستوحى من أداة JUnit الذي يستخدم التعليقات التوضيحية (@). يتغلب TestNG على عيوب JUnit وهو مصمم لتصنيعه اختبار شامل سهل.

باستخدام TestNG، يمكنك إنشاء تقرير مناسب، ويمكنك بسهولة معرفة عدد حالات الاختبار التي تم اجتيازها وفشلها وتخطيها. يمكنك تنفيذ حالات الاختبار الفاشلة بشكل منفصل.

فمثلا:

  • لنفترض أن لديك خمس حالات اختبار، وتم كتابة طريقة واحدة لكل حالة اختبار (افترض أن البرنامج مكتوب باستخدام الطريقة الرئيسية دون استخدام testNG). عند تشغيل هذا البرنامج أولاً، يتم تنفيذ ثلاث طرق بنجاح، وتفشل الطريقة الرابعة. ثم قم بتصحيح الأخطاء الموجودة في الطريقة الرابعة، والآن تريد تشغيل الطريقة الرابعة فقط لأنه يتم تنفيذ الطرق الثلاثة الأولى بنجاح على أي حال. هذا غير ممكن دون استخدام TestNG.
  • يوفر TestNG في السيلينيوم خيارًا، على سبيل المثال، ملف testng-failed.xml في مجلد إخراج الاختبار. إذا كنت تريد تشغيل حالات الاختبار الفاشلة فقط، فهذا يعني أنك تقوم بتشغيل ملف XML هذا. سيتم تنفيذ حالات الاختبار الفاشلة فقط.

إلى جانب المفهوم أعلاه، ستتعلم المزيد عن TestNG، مثل مزايا TestNG، وكيفية إنشاء طرق اختبار باستخدام التعليقات التوضيحية @test، وكيفية تحويل هذه الفئات إلى ملف مجموعة اختبار وتنفيذها من خلال eclipse وكذلك من سطر الأوامر.

لماذا استخدام TestNG مع السيلينيوم؟

لا تقوم اختبارات السيلينيوم الافتراضية بإنشاء تنسيق مناسب لنتائج الاختبار. باستخدام TestNG في السيلينيوم، يمكننا توليد نتائج الاختبار.

يستخدم معظم مستخدمي السيلينيوم هذا أكثر من جونيت بسبب مزاياه. هناك العديد من ميزات TestNG، لكننا سنركز فقط على أهم الميزات التي يمكننا استخدامها في السيلينيوم. فولوwing هي الملامح الرئيسية للسيلينيوم TestNG:

  • قم بإنشاء التقرير بتنسيق مناسب بما في ذلك عدد حالات الاختبار التي تم تشغيلها، وعدد حالات الاختبار التي تم اجتيازها، وعدد حالات الاختبار الفاشلة، وعدد حالات الاختبار التي تم تخطيها.
  • يمكن تجميع حالات الاختبار المتعددة بسهولة أكبر عن طريق تحويلها إلى ملف testng.xml. حيث يمكنك تحديد الأولويات التي يجب تنفيذ حالة الاختبار بها أولاً.
  • يمكن تنفيذ نفس حالة الاختبار عدة مرات بدون حلقات فقط باستخدام كلمة أساسية تسمى "عدد الاستدعاءات".
  • باستخدام testng، يمكنك تنفيذ حالات اختبار متعددة على متصفحات متعددة، على سبيل المثال، cross اختبار المتصفح.
  • يمكن دمج إطار عمل TestNG بسهولة مع أدوات مثل TestNG Maven وJenkins وما إلى ذلك.
  • من السهل جدًا فهم التعليقات التوضيحية المستخدمة في الاختبار، على سبيل المثال:BeforeMethod، @AfterMethod، @BeforeTest، @AfterTest
  • ليس لدى WebDriver آلية أصلية لإنشاء التقارير. يمكن لـ TestNG إنشاء التقرير بتنسيق قابل للقراءة مثل الموضح أدناه.
  • استخدم TestNG مع السيلينيوم

  • يعمل TestNG على تبسيط طريقة ترميز الاختبارات. لم تعد هناك حاجة إلى طريقة رئيسية ثابتة في اختباراتنا. يتم تنظيم تسلسل الإجراءات من خلال تعليقات توضيحية سهلة الفهم ولا تتطلب أن تكون الأساليب ثابتة.
  • استخدم TestNG مع السيلينيوم

    استخدم TestNG مع السيلينيوم

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

مزايا TestNG على JUnit

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

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

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

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

الشرح في TestNG

ستتم مناقشة التعليقات التوضيحية لاحقًا في القسم المسمى "التعليقات التوضيحية المستخدمة في TestNG"، لذلك لا بأس إذا لم تفهم مثال TestNG أعلاه حتى الآن. من المهم فقط أن نلاحظ في الوقت الحالي أن التعليقات التوضيحية في TestNG أسهل في البرمجة والفهم من JUnit.

تتوفر القدرة على إجراء الاختبارات بالتوازي في TestNG ولكن ليس في JUnit، لذلك يُفضل إطار عمل TestNG أكثر للمختبرين الذين يستخدمون Selenium Grid.

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

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

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

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

قبل أن نقوم بإنشاء حالة اختبار، يجب علينا أولاً إعداد مشروع TestNG جديد Eclipse وقم بتسميته باسم "FirstTestNGProject".

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

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

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

خطوة 2 اكتب "FirstTestNGProject" كاسم المشروع ثم انقر فوق "التالي".

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

خطوة 3 سنبدأ الآن في استيراد مكتبات TestNG إلى مشروعنا. انقر فوق علامة التبويب "المكتبات"، ثم "إضافة مكتبة..."

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

خطوة 4 في مربع الحوار "إضافة مكتبة"، اختر "TestNG" وانقر فوق "التالي".

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

خطوة 5 انقر فوق "إنهاء".

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

يجب أن تلاحظ أن TestNG مدرج في قائمة المكتبات.

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

خطوة 6 سنقوم الآن بإضافة ملفات JAR التي تحتوي على واجهة برمجة تطبيقات السيلينيوم. تم العثور على هذه الملفات في برنامج تشغيل عميل Java الذي قمنا بتنزيله منه https://www.selenium.dev/downloads/ عندما كنا نقوم بتثبيت السيلينيوم و Eclipse في الفصول السابقة.

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

ثم انتقل إلى المكان الذي وضعت فيه ملفات Selenium JAR.

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

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

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

خطوة 7 انقر فوق "إنهاء" وتحقق من ظهور مشروع FirstTestNGProject الخاص بنا Eclipseنافذة مستكشف الحزم.

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

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

الآن بعد أن انتهينا من إعداد مشروعنا في هذا البرنامج التعليمي لـ TestNG، فلنقم بإنشاء ملف TestNG جديد.

خطوة 1 انقر فوق "src" واختر آخر.
انقر بزر الماوس الأيمن على مجلد الحزمة "src" ثم اختر جديد > أخرى...

قم بإنشاء ملف اختبار TestNG جديد

خطوة 2 حدد فئة TestNG.
انقر فوق مجلد TestNG وحدد خيار "فئة TestNG". انقر فوق {التالي.

قم بإنشاء ملف اختبار TestNG جديد

خطوة 3 اكتب القيم.
اكتب القيم الموضحة أدناه على الإدخال المناسب boxes وانقر فوق "إنهاء". لاحظ أننا قمنا بتسمية ملف Java الخاص بنا باسم "FirstTestNGFile".

قم بإنشاء ملف اختبار TestNG جديد

خطوة 4 تم إنشاء القالب.
Eclipse يجب أن يقوم تلقائيًا بإنشاء القالب لملف TestNG الخاص بنا الموضح أدناه.

قم بإنشاء ملف اختبار TestNG جديد

ترميز مثال حالة اختبار TestNG الأول لدينا

دعونا الآن إنشاء أول لدينا حالة الاختبار سيؤدي ذلك إلى التحقق مما إذا كانت الصفحة الرئيسية لـ Mercury Tours صحيحة. اكتب الكود الخاص بك كما هو موضح في مثال TestNG أدناه:

package firsttestngpackage;
import org.openqa.selenium.*;
import org.openqa.selenium.firefox.FirefoxDriver;
import org.testng.Assert;
import org.testng.annotations.*;

public class firsttestngfile {
    public String baseUrl = "http://demo.guru99.com/test/newtours/";
    String driverPath = "C:\\geckodriver.exe";
    public WebDriver driver ; 
     
  @Test
  public void verifyHomepageTitle() {
       
      System.out.println("launching firefox browser"); 
      System.setProperty("webdriver.gecko.driver", driverPath);
      driver = new FirefoxDriver();
      driver.get(baseUrl);
      String expectedTitle = "Welcome: Mercury Tours";
      String actualTitle = driver.getTitle();
      Assert.assertEquals(actualTitle, expectedTitle);
      driver.close();
  }
}

لاحظ المتابعةwing.

  • لا يتطلب TestNG أن يكون لديك طريقة main().
  • لا يجب أن تكون الأساليب ثابتة.
  • استخدمنا التعليق التوضيحيTest. يتم استخدام @Test للإشارة إلى أن الطريقة الموجودة تحته هي حالة اختبار. في هذه الحالة، قمنا بتعيين طريقة VereHomepageTitle () لتكون حالة الاختبار الخاصة بنا، لذلك وضعنا تعليقًا توضيحيًا "@Test" فوقها.
  • نظرًا لأننا نستخدم التعليقات التوضيحية في TestNG، فقد كنا بحاجة إلى استيراد الحزمة org.testng.annotations.*.
  • استخدمنا فئة التأكيد. يتم استخدام فئة التأكيد لإجراء عمليات التحقق في TestNG. لاستخدامها، نحتاج إلى استيراد الحزمة org.testng.Assert.

قد يكون لديك حالات اختبار متعددة (وبالتالي، تعليقات توضيحية @Test متعددة) في ملف TestNG واحد. سيتم تناول ذلك بمزيد من التفصيل لاحقًا في قسم "التعليقات التوضيحية المستخدمة في TestNG".

إجراء الاختبار

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

إجراء الاختبار

إجراء الاختبار

التحقق من التقارير التي أنشأتها TestNG

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

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

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

لدى TestNG القدرة على إنشاء تقارير بتنسيق HTML.

خطوة 1 بعد تشغيل ملف FirstTestNGFile الذي أنشأناه في القسم السابق، انقر بزر الماوس الأيمن فوق اسم المشروع (FirstTestNGProject) في نافذة Project Explorer ثم انقر فوق خيار "تحديث".

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

خطوة 2 لاحظ أنه تم إنشاء مجلد "اختبار الإخراج". قم بتوسيعه وابحث عن ملف Index.html. يعد ملف HTML هذا عبارة عن تقرير لنتائج آخر اختبار تشغيل.

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

خطوة 3 انقر نقرًا مزدوجًا على ملف Index.html لفتحه بداخله Eclipseمتصفح الويب المدمج. يمكنك تحديث هذه الصفحة في أي وقت بعد إعادة تشغيل الاختبار بمجرد الضغط على F5 تمامًا كما هو الحال في متصفحات الويب العادية.

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

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

في القسم السابق، تعرفت على التعليق التوضيحيTest. الآن، سندرس المزيد من التعليقات التوضيحية المتقدمة واستخداماتها.

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

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

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

قم بتشغيل هذا الرمز وفي صفحة Index.html التي تم إنشاؤها، انقر فوق "عرض زمني".

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

المعلمات

إذا كنت تريد تنفيذ الطرق بترتيب مختلف، فاستخدم المعلمة "الأولوية". المعلمات هي كلمات رئيسية تقوم بتعديل وظيفة التعليق التوضيحي.

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

المعلمات

سيقوم TestNG بتنفيذ التعليق التوضيحيTest بقيمة الأولوية الأدنى وحتى القيمة الأكبر. ليست هناك حاجة لأن تكون قيم الأولوية الخاصة بك متتالية.

المعلمات

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

المعلمات

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

بصرف النظر عن "الأولوية"، يحتوي @Test على معلمة أخرى تسمى "alwaysRun" والتي لا يمكن ضبطها إلا على "true" أو "false". لاستخدام معلمتين أو أكثر في تعليق توضيحي واحد، افصل بينهما بفاصلة مثل تلك الموضحة أدناه.

@Test(priority = 0, alwaysRun = true)

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

@BeforeTest وAfterTest

@قبل الاختبار سيتم تنفيذ الطرق ضمن هذا الشرح قبل حالة الاختبار الأولى في ملف TestNG.
تضمين التغريدة سيتم تنفيذ الطرق ضمن هذا الشرح بعد تنفيذ جميع حالات الاختبار في ملف TestNG.

النظر في الكود أدناه.

package firsttestngpackage;
import org.openqa.selenium.*;
import org.openqa.selenium.firefox.FirefoxDriver;
import org.testng.Assert;
import org.testng.annotations.*;
public class firsttestngfile {
    public String baseUrl = "http://demo.guru99.com/test/newtours/";
    String driverPath = "C:\\geckodriver.exe";
    public WebDriver driver ; 
     
     @BeforeTest
      public void launchBrowser() {
          System.out.println("launching firefox browser"); 
          System.setProperty("webdriver.gecko.driver", driverPath);
          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.close();
      }
}

بتطبيق المنطق الذي يقدمه الجدول والكود أعلاه، يمكننا التنبؤ بأن التسلسل الذي سيتم من خلاله تنفيذ الطرق هو:

  • 1st - إطلاق المتصفح ()
  • 2nd – التحقق من عنوان الصفحة الرئيسية ()
  • 3rd – إنهاء المتصفح ()

يمكن تبادل مواضع مجموعات التعليقات التوضيحية دون التأثير على الترتيب الزمني الذي سيتم تنفيذها من خلاله. دعونا نفهم من خلال مثال TestNG ونحاول إعادة ترتيب كتل التعليقات التوضيحية بحيث تبدو التعليمات البرمجية الخاصة بك مشابهة لتلك الموجودة أدناه.

package firsttestngpackage;
import org.openqa.selenium.*;
import org.openqa.selenium.firefox.FirefoxDriver;
import org.testng.Assert;
import org.testng.annotations.*;
public class firsttestngfile {
    public String baseUrl = "http://demo.guru99.com/test/newtours/";
    String driverPath = "C:\\geckodriver.exe";
    public WebDriver driver ; 
     @AfterTest                            //Jumbled
      public void terminateBrowser(){
          driver.close();
      }
     @BeforeTest                            //Jumbled
      public void launchBrowser() {
          System.out.println("launching firefox browser"); 
          System.setProperty("webdriver.gecko.driver", driverPath);
          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

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

في Mercury Tours، لنفترض أننا نرغب في التحقق من عناوين الصفحات المستهدفة للرابطين أدناه.

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

سيكون تدفق اختبارنا:

  • انتقل إلى الصفحة الرئيسية وتحقق من عنوانها.
  • انقر فوق تسجيل وتحقق من عنوان الصفحة المستهدفة.
  • ارجع إلى الصفحة الرئيسية وتحقق مما إذا كانت لا تزال تحمل العنوان الصحيح.
  • انقر فوق "الدعم" وتحقق من عنوان الصفحة المستهدفة.
  • ارجع إلى الصفحة الرئيسية وتحقق مما إذا كانت لا تزال تحمل العنوان الصحيح.

يوضح الكود أدناه كيفية استخدام @BeforeMethod وAfterMethod لتنفيذ السيناريو المذكور أعلاه بكفاءة.

package firsttestngpackage;
import org.openqa.selenium.*;
import org.openqa.selenium.firefox.FirefoxDriver;
import org.testng.Assert;
import org.testng.annotations.*;
@Test
public class firsttestngfile {
    public String baseUrl = "http://demo.guru99.com/test/newtours/";
    String driverPath = "C:\\geckodriver.exe";
    public WebDriver driver; 
    public String expected = null;
    public String actual = null;
        @BeforeTest
      public void launchBrowser() {
          System.out.println("launching firefox browser"); 
          System.setProperty("webdriver.gecko.driver", driverPath);
          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.close();
      }
}

بعد تنفيذ هذا الاختبار، يجب على TestNG الخاص بك الإبلاغ عن المتابعةwing تسلسل.

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

ببساطة، يجب أن يحتوي @BeforeMethod على الأساليب التي تحتاج إلى تشغيلها قبل يجب أن تحتوي كل حالة اختبار بينماAfterMethod على الأساليب التي تحتاج إلى تشغيلها بعد كل حالة اختبار.

ملخص التعليقات التوضيحية لـ TestNG

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

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

@قبل الاختبار: سيتم تشغيل الطريقة المشروحة قبل تشغيل أي طريقة اختبار تنتمي إلى الفئات داخل العلامة.

تضمين التغريدة: سيتم تشغيل الطريقة المشروحة بعد تشغيل جميع طرق الاختبار التابعة للفئات الموجودة داخل العلامة.

تضمين التغريدة: قائمة المجموعات التي سيتم تشغيل طريقة التكوين هذه من قبل. يتم ضمان تشغيل هذه الطريقة قبل وقت قصير من استدعاء طريقة الاختبار الأولى التي تنتمي إلى أي من هذه المجموعات.

تضمين التغريدة: قائمة المجموعات التي سيتم تشغيل طريقة التكوين هذه بعدها. يتم ضمان تشغيل هذه الطريقة بعد وقت قصير من استدعاء طريقة الاختبار الأخيرة التي تنتمي إلى أي من هذه المجموعات.

@قبل الفصل: سيتم تشغيل الطريقة المشروحة قبل استدعاء طريقة الاختبار الأولى في الفصل الحالي.

@بعد الفصل: سيتم تشغيل الطريقة المشروحة بعد تشغيل جميع طرق الاختبار في الفصل الحالي.

تضمين التغريدة: سيتم تشغيل الطريقة المشروحة قبل كل طريقة اختبار.

تضمين التغريدة: سيتم تشغيل الطريقة المشروحة بعد كل طريقة اختبار.

@اختبار: الطريقة المشروحة هي جزء من حالة الاختبار

وفي الختام

  • TestNG هو تجريب إطار عمل قادر على تسهيل فهم اختبارات السيلينيوم وإنشاء تقارير يسهل فهمها.
  • المزايا الرئيسية لـ TestNG عبر JUnit هي ما يليwing.
    • التعليقات التوضيحية أسهل في الاستخدام والفهم.
    • يمكن تجميع حالات الاختبار بسهولة أكبر.
    • يتيح لنا TestNG الإنشاء اختبارات موازية.
  • نافذة وحدة التحكم في Eclipse ينشئ نتيجة مستندة إلى النص بينما تكون نافذة TestNG أكثر فائدة لأنها توفر لنا مخرجات رسومية لنتيجة الاختبار بالإضافة إلى معلومات أخرى ذات معنىtails مثل:
    • أوقات التشغيل لكل طريقة.
    • الترتيب الزمني الذي تم من خلاله تنفيذ الأساليب
  • TestNG قادر على إنشاء تقارير مستندة إلى HTML.
  • يمكن للتعليقات التوضيحية استخدام المعلمات تمامًا مثل طرق Java TestNG المعتادة.
  • يعد TestNG Dataprovider طريقة لتمرير المعلمات إلى وظيفة الاختبار التي تمرر قيمًا مختلفة في حالات الاختبار في تنفيذ واحد.