أعلى 50 TestNG أسئلة وأجوبة المقابلة (2026)

التحضير ل TestNG هل ستخضع لمقابلة؟ حان الوقت للتفكير في الأسئلة التي تُبرز نقاط قوتك. TestNG يكشف أساس المقابلة عن العمق والثقة والاستعداد، وهي أمور تقدرها فرق التوظيف.
تتنوع الفرص في هذا المجال لتشمل نمو الأتمتة، وتطوير الأطر، وتطبيقات الاختبار العملية التي تتطلب خبرة فنية ومهنية. يتطلب العمل في هذا المجال خبرة متخصصة، ومهارات تحليلية، ومجموعة مهارات مرنة تساعد المبتدئين والمتوسطين والخبراء على الإجابة عن الأسئلة الشائعة في مختلف المستويات التقنية والأساسية والمتقدمة. اقرأ أكثر…
👉 تنزيل مجاني بصيغة PDF: TestNG أسئلة وأجوبة المقابلة
★★★★ TestNG أسئلة وأجوبة المقابلة
1) ما هو TestNG ولماذا يُستخدم في اختبار الأتمتة؟
TestNG (اختبار الجيل التالي) هو إطار عمل للاختبار مستوحى من JUnit وNUnit ولكن مع تعزيزها بقدرات متقدمة مثل المجموعاتpingوتشمل وظائفها التسلسل، وتحديد المعلمات، وإدارة التبعيات. وتُستخدم بشكل أساسي في اختبارات الأتمتة لتبسيط تنفيذ الاختبارات، وتحسين تنظيمها، وإنشاء تقارير مفصلة بصيغتي HTML وXML.
الفوائد الرئيسية لـ TestNG تتضمن:
- الدعم تنفيذ الاختبارات بالتوازيمما يقلل من إجمالي وقت التشغيل.
- يوفر الشروح التي تتحكم في سير الاختبار بشكل فعال.
- العروض الاختبار المبني على البيانات من خلال
@DataProviderحاشية. ملاحظة. - يولد تقارير قابلة للتخصيص لتحسين عملية تصحيح الأخطاء.
على سبيل المثال، TestNG يتيح لك تنفيذ مجموعات اختبار الدخان والانحدار والتكامل بشكل مستقل دون تعديل رمز الاختبار، مما يوفر المرونة وقابلية التوسع في مجموعات الأتمتة الكبيرة.
2) اشرح TestNG دورة الحياة مع التعليقات التوضيحية وترتيب تنفيذها.
استخدم TestNG تحدد دورة حياة الاختبارات كيفية تهيئة الاختبارات وتنفيذها وإنهائها. ويتم التحكم بها من خلال التعليقات التوضيحية التي توفر بنية ووضوحًا لتدفق الاختبار.
| حاشية | الوصف | أمر التنفيذ |
|---|---|---|
@BeforeSuite |
يتم تشغيله قبل جميع الاختبارات في المجموعة | 1 |
@BeforeTest |
ينفذ قبل <test> الوسم في XML |
2 |
@BeforeClass |
يتم تنفيذه قبل الطريقة الأولى في الفئة الحالية | 3 |
@BeforeMethod |
يتم تنفيذه قبل كل طريقة اختبار | 4 |
@Test |
يحتوي على منطق اختبار فعلي | 5 |
@AfterMethod |
يتم تشغيله بعد كل طريقة اختبار | 6 |
@AfterClass |
يتم تشغيله بعد جميع الطرق في الفئة | 7 |
@AfterTest |
يركض بعد <test> الوسم في XML |
8 |
@AfterSuite |
ينفذ بعد كل الاختبارات في الجناح | 9 |
يضمن هذا الترتيب المنظم إمكانية التنبؤ بإعداد الاختبار وتفكيكه، وهو أمر بالغ الأهمية للحفاظ على استقلالية الاختبار.
3) كيف هو TestNG مختلفة من JUnit?
بينما يُستخدم كلا الإطارين لاختبار الوحدات، TestNG يوفر إمكانيات تكوين وتنفيذ متوازية أكثر قوة.
| الميزات | JUnit | TestNG |
|---|---|---|
| التنفيذ الموازي | دعم محدود | دعم كامل |
| الشروح | أقل (@Before, @After) |
أغنى (@BeforeSuite, @DataProvider) |
| إدارة التبعية | غير متوفرة | متاح باستخدام dependsOnMethods |
| الحبوping | غير معتمد | مدعوم باستخدام groups |
| البارامتر | عن طريق العدائين الخارجيين | مدمج عبر XML أو @DataProvider |
باختصار، TestNG مفضل ل اختبار الأتمتة على مستوى المؤسسة والتكامل مع أدوات مثل Selenium، بينما JUnit يُعد مثالياً لاختبارات الوحدات البسيطة.
4) ما هي TestNG التعليقات التوضيحية وكيف تكون مفيدة؟
الشروحات في TestNG حدد بنية وسلوك أساليب الاختبارفهي تلغي الحاجة إلى تكوين XML المعقد من خلال توفير التحكم في الاختبار التصريحي مباشرة في الكود.
تشمل التعليقات التوضيحية الشائعة الاستخدام ما يلي:
@BeforeSuite,@BeforeTest,@BeforeClass,@BeforeMethod@Test@AfterMethod,@AfterClass,@AfterTest,@AfterSuite
على سبيل المثال:
@BeforeMethod
public void setup() {
System.out.println("Initializing browser...");
}
@Test
public void verifyLogin() {
System.out.println("Executing login test...");
}
يساعد هذا المطورين على تنظيم تنفيذ الاختبار بشكل منطقي، مما يضمن أن الإعداد وتنفيذ الاختبار والإنهاء تحدث بترتيب محدد.
5) اشرح مفهوم المجموعةping in TestNG.
الحبوping in TestNG يسمح بالتصنيف المنطقي للاختبارات إلى مجموعات أصغر وأكثر قابلية للإدارة مثل "الدخان" أو "التراجع" أو "العقلانية".
على سبيل المثال:
@Test(groups = {"Smoke"})
public void loginTest() { ... }
@Test(groups = {"Regression"})
public void paymentTest() { ... }
يمكنك تهيئة مجموعة XML الخاصة بك لتشغيل مجموعات محددة:
<groups>
<run>
<include name="Smoke"/>
</run>
</groups>
الفوائد :
- يسهل التنفيذ الانتقائي لحالات الاختبار.
- يعزز المرونة في مسارات التكامل المستمر/التسليم المستمر.
- يوفر وقت التنفيذ أثناء عمليات البناء التزايدية.
6) كيف يمكن تحقيق تحديد المعلمات في TestNG?
تتيح المعلمات إجراء الاختبارات القائمة على البيانات، مما يسمح بتشغيل الاختبارات باستخدام مجموعات بيانات إدخال متعددة. TestNG يدعم طريقتين أساسيتين:
- باستخدام
@Parametersإضافة التعليقات باستخدام لغة XML: - باستخدام
@DataProvider:
<parameter name="browser" value="chrome"/>
@Test
@Parameters("browser")
public void launchBrowser(String browser) { ... }
@DataProvider(name="loginData")
public Object[][] getData() {
return new Object[][] {{"user1","pass1"}, {"user2","pass2"}};
}
@Test(dataProvider="loginData")
public void loginTest(String user, String pass) { ... }
هذه المرونة تجعل من السهل الحفاظ على مجموعات اختبار كبيرة وتنفيذها عبر البيئات أو التكوينات المختلفة.
7) ما هي التبعيات في TestNG وكيف تتم إدارتها؟
التبعيات في TestNG التحكم في ترتيب تنفيذ الاختبار بناءً على نتائج الاختبارات الأخرى باستخدام dependsOnMethods or dependsOnGroups الصفات.
على سبيل المثال:
@Test
public void loginTest() { ... }
@Test(dependsOnMethods = {"loginTest"})
public void verifyDashboard() { ... }
إذا فشلت الطريقة التابعة، يتم تخطي الاختبار اللاحق تلقائيًا.
تمنع هذه الآلية تنفيذ الاختبارات غير الصحيحة وتساعد في الحفاظ على سلامة الاختبار المنطقي. وهو مفيد بشكل خاص لتدفقات الوظائف متعددة الخطوات مثل تسجيل الدخول → تنفيذ إجراء → التحقق من النتيجة.
8) ما هي الطرق المختلفة للتنفيذ؟ TestNG الاختبارات؟
TestNG يمكن تنفيذ الاختبارات بعدة طرق مرنة حسب إعداد الاختبار:
- من بيئة التطوير المتكاملة (Eclipse(IntelliJ): انقر بزر الماوس الأيمن على الفصل أو
XML file→Run as→TestNG Test. - من سطر الأوامر:
java -cp "path\testng.jar;bin" org.testng.TestNG testng.xml - استخدام أدوات البناء:
- مخضرم: ضبط
surefire-plugininpom.xml. - Gradle: استعمل
testngتكوين التبعية والمهام.
- مخضرم: ضبط
- من خلال خطوط أنابيب التكامل المستمر/التسليم المستمر: تتكامل مع Jenkins أو GitHub Actions للتنفيذ التلقائي.
يضمن هذا التنوع التوافق بين بيئات التطوير والاختبار والإنتاج.
9) ما هي TestNG المستمعون ولماذا هم مهمون؟
المستمعون في TestNG توفير نقاط ربط لتخصيص سلوك الاختبار من خلال مراقبة أحداث تنفيذ الاختبار مثل البدء أو النجاح أو الفشل أو التخطي.
المستمعون المشتركون:
ITestListener: Tracأحداث مستوى طريقة اختبار ks.ISuiteListener: يراقب الأحداث على مستوى المجموعة.IReporter: يُنشئ تقارير مخصصة.
على سبيل المثال:
public class CustomListener implements ITestListener {
public void onTestFailure(ITestResult result) {
System.out.println("Test Failed: " + result.getName());
}
}
غالباً ما يتم استخدام المستمعين لأخذ لقطات شاشة عند الفشلوتوليد سجلات مخصصة أو التكامل مع أدوات إعداد التقارير مثل Allure أو ExtentReports.
10) ما هي مزايا وعيوب استخدام TestNG?
| البعد | المزايا | عيوب |
|---|---|---|
| المرونة | يدعم المجموعةping، والاعتمادية، والتنفيذ المتوازي | إعداد XML معقد للمجموعات الكبيرة |
| التقارير | يوفر تقارير مفصلة بصيغتي HTML و XML | تخصيص محدود بدون مستمعين |
| الاندماج | يعمل بسلاسة مع ملفات Selenium وأدوات التكامل المستمر/التسليم المستمر | منحنى التعلم العالي قليلا |
| البارامتر | دعم مدمج للاختبار القائم على البيانات | يتطلب صيانة لمجموعات البيانات الكبيرة |
وبشكل عام، TestNG هو إطار عمل قوي ومرن مناسب لبيئات اختبار الأتمتة الحديثة على الرغم من تكاليف التكوين البسيطة.
11) كيف يمكنك تحديد أولويات حالات الاختبار في TestNG?
TestNG يوفر priority السمة في @Test تُستخدم التعليقات التوضيحية لتحديد ترتيب تنفيذ أساليب الاختبار. تُنفذ الاختبارات ذات قيم الأولوية الأقل أولاً.
على سبيل المثال:
@Test(priority = 1)
public void loginTest() { ... }
@Test(priority = 2)
public void dashboardTest() { ... }
إذا لم يتم تحديد أولوية، فإن القيمة الافتراضية هي 0وتُنفذ الطرق أبجديًا.
أفضل ممارسة: استخدم قيم الأولوية باعتدال. فالإفراط في استخدامها قد يجعل ترتيب الاختبار جامدًا. بالنسبة للتدفقات المعقدة، إدارة التبعيات (dependsOnMethods) أكثر قابلية للصيانة من تحديد الأولويات الصارمة.
12) اشرح مفهوم واستخدام التنفيذ المتوازي في TestNG.
التنفيذ المتوازي في TestNG يسمح بتشغيل اختبارات أو فئات أو طرق متعددة في وقت واحد، مما يقلل بشكل كبير من وقت التنفيذ الإجمالي.
يمكنك تفعيل هذه الميزة في testng.xml ملف:
<suite name="ParallelSuite" parallel="tests" thread-count="3"> <test name="Test1">...</test> <test name="Test2">...</test> </suite>
الأوضاع المتوازية المدعومة:
testsclassesmethodsinstances
المزايا:
- دورة تغذية راجعة أسرع.
- الاستخدام الفعال للمعالجات متعددة النوى.
- قابلية التوسع لمجموعات الأتمتة الكبيرة.
ومع ذلك، تأكد سلامة الخيط عند استخدام موارد مشتركة مثل WebDriver أو اتصالات قواعد البيانات.
13) ما هي جهات توفير البيانات في TestNGكيف تختلف عن المعايير؟
@DataProvider تمكن الاختبار المبني على البيانات من خلال تزويد أساليب الاختبار بمجموعات متعددة من البيانات.
على سبيل المثال:
@DataProvider(name="credentials")
public Object[][] data() {
return new Object[][] {{"user1", "pass1"}, {"user2", "pass2"}};
}
@Test(dataProvider="credentials")
public void login(String username, String password) { ... }
الفرق بين @Parameters و @DataProvider:
| الميزات | @Parameters |
@DataProvider |
|---|---|---|
| مصدر البيانات | ملف XML | Java طريقة |
| نوع البيانات | مجموعة بيانات واحدة | مجموعات بيانات متعددة |
| المرونة | Less | مرتفع |
| الحلول المقترحة | متغيرات البيئة | اختبارات متكررة تعتمد على البيانات |
بالتالي، @DataProvider يفضل استخدامه عند تنفيذ اختبار واحد مع مجموعات بيانات متعددة، مثل التحقق من تسجيل الدخول باستخدام بيانات اعتماد متعددة.
14) كيف يمكنك تعطيل اختبار أو تخطيه في TestNG?
يمكنك تعطيل الاختبار في TestNG يستخدم ال enabled أو عن طريق التخطي البرمجيping هنا.
1. باستخدام enabled = false:
@Test(enabled = false)
public void skipTest() {
System.out.println("This test will not run.");
}
2. تخطيping أثناء وقت التشغيل باستخدام SkipException:
@Test
public void conditionalSkip() {
throw new SkipException("Skipping this test due to condition.");
}
يُعد تعطيل هذه الخاصية مفيدًا لـ تعطيل مؤقت الاختبارات غير المستقرة أو غير المكتملة دون حذفها. تخطيping ذات قيمة لـ شروط وقت التشغيلمثل تخطيping اختبارات للمتصفحات غير المدعومة.
15) ما هو دور ملف testng.xml وما هي مكوناته الرئيسية؟
استخدم testng.xml الملف هو العمود الفقري لتكوين TestNG. يحدد هذا النظام مجموعات الاختبار، ومجموعات الاختبار، والمعلمات، وإعدادات التنفيذ المتوازي.
مثال على البنية:
<suite name="AutomationSuite">
<parameter name="browser" value="chrome"/>
<test name="RegressionTests">
<classes>
<class name="com.test.LoginTest"/>
<class name="com.test.PaymentTest"/>
</classes>
</test>
</suite>
المكونات الرئيسية:
<suite>– يحدد المجموعة بأكملها.<test>– يمثل كتلة اختبار.<classes>– قوائم فئات الاختبار.<methods>– يقوم بتصفية طرق الاختبار المحددة.<parameter>– يوفر معلمات عامة أو على مستوى الاختبار.
يوفر ملف XML تحكم مركزي التنفيذ المفرط دون تغيير الكود.
16) كيف يمكنك إنشاء التقارير في TestNG?
TestNG يولد تلقائيا نوعان من التقارير:
- تقرير HTML (
test-output/index.html) – يلخص الاختبارات التي تم اجتيازها، والاختبارات التي فشلت، والاختبارات التي تم تخطيها. - تقرير XML – يستخدم للتكامل مع أدوات التكامل المستمر/التسليم المستمر (CI/CD).
لإعداد التقارير المتقدمة، TestNG يتكامل مع:
- تقارير إكستنت – يوفر لوحات معلومات رسومية وسجلات مفصلة.
- تقارير ألور – يوفر تحليلات مرئية تتضمن خطوات الاختبار ولقطات الشاشة والسجلات.
مثال على التكامل:
ExtentReports extent = new ExtentReports();
ExtentTest test = extent.createTest("Login Test");
test.pass("Test Passed Successfully");
extent.flush();
تُعد هذه التقارير ضرورية لـ tracتحديد الاتجاهات الرئيسية وتحديد نقاط الضعف في تغطية الاختبار.
17) ما هي المصانع في TestNG، وكيف تعمل؟
المصانع في TestNG يتم استخدامها لإنشاء نسخ ديناميكية من فئات الاختبارتسمح هذه الطريقة بإنشاء نماذج مُعاملة للفئات قبل تشغيل الاختبارات.
على سبيل المثال:
public class FactoryExample {
private String browser;
public FactoryExample(String browser) {
this.browser = browser;
}
@Factory
public static Object[] factoryMethod() {
return new Object[] { new FactoryExample("Chrome"), new FactoryExample("Firefox") };
}
@Test
public void testBrowser() {
System.out.println("Running test on: " + browser);
}
}
المزايا:
- تمكن إنشاء كائنات ذات معلمات.
- مثالية لل اختبار عبر المتصفح و التنفيذ في بيئات متعددة.
تُكمل المصانع موفري البيانات عندما تحتاج إلى تكوينات كائنات مختلفة بدلاً من مجرد اختلاف البيانات على مستوى الأسلوب.
18) كيف يمكنك استخدام التأكيدات في TestNG?
تُستخدم التأكيدات للتحقق من صحة النتائج المتوقعة مقابل النتائج الفعلية ضمن أساليب الاختبار.
أنواع التأكيدات:
- التأكيدات الصارمة (فئة التأكيد):
يوقف تنفيذ الاختبار فورًا عند حدوث الفشل. - التأكيدات غير المؤكدة (فئة SoftAssert):
يستمر التنفيذ حتى بعد الفشل، مع الإبلاغ عن جميع المشكلات في النهاية. - متى يجب استخدام:
- استخدم التأكيدات القوية لـ التحقق النقدي تم تسجيل الدخول بنجاح.
- استخدم التأكيدات الناعمة لـ عمليات تحقق متعددة ضمن طريقة اختبار واحدة.
Assert.assertEquals(actual, expected); Assert.assertTrue(condition);
SoftAssert soft = new SoftAssert();
soft.assertEquals(actual, expected);
soft.assertAll();
19) اشرح الفرق بين @BeforeMethod و @BeforeClass في TestNG.
| البعد | @BeforeMethod |
@BeforeClass |
|---|---|---|
| التنفيذ | أشواط قبل كل طريقة اختبار | أشواط مرة من قبل أي طريقة في الفئة |
| مجال | لكل طريقة اختبار | لكل فئة اختبار |
| الاستخدام الشائع | تهيئة المتصفح قبل كل اختبار | جارٍ تحميل الإعدادات أو إعدادات المتصفح |
على سبيل المثال:
@BeforeClass
public void setupClass() {
System.out.println("Executed once per class");
}
@BeforeMethod
public void setupMethod() {
System.out.println("Executed before each method");
}
استعمل @BeforeMethod عندما يتطلب كل اختبار بيئة نظيفة، و @BeforeClass للمهام التهيئة الثقيلة التي يمكن إعادة استخدامها.
20) كيف TestNG ما هي حالات استخدام تقنية حقن التبعية؟
TestNG وتدعم حقن التبعية من خلال حقن مدمج لكائنات السياق والتكوين مثل ITestContext, XmlTest أو Method.
على سبيل المثال:
@Test
public void testContextExample(ITestContext context) {
System.out.println("Suite Name: " + context.getSuite().getName());
}
استخدم حالات:
- جلب معلمات الاختبار ديناميكيًا.
- الوصول إلى معلومات التكوين مثل أسماء المجموعات أو إعدادات التنفيذ المتوازي.
- تعزيز مرونة الاختبار دون تضمين التبعيات بشكل ثابت في الكود.
تتيح تقنية حقن التبعية للمطورين كتابة اختبارات معيارية ومراعية للسياق التي تتكيف ديناميكيًا مع تغيرات البيئة.
21) ما الفرق بين @Factory و @DataProvider في TestNG?
يبلغ قطر كلاً من @Factory و @DataProvider تساعد في تحديد المعلمات، لكنها تعمل عند مراحل مختلفة في بنية الاختبار.
| الميزات | @Factory |
@DataProvider |
|---|---|---|
| مجال | مستوى الفصل | مستوى المنهج |
| الهدف | ينشئ عدة نسخ من فئة ببيانات مختلفة | يزود طريقة اختبار واحدة بالبيانات |
| التنفيذ | ينفذ الفئة بأكملها لكل مثيل | ينفذ طريقة واحدة عدة مرات |
| حالة الاستخدام المثالية | اختبار التوافق مع المتصفحات أو البيئة | اختبار وظيفي قائم على البيانات |
على سبيل المثال:
- المصنع: يقوم بتشغيل الفئة بأكملها لكل نوع من أنواع المتصفحات.
- موفر البيانات: يقوم بتشغيل طريقة اختبار واحدة مع مجموعات بيانات متعددة.
استعمل @Factory عندما يختلف إنشاء الكائن نفسه، و @DataProvider لاختلافات المدخلات الوظيفية داخل نفس مثيل الكائن.
22) كيف يمكنك إعادة محاولة حالات الاختبار الفاشلة تلقائيًا في TestNG?
TestNG يوفر آلية لـ إعادة تشغيل حالات الاختبار الفاشلة يستخدم ال IRetryAnalyzer واجهة.
مثال على التنفيذ:
public class RetryAnalyzer implements IRetryAnalyzer {
int count = 0;
int maxTry = 2;
public boolean retry(ITestResult result) {
if (count < maxTry) {
count++;
return true;
}
return false;
}
}
الاستخدام:
@Test(retryAnalyzer = RetryAnalyzer.class)
public void testLogin() {
Assert.fail("Intentional Failure");
}
الفوائد :
- يقلل من عدم الاستقرار في خطوط أنابيب التكامل المستمر.
- يعالج المشكلات العابرة في الشبكة أو البيئة.
أفضل ممارسة: قم بدمج منطق إعادة المحاولة مع التسجيل المناسب ولقطات الشاشة لتصحيح الأخطاء المتقطعة.
23) ما فائدة ITestContext في TestNG?
ITestContext ويوفر معلومات سياقية حول تشغيل الاختبار، بما في ذلك اسم المجموعة، واسم الاختبار، ودليل الإخراج، والمعلمات.
على سبيل المثال:
@Test
public void contextExample(ITestContext context) {
System.out.println("Suite: " + context.getSuite().getName());
}
الطرق الرئيسية:
getSuite()– يسترجع معلومات على مستوى الجناح.getName()– يُعيد اسم الاختبار.setAttribute()/getAttribute()– مشاركة البيانات بين الاختبارات.
فإنه يمكن مشاركة البيانات عبر أساليب الاختبار أو الفئات ويسهل إعداد التقارير والتسجيل الديناميكي.
24) كيف يمكنك إنشاء تبعية بين مجموعات الاختبار في TestNG?
يمكنك تحديد التبعيات بين المجموعات باستخدام dependsOnGroups السمة في @Test حاشية. ملاحظة.
على سبيل المثال:
@Test(groups = "Login")
public void login() { ... }
@Test(dependsOnGroups = "Login")
public void verifyProfile() { ... }
هذا يضمن أن verifyProfile لا يتم تشغيل المجموعة إلا إذا كانت جميع الاختبارات في Login تم اجتياز المجموعة بنجاح.
فهو مفيد بشكل خاص في اختبار التكامل، حيث تعتمد الوحدات على التنفيذ الناجح للوحدات الأخرى (على سبيل المثال، تسجيل الدخول → الملف الشخصي → عملية تسجيل الخروج).
25) كيف يمكنك تجاهل بعض أساليب الاختبار في TestNG ملف XML؟
يمكنك صراحة استبعاد الطرق ضمن فئة في ملف مجموعة XML باستخدام <exclude> العلامات.
على سبيل المثال:
<class name="com.test.LoginTests">
<methods>
<exclude name="verifyLogout"/>
</methods>
</class>
هذا يسمح للمختبرين بـ تعطيل طرق محددة مؤقتًا بدون تعديل Java شفرة المصدر - مفيدة في المجموعات الكبيرة حيث تكون هناك حاجة إلى الإدراج أو الاستبعاد الديناميكي بناءً على دورات الإصدار أو أولويات السبرنت.
26) كيف يمكن TestNG أن تكون متكاملة مع Selenium برنامج تشغيل الويب؟
TestNG و Selenium يشكلان مزيجًا قويًا لأتمتة واجهة المستخدم.
يتضمن إعداد التكامل النموذجي تنظيم الاختبارات باستخدام التعليقات التوضيحية، وإدارة الإعداد/الإزالة، وتشغيل الاختبارات عبر XML أو أدوات التكامل المستمر.
على سبيل المثال:
@BeforeMethod
public void setup() {
driver = new ChromeDriver();
}
@Test
public void verifyTitle() {
driver.get("https://example.com");
Assert.assertEquals(driver.getTitle(), "Example Domain");
}
@AfterMethod
public void teardown() {
driver.quit();
}
فوائد التكامل:
- تمكن اختبار المتصفحات المتوازية.
- يبسط مجموعة الاختباراتping وإعداد التقارير.
- يعمل بسلاسة مع ملفات خطوط أنابيب CI / CD مثل Jenkins أو GitHub Actions.
27) ما هي بعض أفضل الممارسات عند استخدام TestNG في أطر الأتمتة الكبيرة؟
أفضل الممارسات:
- استعمل Descriptتسمية الكائنات الحية: قم بتسمية الاختبارات بناءً على السلوك، وليس على التنفيذ.
- الاستفادة من المجموعةping: إنشاء مجموعات اختبار منطقية (اختبار الدخان، اختبار الانحدار).
- تجنب البرمجة الثابتة: استخدم المعلمات أو ملفات الخصائص لبيانات الاختبار.
- تقليل التبعيات: حافظ على استقلالية حالات الاختبار قدر الإمكان.
- مركزية التكوين: استعمل
testng.xmlلإعداد الجناح. - دمج التقارير: استخدم أدوات الاستماع أو أدوات الطرف الثالث مثل ExtentReports.
- استخدم منطق إعادة المحاولة بحذر: تجنب إخفاء العيوب الحقيقية.
اتباع هذه الخطوات يضمن قابلية التوسع، وسهولة الصيانة، وسهولة القراءة في مجال الأتمتة على مستوى المؤسسات.
28) ما الفرق بين @BeforeTest و @BeforeSuite في TestNG?
| الميزات | @BeforeTest |
@BeforeSuite |
|---|---|---|
| مجال | يتم تشغيلها قبل كل <test> الوسم في XML |
يتم تشغيله مرة واحدة قبل المجموعة بأكملها |
| تردد | عدة مرات (إذا كان هناك أكثر من مرة) <test> كتل) |
مرة واحدة فقط لكل جناح |
| الاستخدام الشائع | تهيئة إعدادات مستوى الاختبار | إنشاء موارد عالمية |
على سبيل المثال:
@BeforeSuite
public void setupSuite() {
System.out.println("Global setup for suite.");
}
@BeforeTest
public void setupTest() {
System.out.println("Setup for each <test> tag.");
}
استعمل @BeforeSuite لـ الإعدادات العامة (مثلاً، اتصال قاعدة البيانات) و @BeforeTest لـ عمليات تهيئة خاصة بالاختبار.
29 علبة TestNG هل يمكن استخدامها لاختبار واجهات برمجة التطبيقات؟ كيف؟
نعم. TestNG يمكن استخدامه بفعالية لـ اختبار API من خلال التكامل مع مكتبات عميل HTTP مثل اطمئن، لا تشغل بالك or عميل HTTP.
على سبيل المثال:
@Test
public void verifyApiResponse() {
Response response = RestAssured.get("https://api.example.com/users");
Assert.assertEquals(response.getStatusCode(), 200);
}
المزايا:
- تمكن التحقق القائم على التأكيد من الاستجابات.
- الدعم المعلمة و الاختبار المبني على البيانات لنقاط نهاية متعددة.
- يولد التقارير المنظمة لأغراض التحقق من صحة واجهة برمجة تطبيقات REST.
من خلال الجمع بين TestNG وبفضل RestAssured، يمكن للمختبرين الحفاظ على إطار عمل موحد للأتمتة لاختبار كل من واجهة المستخدم وواجهة برمجة التطبيقات.
30) كيف يتم تمرير المعاملات من سطر الأوامر في TestNG?
يمكنك تجاوز معلمات XML أثناء التشغيل عن طريق تمرير خصائص النظام باستخدام -D العلم.
مثال على الأمر:
mvn test -Dbrowser=chrome -Denv=staging
Code على سبيل المثال:
@Parameters("browser")
@Test
public void launch(@Optional("firefox") String browser) {
System.out.println("Running on: " + browser);
}
وهذا يتيح اختيار البيئة الديناميكية في مسارات التكامل المستمر/التسليم المستمر دون تغيير ملفات التكوين، مما يعزز مرونة الاختبار.
31) كيف يمكنك التحكم في ترتيب تنفيذ الاختبار في TestNG بدون استخدام الأولويات؟
بدلا من استخدام priority, TestNG يسمح بالتحكم من خلال التبعيات و ترتيب طرق XML.
الأساليب:
- باستخدام
dependsOnMethods: - استخدام تسلسل أساليب XML:
@Test
public void login() { ... }
@Test(dependsOnMethods = "login")
public void verifyDashboard() { ... }
<classes>
<class name="com.test.LoginTests">
<methods>
<include name="login"/>
<include name="verifyDashboard"/>
</methods>
</class>
</classes>
أفضل ممارسة: يفضل استخدام التبعيات المنطقية للتدفقات المعقدة بدلاً من الأولويات الثابتة، مما يضمن مجموعات اختبار قوية وقابلة للصيانة.
32) كيف يمكنك تنفيذ أساليب اختبار محددة من سطر الأوامر في TestNG?
TestNG يسمح تنفيذ الاختبار على مستوى الأسلوب مباشرة من سطر الأوامر باستخدام تكوينات XML أو Maven Surefire.
الخيار الأول: استخدام ملف XML
<class name="com.test.LoginTests">
<methods>
<include name="verifyLogin"/>
</methods>
</class>
الخيار الثاني: أمر Maven
mvn test -Dtest=com.test.LoginTests#verifyLogin
هذا النهج يسمح الإعدام الانتقائي، مفيد لتصحيح أخطاء الطرق الفردية أو التحقق من صحة الوظائف الأساسية أثناء عمليات البناء السريعة.
33) كيف يمكنك تحديد معلمات الاختبارات باستخدام ملف Excel خارجي في TestNG?
تُعدّ عملية تحديد المعلمات باستخدام برنامج Excel شائعة في الأطر القائمة على البيانات حيث تتغير بيانات الاختبار بشكل متكرر.
خطوات التنفيذ:
- استعمل أباتشي POI or JExcel لقراءة بيانات Excel.
- قم بإدخاله في
@DataProviderالأسلوب.
على سبيل المثال:
@DataProvider(name = "excelData")
public Object[][] readExcel() throws Exception {
FileInputStream fis = new FileInputStream("data.xlsx");
XSSFWorkbook wb = new XSSFWorkbook(fis);
XSSFSheet sheet = wb.getSheetAt(0);
Object[][] data = new Object[sheet.getLastRowNum()][2];
for (int i = 0; i < sheet.getLastRowNum(); i++) {
data[i][0] = sheet.getRow(i + 1).getCell(0).getStringCellValue();
data[i][1] = sheet.getRow(i + 1).getCell(1).getStringCellValue();
}
return data;
}
وهذا يسمح بتشغيل نفس طريقة الاختبار مع مجموعات بيانات متعددة من العالم الحقيقي من Excel، مما يزيد من المرونة والتغطية.
34) كيف يمكنك الجري TestNG الاختبارات في Jenkins أو خطوط أنابيب التكامل المستمر/التسليم المستمر؟
TestNG يتكامل بسلاسة مع Jenkins, جيت لاب CI أو إجراءات جيثب من خلال مافن أو Gradle يبني.
خطوات في Jenkins:
- تثبيت إضافة تكامل Maven.
- إنشاء وظيفة حرة أو وظيفة خط أنابيب.
- إضافة
mvn clean testكخطوة بناء. - بعد الانتهاء من عملية البناء، قم بتكوين تقارير HTML:
- دليل التقارير:
test-output - ملف الفهرس:
index.html
- دليل التقارير:
الفوائد :
- يُمكّن من إجراء اختبارات الانحدار الآلية.
- يوفر تشغيلات اختبار مجدولة وتحليلاً للاتجاهات tracملك.
- يضمن تنفيذ الاختبارات بشكل متسق عبر مختلف البيئات.
35) ما هو الغرض من @Parameters وكيف يختلف عن @Optional؟
كلا التعليقين يتعاملان مع تحديد المعلمات لكنهما يخدمان أغراضًا مختلفة.
| الميزات | @Parameters |
@Optional |
|---|---|---|
| الهدف | يمرر المعلمات من ملف XML | يُوفّر قيمة افتراضية في حال عدم وجود المعامل |
| إعلان | يُستخدم مع XML <parameter> |
تم استخدامها داخل طريقة الاختبار |
| سلوك | يُصدر خطأً إذا كانت القيمة مفقودة | يستخدم قيمة احتياطية |
على سبيل المثال:
@Test
@Parameters("browser")
public void runTest(@Optional("chrome") String browser) {
System.out.println("Running on: " + browser);
}
باستخدام @Optional يضمن اختبار الاستقرار عندما تكون إعدادات XML غير مكتملة.
36) كيف تتعامل مع تبعيات الاختبار عبر فئات مختلفة في TestNG?
لإنشاء تبعيات بين الفئات، TestNG يسمح باستخدام dependsOnGroups السمة.
على سبيل المثال:
@Test(groups = "Login")
public void loginTest() { ... }
@Test(groups = "Dashboard", dependsOnGroups = "Login")
public void dashboardTest() { ... }
يساعد هذا النهج في الإدارة تبعيات متعددة الوحدات حيث يمثل كل صنف وحدة نمطية (تسجيل الدخول، لوحة التحكم، الدفع، إلخ).
يضمن ذلك تنفيذ الوحدات التابعة فقط في حالة نجاح الاختبارات المسبقة، مما يحافظ على سلامة الاختبار.
37) ما هي حالات فشل التكوين في TestNGوكيف يمكن التعامل معها؟
تحدث حالات فشل التكوين عند استخدام طرق الإعداد أو الإزالة المُعَلَّمة بـ @Before* or @After* فشل.
يمكن أن تسبب الاختبارات التابعة التي يجب تخطيها، حتى لو كانت تلك الاختبارات صحيحة.
أسباب شائعة:
- تهيئة غير صحيحة لبرنامج تشغيل الويب.
- مشاكل في إعداد قاعدة البيانات أو بيئة التشغيل.
- خطأ في ضبط المعلمات.
الحلول:
- استعمل حاول التقاط الكتل في طرق الإعداد.
- تطبيق
alwaysRun = trueلضمان استمرار عملية التنظيف رغم الأعطال.
على سبيل المثال:
@BeforeMethod(alwaysRun = true)
public void setup() {
// Setup logic
}
يضمن هذا استمرار تنفيذ أساليب التفكيك الخاصة بك، مما يحافظ على استقرار بيئة الاختبار.
38) ما فائدة سمات invocationCount و threadPoolSize في TestNG?
هذه السمات تسمح تنفيذ الاختبارات المتكررة والمتوازية بنفس الطريقة.
على سبيل المثال:
@Test(invocationCount = 5, threadPoolSize = 2)
public void loadTest() {
System.out.println("Running load test...");
}
| السمة | الوصف |
|---|---|
invocationCount |
عدد مرات تنفيذ الدالة |
threadPoolSize |
عدد الخيوط المتزامنة |
حالة الاستخدام: اختبار الأداء، أو التحقق من الاستقرار، أو إعادة إنتاج السلوك غير المستقر في ظل عمليات تشغيل متعددة.
39) كيف يمكنك تشغيل حالات الاختبار الفاشلة فقط في TestNG?
بعد جولة استعراضية، TestNG يُنشئ ملفًا باسم testng-failed.xml في test-output الدليل.
يمكنك إعادة تشغيل الاختبارات الفاشلة فقط عن طريق تنفيذ ما يلي:
java -cp testng.jar org.testng.TestNG test-output/testng-failed.xml
المزايا:
- يوفر الوقت عن طريق التخطيping اجتازت الاختبارات بنجاح.
- يسهل عملية تصحيح الأخطاء في مجموعات البرامج الكبيرة.
- تُستخدم عادةً في مسارات التكامل المستمر لإجراء اختبارات سريعة.
يمكنك أيضًا دمج هذا مع Jenkins استخدام برنامج نصي يُنفذ بعد عملية البناء لإعادة التشغيل.
40) ما هي بعض قيود TestNG وكيف يمكن التخفيف منها؟
على الرغم من متانتها، TestNG له بعض القيود.
| تحديد | استراتيجية التخفيف |
|---|---|
| تعقيد تكوين XML | استخدم التكوين القائم على التعليقات التوضيحية وأدوات الإنشاء |
| التقارير الأصلية المحدودة | قم بدمج ExtentReports أو Allure |
| لا يوجد تحكم مدمج في إعادة المحاولة | تطبيق IRetryAnalyzer |
| مخاوف تتعلق بسلامة الخيوط في عمليات التشغيل المتوازية | استخدم مثيلات WebDriver المحلية للخيوط |
| منحنى التعلم للمبتدئين | الحفاظ على هياكل المشاريع القائمة على القوالب |
من خلال تصميم إطار عمل مناسب وأفضل الممارسات، يمكن تقليل هذه القيود إلى الحد الأدنى، مما يضمن حلول أتمتة مستقرة وقابلة للصيانة.
41) كيف تستخدم المستمعين لتسجيل الأحداث والتقاط لقطات الشاشة في Selenium-TestNG?
المستمعون في TestNG المساعدة في مراقبة تنفيذ الاختبارات وتنفيذ إجراءات مثل تسجيل البيانات، والتقاط لقطات الشاشة، أو الإبلاغ عن النتائج بشكل ديناميكي.
مثال على التنفيذ:
public class ScreenshotListener implements ITestListener {
@Override
public void onTestFailure(ITestResult result) {
WebDriver driver = ((BaseTest) result.getInstance()).getDriver();
File src = ((TakesScreenshot) driver).getScreenshotAs(OutputType.FILE);
FileUtils.copyFile(src, new File("screenshots/" + result.getName() + ".png"));
}
}
الاستخدام:
@Listeners(ScreenshotListener.class)
public class LoginTests extends BaseTest { ... }
الفوائد :
- يلتقط الأعطال تلقائيًا.
- يحسّن عملية تصحيح الأخطاء من خلال الأدلة المرئية.
- يقلل من الجهد اليدوي في حفظ السجلات.
تُعد هذه التقنية بالغة الأهمية في خطوط أنابيب أتمتة التكامل المستمر/التسليم المستمر، وخاصة عند تشخيص عمليات البناء الفاشلة عن بُعد.
42) ما الفرق بين IReporter و ITestListener في TestNG?
| الميزات | IReporter |
ITestListener |
|---|---|---|
| الهدف | يقوم بإنشاء تقارير مخصصة بعد تنفيذ الاختبار | Tracks ويتفاعل مع أحداث اختبار وقت التشغيل |
| استدعاء | بعد اكتمال جميع الاختبارات | خلال دورة حياة الاختبار (البدء، النجاح، الفشل) |
| الناتج | تقارير HTML/XML/JSON | ملفات السجلات، لقطات الشاشة، لوحات المعلومات المباشرة |
| الاستخدام الشائع | تكامل ExtentReports و Allure | التسجيل، ومعالجة الأعطال، وآليات إعادة المحاولة |
على سبيل المثال:
- استعمل
IReporterللبناء تقارير شاملة بعد إتمام الاختبار. - استعمل
ITestListenerلـ تسجيل الأحداث في الوقت الفعلي أو لقطات الشاشة.
يمكن أن يكونوا كذلك الخبرة لبناء أنظمة تحليلية آلية شاملة.
43) كيف تُجري اختبار التوافق بين المتصفحات باستخدام TestNG تكوين XML؟
يضمن اختبار التوافق مع مختلف المتصفحات أن نفس الوظائف تعمل عبر مختلف المتصفحات.
تكوين المثال:
<suite name="CrossBrowserSuite" parallel="tests">
<test name="ChromeTest">
<parameter name="browser" value="chrome"/>
<classes><class name="com.test.LoginTest"/></classes>
</test>
<test name="FirefoxTest">
<parameter name="browser" value="firefox"/>
<classes><class name="com.test.LoginTest"/></classes>
</test>
</suite>
Java Code:
@Parameters("browser")
@BeforeClass
public void setup(String browser) {
if(browser.equalsIgnoreCase("chrome"))
driver = new ChromeDriver();
else if(browser.equalsIgnoreCase("firefox"))
driver = new FirefoxDriver();
}
هذا النهج يمكّن التنفيذ المتوازي على عدة متصفحات، مما يؤدي إلى تسريع تغطية الاختبار عبر المنصات.
44) كيف تقوم بالتكامل؟ TestNG باستخدام Docker أو Selenium شبكة؟
TestNG يتكامل بسلاسة مع دوكفيلد Selenium شبكة لتمكين الاختبار المتوازي الموزع.
الخطوات التالية:
- اقامة Selenium شبكة في Docker باستخدام الرسمية Selenium صورة:
docker run -d -p 4444:4444 --name selenium-grid selenium/standalone-chrome
- تحديث TestNG الإعداد:
- نفّذ مجموعتك عبر Jenkins أو خط أنابيب التكامل المستمر.
DesiredCapabilities caps = new DesiredCapabilities();
caps.setBrowserName("chrome");
driver = new RemoteWebDriver(new URL("http://localhost:4444/wd/hub"), caps);
الفوائد :
- تمكن اختبار متوازي قابل للتوسع.
- يقلل من تكاليف إعداد البيئة.
- يوفر تنفيذ الاختبارات بشكل متسق عبر الحاويات الموزعة.
45) ما الفرق بين التنفيذ المتوازي على مستوى المجموعة، والاختبار، والطريقة في TestNG?
| مستوى | السمة المتوازية | سلوك التنفيذ |
|---|---|---|
| التالي | parallel="suites" |
ينفذ عدة مجموعات من العمليات في وقت واحد |
| اختبار | parallel="tests" |
أشواط <test> الكتل في وقت واحد |
| الفئه | parallel="classes" |
تشغيل فئات الاختبار بالتوازي |
| الأسلوب | parallel="methods" |
ينفذ أساليب الاختبار الفردية بالتوازي |
على سبيل المثال:
<suite name="ParallelTests" parallel="methods" thread-count="3">
<test name="SampleTest">
<classes><class name="com.test.ParallelExample"/></classes>
</test>
</suite>
أفضل ممارسة:استعمل parallel="classes" لتحقيق الاستقرار في Selenium إجراء اختبارات لتجنب تعارضات برامج التشغيل المشتركة.
46) كيف يمكنك مشاركة البيانات بين الاختبارات دون استخدام متغيرات عامة في TestNG?
TestNG ويوفر ITestContext و حقن التبعية لمشاركة البيانات بشكل ديناميكي.
على سبيل المثال:
@Test
public void storeData(ITestContext context) {
context.setAttribute("token", "abc123");
}
@Test(dependsOnMethods = "storeData")
public void useData(ITestContext context) {
String token = (String) context.getAttribute("token");
System.out.println("Using token: " + token);
}
هذا يتجنب المتغيرات الثابتة، ويحافظ على سلامة الخيوط، ويضمن عزل البيانات عبر الاختبارات.
47) كيف تقوم بتسجيل الاختبارات التي تم تخطيها في TestNG?
يمكنك تسجيل الاختبارات التي تم تخطيها باستخدام onTestSkipped() في ITestListener واجهة.
على سبيل المثال:
@Override
public void onTestSkipped(ITestResult result) {
System.out.println("Skipped Test: " + result.getName());
}
أسباب التخطيping:
- فشل الاختبار التابع.
- تخطي مشروطping بواسطة
SkipException. - عدم توفر البيئة.
أفضل ممارسة:
سجل أسباب تخطي السجل والمكدس traces ل tracإمكانية الوصول في تقارير أو لوحات معلومات التحسين المستمر.
48) اشرح كيفية تحديد معلمات اختبارات واجهة برمجة تطبيقات REST باستخدام TestNG وكن مطمئناً.
TestNGالصورة @DataProvider يتكامل بسلاسة مع اطمئن، لا تشغل بالك لضبط معلمات واجهة برمجة التطبيقات (API).
على سبيل المثال:
@DataProvider(name = "apiData")
public Object[][] apiData() {
return new Object[][] {
{"https://api.example.com/users/1"},
{"https://api.example.com/users/2"}
};
}
@Test(dataProvider = "apiData")
public void testApi(String url) {
Response response = RestAssured.get(url);
Assert.assertEquals(response.getStatusCode(), 200);
}
المزايا:
- ينفذ نفس استدعاء واجهة برمجة التطبيقات (API) لنقاط نهاية أو حمولات متعددة.
- يبسط اختبار الانحدار لواجهات برمجة التطبيقات ذات مجموعات الإدخال المتغيرة.
- يتكامل بسلاسة مع أدوات وتقارير التكامل المستمر.
49) كيف يمكنك إنشاء تعليقات توضيحية مخصصة في TestNG هل تبحث عن أنماط اختبار قابلة لإعادة الاستخدام؟
يمكن للتعليقات التوضيحية المخصصة توحيد إعدادات الاختبار المتكررة أو عمليات التحقق.
على سبيل المثال:
@Retention(RetentionPolicy.RUNTIME)
@Target(ElementType.METHOD)
public @interface SmokeTest {
String description() default "Smoke Test";
}
الاستخدام:
@SmokeTest(description="Validating Login Functionality")
@Test
public void loginTest() { ... }
بالإضافة إلى خاصية الانعكاس، يمكنك قراءة هذه التعليقات التوضيحية ديناميكيًا لتجميع الاختبارات أو توجيه التنفيذ المشروط.
تُستخدم هذه التقنية على نطاق واسع في برمجة الإطار الفوقي لبناء اختبارات ذاتية التوثيق.
50) كيف يمكنك الجمع Cucumber و TestNG بالنسبة لأطر الاختبار الهجينة؟
TestNG يمكن أن تعمل كـ مشغل الاختبار لـ Cucumber سيناريوهات BDD، التي توفر إمكانية إعداد التقارير والتوازي بشكل قوي.
مثال على العداء:
@CucumberOptions(
features = "src/test/resources/features",
glue = "stepDefinitions",
plugin = {"pretty", "html:target/cucumber-report.html"}
)
public class RunCucumberTest extends AbstractTestNGCucumberTests { }
المزايا:
- روافع TestNGالصورة التعليقات التوضيحية، والمستمعون، والتقارير.
- الدعم تنفيذ الميزات المتوازية.
- يتكامل مع جذب و تقارير إكستنت بسهولة.
يدمج هذا النهج الهجين سهولة قراءة BDD مع TestNG مرونة، مثالي للأطر المؤسسية.
🔍 أعلى TestNG أسئلة المقابلة مع سيناريوهات واقعية واستجابات استراتيجية
فيما يلي عشرة أمثلة واقعية وذات صلة بالمجال TestNG أسئلة المقابلة مصحوبة بتوقعات واضحة وإجابات نموذجية قوية.
1) هل يمكنك شرح المزايا الرئيسية لاستخدام TestNG مقارنة JUnit?
المتوقع من المرشح: إظهار فهم لـ TestNGميزاته المحسّنة ولماذا يُفضّل استخدامه غالبًا لأتمتة المؤسسات.
مثال للإجابة: "TestNG يوفر العديد من المزايا مثل مرونة تكوين الاختبار، ودعم التنفيذ المتوازي، وأساليب الاختبار التابعة، والاختبار القائم على البيانات باستخدام موفري البيانات، وإعداد التقارير المدمجة. هذه الإمكانيات تجعل TestNG أكثر فعالية لأطر الأتمتة المعقدة التي تتطلب قابلية التوسع.
2) كيف تستخدم؟ TestNG هل يمكن استخدام التعليقات التوضيحية للتحكم في سير تنفيذ الاختبار؟
المتوقع من المرشح: معرفة غرض وترتيب التعليقات التوضيحية.
مثال للإجابة: "TestNG يُقدّم هذا النظام تعليقات توضيحية مثل @BeforeSuite و@BeforeClass و@BeforeMethod و@Test، بالإضافة إلى تعليقات توضيحية مُقابلة لها تُستخدم في إنهاء الاختبارات. تُتيح هذه التعليقات تنظيمًا مُهيكلًا لإعداد الاختبارات وتنظيفها. على سبيل المثال، يتم تنفيذ @BeforeMethod قبل كل دالة اختبار، وهو أمر مفيد لتهيئة حالة المتصفح.
3) صف مشروع أتمتة صعب حيث TestNG لعب دوراً رئيسياً.
المتوقع من المرشح: خبرة عملية في المشاريع وقدرة على شرح حل المشكلات بوضوح.
مثال للإجابة: "في وظيفتي السابقة، عملت على مشروع تطلب إجراء اختبارات انحدار مكثفة عبر بيئات متعددة." TestNGالتنفيذ المتوازي والمجموعةping أتاحت هذه الميزات للفريق تشغيل مجموعات البرامج الحيوية في وقت واحد، مما قلل وقت التنفيذ بشكل كبير مع الحفاظ على الموثوقية.
4) كيف TestNG هل تساعد المجموعات في تنظيم وتنفيذ الاختبارات بكفاءة؟
المتوقع من المرشح: فهم المجموعةping، بما في ذلك آليات التضمين/الاستبعاد.
مثال للإجابة: "المجموعات في TestNG يُتيح ذلك تصنيف حالات الاختبار مثل اختبارات التحقق السريع، واختبارات الانحدار، واختبارات التكامل. باستخدام ملف testng.xml، يُمكنني تشغيل مجموعات اختبار مُحددة، واستبعاد الاختبارات غير المستقرة، وإدارة مجموعات اختبار مُختلفة دون تعديل الكود نفسه.
5) صف موقفًا اضطررت فيه إلى تصحيح الأخطاء. TestNG الاختبارات. ما هي طريقتك؟
المتوقع من المرشح: مهارات التفكير النقدي وحل المشكلات.
مثال للإجابة: "في وظيفة سابقة، واجهت مجموعة من الإخفاقات TestNG ظهرت اختباراتٌ بدت ناجحةً محليًا لكنها فشلت في بيئة التكامل المستمر. قمتُ بتفعيل التسجيل التفصيلي، وراجعتُ ترتيب التنفيذ، واكتشفتُ أن موردًا مشتركًا لم تتم إعادة ضبطه بين الاختبارات. ثم طبّقتُ خطوات إنهاء مناسبة باستخدام @AfterMethod لضمان عزل الاختبارات.
6) كيف تقوم بتطبيق الاختبار القائم على البيانات باستخدام TestNG?
المتوقع من المرشح: فهم موفري البيانات وحالات الاستخدام.
مثال للإجابة: أقوم بإنشاء دالة @DataProvider تُعيد البيانات في مصفوفات كائنات، ثم أربطها بدالة @Test باستخدام سمة dataProvider. هذا يسمح بإجراء عدة تكرارات لنفس الاختبار مع مجموعات إدخال مختلفة، وهو أمر مفيد للتحقق من صحة عمليات إرسال النماذج أو اختلافات حمولة واجهة برمجة التطبيقات.
7) كيف تدير تبعيات الاختبار في TestNG?
المتوقع من المرشح: الاستخدام الصحيح لـ dependsOnMethods أو dependsOnGroups.
مثال للإجابة: "TestNG يُتيح هذا النظام إمكانية تحديد تبعيات الاختبارات من خلال سمات dependsOnMethods و dependsOnGroups. أستخدم التبعيات عندما يجب تنفيذ اختبار ما فقط بعد اكتمال اختبار آخر بنجاح، مثل التحقق من طلب ما بعد إنشائه فقط.
8) صف كيف استخدمت TestNG باستخدام أدوات التكامل المستمر.
المتوقع من المرشح: خبرة عملية في مجال أتمتة خطوط الإنتاج.
مثال للإجابة: "في وظيفتي السابقة، قمت بدمج TestNG مع Jenkins عن طريق تهيئة عملية بناء Maven لإنشاء TestNG تقارير HTML و XML. Jenkins ثم قام الفريق بأرشفة التقارير وعرض النتائج بعد كل دورة بناء. وقد ساعد هذا التكامل الفريق trac"التعامل مع حالات الفشل بسرعة والحفاظ على استقرار الإصدار."
9) أخبرني عن موقف اضطررت فيه للعمل تحت ضغط المواعيد النهائية الضيقة أثناء إدارة مهام أتمتة متعددة.
المتوقع من المرشح: إدارة الوقت والقدرة على تحديد الأولويات.
مثال للإجابة: في وظيفتي الأخيرة، كنت بحاجة إلى تحديث الموجود TestNG قمتُ بإنشاء مجموعات اختبار، بالإضافة إلى إنشاء مجموعات جديدة لإصدار قادم. رتبتُ أولويات المهام بناءً على تأثيرها على الأعمال، وأتمتتُ المناطق الأكثر خطورة أولاً، واستخدمتُ TestNG غروping لعزل الأجزاء المكتملة لمراجعتها مبكراً. وقد ضمن ذلك التسليم في الوقت المحدد دون المساس بالجودة.
10) كيف ستصمم نظامًا قابلاً للتوسع؟ TestNG إطار عمل لتطبيق كبير؟
المتوقع من المرشح: Archiفهم البنية، والأنماط، وأفضل الممارسات.
مثال للإجابة: سأصمم إطار عمل معياري باستخدام نموذج كائن الصفحة، وأدمج TestNG لإدارة التنفيذ، واستخدام موفري البيانات للسيناريوهات القائمة على البيانات. كما أنصح بتهيئة التنفيذ المتوازي، وتوحيد الأدوات المساعدة، وفصل إعدادات التهيئة لضمان بقاء الإطار قابلاً للتوسع والصيانة مع نمو التطبيق.
