TestNG @أولوية الاختبار في Selenium
TestNG هو الاختبار إطار عمل يغطي أنواعًا مختلفة من تصميمات الاختبار مثل اختبار الوحدة والاختبار الوظيفي والاختبار الشامل واختبار واجهة المستخدم واختبار التكامل.
يمكنك تشغيل حالات اختبار واحدة أو متعددة في ملفك تستنج رمز.
إذا لم يتم تحديد أولوية الاختبار أثناء تشغيل حالات اختبار متعددة، TestNG يعين كل @Test أولوية كصفر (0).
الآن، أثناء الجري؛ سيتم جدولة الأولويات الدنيا أولاً.
تجريبي ل TestNG كود بدون أولوية
لنأخذ سيناريو حيث سيكون التسلسل مطلوبًا لاجتياز جميع حالات الاختبار:
السيناريو: قم بإنشاء رمز يتطلب منك تنفيذ Google ابحث باستخدام كلمة مفتاحية محددة، ولتكن "فيسبوك". الآن، تأكد من تغيير عنوان المتصفح إلى "فيسبوك - Google يبحث".
ملاحظة: يجب أن تكون كل خطوة تقوم بترميزها بطرق منفصلة
طريقة 1: فتح المتصفح يقول Firefox (المتصفح المفتوحة())
طريقة 2: يطلق Google.com (إطلاق)Google())
طريقة 3: قم بإجراء بحث باستخدام "Facebook" (performSearchAndClick1stLink())
طريقة 4: يؤكد Google ابحث عن عنوان الصفحة (FaceBookPageTitleVerification())
Code بالنسبة لسيناريونا:
import org.openqa.selenium.By;
import org.openqa.selenium.WebDriver;
import org.openqa.selenium.firefox.FirefoxDriver;
import org.testng.Assert;
import org.testng.annotations.Test;
public class Priority_In_testNG {
WebDriver driver;
// Method 1: Open Brower say Firefox
@Test
public void openBrowser() {
driver = new FirefoxDriver();
}
// Method 2: Launch Google.com
@Test
public void launchGoogle() {
driver.get("http://www.google.co.in");
}
// Method 3: Perform a search using "Facebook"
@Test
public void peformSeachAndClick1stLink() {
driver.findElement(By.xpath(".//*[@title='Search']")).sendKeys("Facebook");
}
// Method 4: Verify Google search page title.
@Test
public void FaceBookPageTitleVerification() throws Exception {
driver.findElement(By.xpath(".//*[@value='Search']")).click();
Thread.sleep(3000);
Assert.assertEquals(driver.getTitle().contains("Facebook - Google Search"), true);
}
}
شرح Code
كما ذكرنا أعلاه، قمنا بإنشاء 4 حالات اختبار لتنفيذ كل إجراء بطرق مستقلة.
- الطريقة الأولى (المتصفح المفتوحة) الدول للتهيئة Firefox المتصفح.
- الطريقة الثانية (يطلقGoogle) الولايات التي تطلق Googleموقع .com موجود في المتصفح المُهيأ.
- الطريقة الثالثة (peformSeachAndClick1stLink)الدول التي تقوم بإجراء بحث في مربع البحث (باستخدام xpath (“.//*[@title='بحث']”) مع مصطلح البحث كما فيسبوك و
- الطريقة الرابعة والأخيرة (التحقق من عنوان صفحة الفيسبوك) تنص على أنه بالنقر على أيقونة البحث الخاصة بـ Google وتأكد من تغيير عنوان المتصفح إلى فيس بوك - Google بحث.
الآن قم بتشغيل هذا الكود باستخدام testNG كما هو موضح في الفيديو ستجد كل ما تحتاجه حالة الاختبار يفشلون. سبب الفشل: نظرًا لوجود تبعية لحالة الاختبار السابقة للنجاح، سيتم اجتياز حالة الاختبار الحالية فقط.
في هذه الحالة،
- الطريقة الأولى التي يتم تنفيذها هي المتصفح المفتوحة(). لقد تم تمريره لأنه ليس لديه أي تبعية.
- الطريقة الثانية المنفذة هي FaceBookPageTitleVerification(); لقد فشل لأننا نحاول النقر فوق زر البحث والتحقق من عنوان المتصفح.
- يمكنك أن ترى أنه إذا لم تتم معالجة نشاط البحث، فكيف يمكن تمرير أي خطوة أخرى. وبالتالي، هذا هو السبب وراء فشل حالات الاختبار الخاصة بي.
PASSED: openBrowser FAILED: FaceBookPageTitleVerification FAILED: launchGoogle FAILED: peformSeachAndClick1stLink
تجريبي ل TestNG الكود بدون الأولوية بالترتيب الأبجدي
إذا لم نذكر أي أولوية، فسوف يقوم testng بتنفيذ طرق @Test بناءً على الترتيب الأبجدي لأسماء طرقها بغض النظر عن مكان تنفيذها في الكود.
package com.guru.testngannotations;
import org.testng.annotations.Test;
public class TestNG_Priority_Annotations {
@Test
public void c_method(){
System.out.println("I'm in method C");
}
@Test
public void b_method(){
System.out.println("I'm in method B");
}
@Test
public void a_method(){
System.out.println("I'm in method A");
}
@Test
public void e_method(){
System.out.println("I'm in method E");
}
@Test
public void d_method(){
System.out.println("I'm in method D");
}
}
الناتج
I'm in method A I'm in method B I'm in method C I'm in method D I'm in method E
على الرغم من أننا قمنا بتعريف الأساليب بطريقة عشوائية (ج، ب، أ، هـ، د)، فقد نفذ الاختبار الأساليب بناءً على أسماء أساليبها من خلال مراعاة الترتيب الأبجدي وانعكس نفس الشيء في الإخراج أيضًا.
كيفية تعيين الأولوية في TestNG
كما رأيت في المثال السابق أن التسلسل مطلوب لتمرير هذا السيناريو، لذلك سنقوم بتعديل الجزء السابق من الكود باستخدام معلمة الأولوية بحيث يجب أن يتعارض كل اختبار مع الأولوية المخصصة لهم.
الآن كما ترون، قمنا بتعيين الأولوية لكل حالة اختبار مما يعني أن حالة الاختبار سيتم تنفيذ قيمة الأولوية الأقل أولاً.
الأولوية في testNG أثناء العمل
import org.openqa.selenium.By;
import org.openqa.selenium.WebDriver;
import org.openqa.selenium.firefox.FirefoxDriver;
import org.testng.Assert;
import org.testng.annotations.Test;
public class Priority_In_testNG {
WebDriver driver;
// Method 1: Open Browser say Firefox
@Test (priority=1)
public void openBrowser() {
driver = new FirefoxDriver();
}
// Method 2: Launch Google.com
@Test (priority=2)
public void launchGoogle() {
driver.get("http://www.google.co.in");
}
// Method 3: Perform a search using "Facebook"
@Test (priority=3)
public void peformSeachAndClick1stLink() {
driver.findElement(By.xpath(".//*[@title='Search']")).sendKeys("Facebook");
}
// Method 4: Verify Google search page title.
@Test (priority=4)
public void FaceBookPageTitleVerification() throws Exception {
driver.findElement(By.xpath(".//*[@value='Search']")).click();
Thread.sleep(3000);
Assert.assertEquals(driver.getTitle().contains("Facebook - Google Search"), true);
}
}
شرح Code
بعد تعيين الأولوية لكل حالات الاختبار، قم بتشغيل الكود أعلاه باستخدام testNG كما هو موضح في الفيديو 2 المذكور أدناه.
هنا، يمكنك أن ترى أن حالات الاختبار لها الأولوية. يتم تنفيذ حالة الاختبار ذات الأولوية الأقل أولاً، أي أنه يوجد الآن تنفيذ تسلسلي وفقًا للأولوية في حالات الاختبار. ومن ثم، فإن جميع حالات الاختبار تمر الآن.
لاحظ وحدة التحكم الخاصة بـ Eclipse:
الناتج :
PASSED: openBrowser PASSED: launchGoogle PASSED: peformSearchAndClick1stLink PASSED: FaceBookPageTitleVerification
الرقم 0 له الأولوية القصوى (سيتم تنفيذه أولاً) وتستمر الأولوية بناءً على الرقم المحدد، أي أن 0 له أولوية أعلى من 1. 1 له أولوية أعلى من 2 وهكذا.
package com.guru.testngannotations;
import org.testng.annotations.Test;
public class TestNG_Priority_Annotations {
@Test(priority=6)
public void c_method(){
System.out.println("I'm in method C");
}
@Test(priority=9)
public void b_method(){
System.out.println("I'm in method B");
}
@Test(priority=1)
public void a_method(){
System.out.println("I'm in method A");
}
@Test(priority=0)
public void e_method(){
System.out.println("I'm in method E");
}
@Test(priority=3)
public void d_method(){
System.out.println("I'm in method D");
}
}
الناتج
I'm in method E I'm in method A I'm in method D I'm in method C I'm in method B
لقد قدمنا هنا الأولويات كـ 0,1,3,6,9،0،1،XNUMX،XNUMX. لذلك، يتم تنفيذ الطريقة ذات الأولوية XNUMX أولاً ثم الطريقة ذات الأولوية XNUMX وهكذا. هنا لن يتم أخذ اسم طريقة الترتيب الأبجدي بعين الاعتبار لأننا قدمنا الأولويات
طرق بنفس الأولوية
قد تكون هناك فرصة لاحتواء الأساليب على نفس الأولوية. في هذه الحالات، يأخذ الاختبار في الاعتبار الترتيب الأبجدي لأسماء الأساليب التي لها نفس الأولوية.
package com.guru.testngannotations;
import org.testng.annotations.Test;
public class TestNG_Priority_Annotations {
@Test(priority=6)
public void c_method(){
System.out.println("I'm in method C");
}
@Test(priority=9)
public void b_method(){
System.out.println("I'm in method B");
}
@Test(priority=6)
public void a_method(){
System.out.println("I'm in method A");
}
@Test(priority=0)
public void e_method(){
System.out.println("I'm in method E");
}
@Test(priority=3)
public void d_method(){
System.out.println("I'm in method D");
}
}
الناتج
I'm in method E I'm in method D I'm in method A I'm in method C I'm in method B
هنا يتم تنفيذ "e" و"d" بناءً على قيم الأولوية الخاصة بهما. ولكن الطرق "a" و"c" تحتويان على نفس قيمة الأولوية (6). لذا، هنا يأخذ testng في الاعتبار الترتيب الأبجدي لـ "a" و"c" وينفذهما وفقًا لذلك.
الجمع بين الأساليب ذات الأولوية (التي لها نفس الأولوية) والطرق غير ذات الأولوية
في هذه الحالة، سنغطي حالتين في فئة اختبار واحدة.
- الطرق التي لها نفس قيمة الأولوية.
- أكثر من طريقة غير ذات أولوية.
package com.guru.testngannotations;
import org.testng.annotations.Test;
public class TestNG_Priority_Annotations {
@Test()
public void c_method(){
System.out.println("I'm in method C");
}
@Test()
public void b_method(){
System.out.println("I'm in method B");
}
@Test(priority=6)
public void a_method(){
System.out.println("I'm in method A");
}
@Test(priority=0)
public void e_method(){
System.out.println("I'm in method E");
}
@Test(priority=6)
public void d_method(){
System.out.println("I'm in method D");
}
}
الإخراج:
I'm in method B I'm in method C I'm in method E I'm in method A I'm in method D
PASSED: b_method PASSED: c_method PASSED: e_method PASSED: a_method PASSED: d_method
التفسير:
التفضيل الأول: الطرق غير ذات الأولوية: 'c' و'b': بناءً على الترتيب الأبجدي، تم تنفيذ 'b' أولاً ثم 'c'.
التفضيل الثاني: الأساليب ذات الأولوية: 'a' و'e' و'd': تم تنفيذ 'e' أولاً لأنها كانت ذات أولوية أعلى (0). ونظرًا لأن أولوية الأساليب 'a' و'd' كانت متماثلة، فقد أخذ الاختبار في الاعتبار الترتيب الأبجدي لأسماء أساليبهما. لذا، بينهما، تم تنفيذ 'a' أولاً ثم 'd'.
حساس لحالة الأحرف في TestNG
لمعلوماتك فقط، يوجد بناء جملة قياسي لتحديد الأولوية في testNG، أي @Test (الأولوية=4)، لنفترض أنك تقوم بتعريفه في بعض تركيبات الجملة الأخرى @اختبار (الأولوية=1) ثم سيُظهره IDE الخاص بك كخطأ في الترجمة. الرجوع الصورة أدناه:
خاتمة
كما رأيت أنه إذا كانت هناك حاجة لتشغيل مجموعة من حالات الاختبار في تسلسل محدد، فيمكن القيام بذلك بسهولة باستخدام درجة الأهمية استخدام testNG كأداة تشغيل.
أصبح هذا البرنامج التعليمي ممكنًا بفضل مساهمات رامانديب سينغ وراما Krishna جادي

