المجموعات في TestNG

⚡ ملخص ذكي

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

  • 🏷️ صيغة التعليقات التوضيحية: استعمل @Test(groups = {"smoke","regression"}) لتصنيف أي طريقة باستخدام اسم مجموعة منطقية واحد أو أكثر.
  • 📜 التحكم في XML: استخدم <groups><run><include> و <exclude> تحدد العلامات الموجودة داخل ملف testng.xml أي الطرق الموسومة يتم تنفيذها فعليًا.
  • 🔗 تبعيات: استخدم dependsOnGroups تفرض السمة ترتيبًا بحيث تنتهي مجموعات المتطلبات الأساسية دائمًا قبل بدء الاختبارات التابعة.
  • 🤖 اختيار الذكاء الاصطناعي: تقوم أدوات اختبار تأثير الذكاء الاصطناعي بربط تغييرات التعليمات البرمجية بالمجموعات ذات الصلة، بحيث يتم تشغيل المجموعات المتأثرة فقط في كل عملية إيداع.
  • 🧪 TestNG 7.X: تحافظ الإصدارات الحديثة على توافق المجموعات بشكل كامل مع التنفيذ المتوازي والمستمعين وخطوط أنابيب Maven Surefire.

المجموعات في TestNG

TestNG هو إطار عمل للاختبار يغطي اختبارات الوحدة، والاختبارات الوظيفية، والاختبارات الشاملة، واختبارات واجهة المستخدم، واختبارات التكامل لـ Java المشاريع.

يمكنك تشغيل حزمة واحدة أو العديد من الحزم (تحتوي الحزمة على فئات ذات صلة في تخطيط دليل محدد) عن طريق إنشاء مجموعة XML وتشغيلها من خلال Maven.

TestNG المجموعات مع المثال

يمكنك استخدام المجموعات في TestNG متى:

  • لا ترغب في توزيع أساليب الاختبار على العديد من الفئات بناءً على المجال الوظيفي فقط، و
  • تريد تخطي (عدم تنفيذ) حالات الاختبار المحددة كما لو كانت غائبة عن قاعدة التعليمات البرمجية.
  • لتحقيق كلا الهدفين، تقوم بتصنيف الطرق إلى مجموعات منطقية. TestNG ثم يحترم عوامل التصفية "include" و "exclude" المعلنة في مجموعة XML.

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

@اختبار ( مجموعات = { "الترابط", "روابط قوية" })

يُستخدم هنا اسمان للمجموعات، وهما: bonding و strong_tiesهذه تسميات منطقية يمكنك إعادة تسميتها لتناسب مشروعك.

استخدم <groups> يشير الوسم إلى بداية عوامل تصفية المجموعة داخل مجموعة XML.

بعد ذلك، تقوم بتخصيص ملف XML لاختيار مجموعة محددة من الفئات الموسومة. يوضح المثال أدناه صيغة تعريف المجموعة.

< مجموعات>
<يجري>
<تتضمن الاسم="الترابط" />
</يجري>
</ مجموعات>

لنفترض أن فئة واحدة تحتوي على 10 طرق اختبار.

من بين تلك الطرق:

  • أربع طرق لنقل bonding المجموعة، و
  • أربع طرق لنقل strong_ties المجموعة.

بعد ذلك، تقوم بإعداد Maven و Java المسارات واستخدامها Eclipse بيئة تطوير متكاملة لعرض استخدام المجموعة من خلال ملفات XML داخل Javaمشروع Maven قائم على -

إنشاء ملف XML لـ TestNG مع علامات

  • يخزن ملف XML (لغة الترميز القابلة للتوسيع) في إطار عمل Maven إعدادات اختبار واحد أو أكثر، والتي تم تعريفها داخل العلامة.
  • يتم تغليف كل إدخال اختبار في بطاقة ويمكنها أن تحمل واحدة أو أكثر TestNG الطبقات.
  • A Java فصل دراسي مع واحد أو أكثر @اختبار تُعامل التعليقات التوضيحية على أساليبها على أنها TestNG فئة.

تظهر عدة علامات متسلسلة لإنشاء ملف testng.xml يعمل، وهي: ، ، و .

  • استخدم يحتوي الوسم على اسم مستوى المجموعة المستخدم في TestNG تقارير لملخصات التنفيذ.
  • استخدم <test name=”Guru 99 عرض توضيحي لاختبار الدخان يحتوي الوسم على اسم اختبار منطقي؛ ويستخدمه التقرير لحساب عدد مرات النجاح والفشل والتخطي بالإضافة إلى إجمالي وقت التنفيذ وبيانات تعريف المجموعة.
  • استخدم يشير الوسم إلى فئة الاختبار، حيث com.group.guru99 هي الحزمة و TC_Class1 هو اسم الفئة.

<!DOCTYPE جناح نظام "http://testng.org/testng-1.0.dtd">
<جناح الاسم="جناح">
<تجربه بالعربي الاسم="Guru 99 عرض توضيحي لاختبار الدخان">
< مجموعات>
<يجري>
<تتضمن الاسم="روابط قوية" />
</يجري>
</ مجموعات>
<فصول>
<فئة الاسم="com.group.guru99.TC_Class1" />
</فصول>
</تجربه بالعربي>
</جناح>

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

"استبعاد" أو "تضمين" في اختبار XML

إذا كانت آلية المجموعة تبدو ثقيلة بالنسبة لفلتر صغير، فإن مجموعة testng.xml تسمح لك أيضًا باستبعاد أو تضمين طرق الاختبار الفردية بالاسم.

استبعاد الوسم: صيغة علامة الاستبعادمنع الاسم="${TEST_CASE_NAME}" />
تضمين الوسم: صيغة علامة التضمينتتضمن الاسم="${TEST_CASE_NAME}" />

ملاحظة: يمكنك تضمين أو استبعاد العديد من حالات الاختبار في عملية تشغيل واحدة، وينطبق نفس التركيب على عوامل تصفية المجموعات.

استخدام مجموعات التبعية للتنفيذ المرتب

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

  • قم بتسجيل الدخول أولاً، ثم قم بإجراء المعاملات: طرق تسجيل الدخول باستخدام الوسوم group = "auth"واختبارات نقل العلامات مع dependsOnGroups = {"auth"}لا تُجرى اختبارات النقل إلا بعد نجاح تسجيل الدخول.
  • تجاوز الفشل: إذا فشلت إحدى الطرق في المجموعة الأصلية، TestNG يقوم هذا النظام بتحديد الطرق التابعة على أنها تم تخطيها بدلاً من فشلها بشكل مباشر، مما يحافظ على مصداقية التقارير.
  • قم بالدمج مع alwaysRun: ينبغي أن تقوم طرق التنظيف بضبط alwaysRun = true لذا يستمر تشغيل عملية التفكيك حتى عند فشل مجموعة المصدر.

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

يجري TestNG تجميع، تضمين، استبعاد التعليمات البرمجية (عرض فيديو توضيحي)

فيما يلي شرح تفصيلي لـ Java الكود ومجموعة XML التي تُشغّل التجميع، والاستبعاد، والإدراج السلوك.

سيناريو الاختبار: Запустить Guruقم بزيارة موقع الخدمات المصرفية التجريبي رقم 99، وتحقق من بعض العناصر في صفحة تسجيل الدخول، وأدخل بيانات الاعتماد، ثم أعد التحقق من بعض العناصر في لوحة التحكم بعد تسجيل الدخول.

يجري TestNG تجميع، تضمين، استبعاد Code

ملاحظة: كل خطوة موجودة في طريقتها الخاصة، ولكن في وقت التشغيل يعتمد الترتيب على المدخلات الموجودة في مجموعة XML.

  • طريقة 1: قم بتهيئة المتصفح وتشغيله URL (tc01LaunchURL()).
  • طريقة 2: تحقق من عنوان صفحة تسجيل الدخول (tc02VerifyLaunchPage()).
  • طريقة 3: أدخل اسم المستخدم وكلمة المرور في نموذج تسجيل الدخول (tc03EnterCredentials()).
  • طريقة 4: تحقق من وجود معرّف المدير في لوحة تحكم المستخدم (tc04VerifyLoggedInPage()).
  • طريقة 5: تحقق من الروابط الإضافية في لوحة تحكم المستخدم (tc05VerifyHyperlinks()).

Code بالنسبة للسيناريو:

صفقة com.group.guru99;

استيراد java.util.concurrent.TimeUnit ؛

استيراد org.openqa.selenium.By ؛
استيراد org.openqa.selenium.WebDriver ؛
استيراد org.openqa.selenium.firefox.Firefoxالسائقين؛
استيراد org.testng.Assert;
استيراد org.testng.annotations.Test؛

الطبقة العامة TC_Class1 {
نهائي ثابت للجمهور ويب درايفر برنامج تشغيل الويب = جديد Firefoxسائق()؛

خيط launchPageHeading = "//h3[text()=."Guru99 بنك";
نهائي خيط userName_element = "//input[@name='uid']"، عنصر_كلمة_المرور = "//input[@name='password']",
signIn_element = "//input[@name='btnLogin']";
نهائي خيط قيمة اسم المستخدم = "mngr28642"، قيمة_كلمة_المرور = "ydAnate";
نهائي خيط managerID = "//td[contains(text(),'Manger Id')]";
نهائي خيط العميل الجديد = "//a[@href='addcustomerpage.php']"، تحويل الأموال = "//a[@href='FundTransInput.php']";

/** تقوم حالة الاختبار هذه بتهيئة برنامج تشغيل الويب */
@اختبار( مجموعات = { "الترابط", "روابط قوية" })
الفراغ العام إطلاق tc01URL() {
webDriver.manage().window().maximize();
webDriver.manage().timeouts().implicitlyWait(20، TimeUnit.SECONDS);
webDriver.get("https://www.demo.guru99.com/V4/");
}

/** يتحقق من وجود العنوان في صفحة تسجيل الدخول */
@اختبار( مجموعات = { "الترابط" })
الفراغ العام tc02VerifyLaunchPage() {
Assert.assertTrue(webDriver.findElement(By.xpath(launchPageHeading)).isDisplayed(),
"عنوان الصفحة الرئيسية غير معروض");
System.out.println ("يتم عرض عنوان الصفحة الرئيسية");
}

/** يُدخل اسم المستخدم وكلمة المرور، ثم ينقر على تسجيل الدخول */
@اختبار( مجموعات = { "الترابط", "روابط قوية" })
الفراغ العام tc03EnterCredentials() {
webDriver.findElement(By.xpath(userName_element)).sendKeys(userName_value);
webDriver.findElement(By.xpath(password_element)).sendKeys(password_value);
webDriver.findElement(By.xpath(signIn_element)).click();
}

/** يتحقق من هوية المدير في لوحة التحكم */
@اختبار( مجموعات = { "روابط قوية" })
الفراغ العام tc04VerifyLoggedInPage() {
Assert.assertTrue(webDriver.findElement(By.xpath(managerID)).isDisplayed(),
"لا تظهر بطاقة هوية المدير");
System.out.println ("تم عرض ملصق هوية المدير");
}

/** يتحقق من رابط العميل الجديد ورابط تحويل الأموال في لوحة التحكم */
@اختبار( مجموعات = { "الترابط" })
الفراغ العام tc05VerifyHyperlinks() {
Assert.assertTrue(webDriver.findElement(By.xpath(newCustomer)).isEnabled(),
"لم يتم عرض رابط العميل الجديد");
System.out.println ("يتم عرض رابط العميل الجديد");

Assert.assertTrue(webDriver.findElement(By.xpath(fundTransfer)).isEnabled(),
"لا يظهر رابط تحويل الأموال");
System.out.println ("يظهر رابط تحويل الأموال");
}
}

يرجى الملاحظة: تظل بيانات اعتماد الخدمات المصرفية التجريبية صالحة لمدة 20 يومًا تقريبًا، لذا قد يظهر خطأ في بيانات الاعتماد غير الصالحة عند التشغيل المحلي بعد انتهاء تلك الفترة.

شرح الكود:

خمس طرق اختبار، واحدة لكل إجراء، كل منها يحمل groups السمة على @Test حاشية. ملاحظة.

التصنيفان المنطقيان للمجموعات هما strong_ties و bonding.

  • الطريقتان الأولى والثالثة تحملان كليهما bonding و strong_tiesلذا يتم تشغيلها كلما تم تضمين أي من المجموعتين في الحزمة. هذا نمط شائع للمشتركين حالة اختبار خطوات.
  • الطريقة الثانية تحمل علامة فقط bondingلذا فهو يعمل فقط عندما bonding المجموعة مشمولة.
  • الطريقة الرابعة مُصنّفة فقط بـ strong_tiesلذلك، لا يتم تشغيله إلا عند تضمين تلك المجموعة.
  • الطريقة الخامسة تحمل علامة فقط bondingلذا فهو يعمل فقط عندما bonding المجموعة مشمولة.

فيما يلي أربعة سيناريوهات للتنفيذ:

السيناريو شنومكس: قم بتشغيل جميع طرق الاختبار بغض النظر عن المجموعة. قم بإزالة <groups> كتلة من ملف XML قيد التشغيل.

السيناريو شنومكس: قم بتشغيل الطرق المرتبطة بمجموعة مختارة فقط، وهي: strong_ties or bondingيرجى الاطلاع على الفيديو أدناه.

  • في الجزء الأول من الفيديو، <groups> تم التعليق على الكتلة، لذلك يتم تشغيل كل طريقة اختبار.
  • في الجزء الثاني، يتم استعادة عامل تصفية المجموعة، ويتم تشغيل طرق المطابقة فقط.

السيناريو شنومكس: قم بتطبيق فلتر الاستبعاد لتجاوز حالات الاختبار المحددة. يرجى مراجعة الفيديو.

  • لا يشمل العرض التجريبي tc02 بالاسم في ملف XML قيد التشغيل، ويؤكد تقرير النتائج أن الطريقة المستبعدة لا تعمل.

السيناريو شنومكس: قم بتطبيق عامل التصفية المضمن لتشغيل البرنامج فقط tc01LaunchURL, tc03EnterCredentialsو tc05VerifyHyperlinksيرجى الرجوع إلى الفيديو.

في هذه العملية، يتم تنفيذ الطرق المدرجة في عامل التصفية فقط، تمامًا كما تم تكوينها.

قم بتنزيل نموذج المشروع من الرابط أدناه.

قم بتنزيل الملف أعلاه Code

خاتمة

المجموعات في TestNG إضفاء هيكلية على نطاق واسع Selenium ومجموعات الوحدات عن طريق استبدال تقسيمات الفئات لمرة واحدة بمرشحات XML التصريحية.

قم بتمييز طرقك بـ @Test(groups = {...})، ثم استخدام <include>, <exclude>و dependsOnGroups لتشغيل اختبارات الدخان، واختبارات التراجع، والاختبارات الشاملة من نفس مشروع Maven على TestNG 7.x.

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

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

في الداخل <groups><run>أطلقت حملة <include name="..."> تحديد المجموعات المسموح بها للتشغيل، و <exclude name="..."> يحجبهم. TestNG يتم تطبيق الاستثناءات بعد التضمينات، لذلك يتم تخطي المجموعة المستبعدة دائمًا، حتى عند إدراجها أيضًا في التضمين.

استخدم dependsOnGroups السمة على @Test القوات TestNG لتشغيل جميع الطرق في المجموعة المدرجة قبل بدء الطريقة التابعة. في حال فشل أي طريقة من الطرق المطلوبة مسبقًا، TestNG يُشير إلى أن الطريقة التابعة قد تم تخطيها بدلاً من فشلها.

نعم فعلا. ال groups تقبل الخاصية مصفوفة، لذا @Test(groups = {"smoke", "regression"}) يضع طريقة واحدة في كلتا المجموعتين. TestNG يقوم بتشغيل هذه الطريقة كلما تم تضمين أي من المجموعتين في المجموعة، مما يحافظ على الخطوات المشتركة دون تكرار.

TestNG الإصدار 7.x هو الإصدار المُعتمد، مع إصدارات ضمنه. org.testng:testng تنسيق Maven. فهو يحافظ على توافق المجموعات والتنفيذ المتوازي والمستمعين بشكل كامل مع التقنيات الحديثة Selenium 4 ومشاريع JDK 17.

تحلل أدوات اختبار الذكاء الاصطناعي اختلافات التعليمات البرمجية، ثم تربط الفئات المتغيرة بالمجموعات التي تغطيها. لا يُشغّل خط الأنابيب سوى تلك المجموعات الموسومة في كل طلب سحب، مما يقلل وقت تلقي الملاحظات مع الحفاظ علىping مسارات محفوفة بالمخاطر قيد الاختبار.

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

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