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" وينفذهما وفقًا لذلك.

الجمع بين الأساليب ذات الأولوية (التي لها نفس الأولوية) والطرق غير ذات الأولوية

في هذه الحالة، سنغطي حالتين في فئة اختبار واحدة.

  1. الطرق التي لها نفس قيمة الأولوية.
  2. أكثر من طريقة غير ذات أولوية.
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

خاتمة

كما رأيت أنه إذا كانت هناك حاجة لتشغيل مجموعة من حالات الاختبار في تسلسل محدد، فيمكن القيام بذلك بسهولة باستخدام درجة الأهمية استخدام testNG كأداة تشغيل.

أصبح هذا البرنامج التعليمي ممكنًا بفضل مساهمات رامانديب سينغ وراما Krishna جادي

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