กลุ่มการทดสอบ – รวมและไม่รวม (ตัวอย่าง)

TestNG เป็นกรอบการทดสอบที่ครอบคลุมการออกแบบการทดสอบประเภทต่างๆ เช่น การทดสอบหน่วย ฟังก์ชันการทำงาน จากต้นทางถึงปลายทาง UI และการทดสอบบูรณาการ

คุณสามารถรันแพ็คเกจเดียวหรือหลายแพ็คเกจได้ (แพ็คเกจในที่นี้หมายถึงการห่อหุ้มกลุ่มคลาสในรูปแบบไดเร็กทอรีที่เหมาะสม) โดยการสร้าง XML และรันผ่าน maven

TestNG กลุ่มที่มีตัวอย่าง

เราใช้กลุ่มใน ทดสอบ เมื่อไหร่,

  • เราไม่ต้องการกำหนดวิธีทดสอบแยกกันในคลาสที่แตกต่างกัน (ขึ้นอยู่กับฟังก์ชันการทำงาน) และ
  • ในเวลาเดียวกันต้องการละเว้น (ไม่ดำเนินการ) กรณีทดสอบบางกรณีราวกับว่าไม่มีอยู่ในโค้ด
  • ในการดำเนินการนี้ เราจะต้องจัดกลุ่มข้อมูลเหล่านี้ ซึ่งทำได้โดยใช้กลไก "รวม" และ "แยก" ที่รองรับใน testNG

ในตัวอย่างด้านล่าง เราได้แสดงไวยากรณ์ของวิธีใช้กลุ่มในไฟล์ XML

@Test (groups = { "bonding", "strong_ties" })

เราใช้ชื่อกลุ่ม 2 ชื่อ คือ “bonding” และ “strong_ties” (ซึ่งเป็นชื่อตรรกะที่คุณสามารถเปลี่ยนแปลงได้ตามความต้องการ)

<groups> แท็ก กำหนดการเริ่มต้นของกลุ่มใน XML

ปรับแต่ง XML ของคุณเพื่อเลือกกลุ่มที่กล่าวถึงจากคลาสทดสอบ ด้านล่างนี้เป็นไวยากรณ์ของวิธีการประกาศกลุ่มในไฟล์ XML เช่น

 <groups>		
   <run>		
    <include name="bonding" />		
   </run>		
  </groups>		

ดังนั้น ให้เราสมมติว่ามีวิธีการทดสอบ 10 วิธีในชั้นเรียน

จากพวกเขา

  • 6 วิธีการติดแท็กในกลุ่ม "พันธะ" และ
  • 4 อยู่ในกลุ่ม “strong_ties”

ต่อไปเราจะมาตั้ง Maven/Java เส้นทางและการใช้งาน Eclipse IDE เพื่อสาธิตการใช้งานกลุ่มโดยใช้ไฟล์ XML Java โครงการ Maven พื้นฐาน

สร้าง XML สำหรับ TestNG พร้อมแท็ก

  • ไฟล์ XML (Extensible Markup Language) ในกรอบงาน Maven มีข้อมูลของการทดสอบอย่างน้อยหนึ่งรายการและถูกกำหนดโดย แท็ก.
  • ข้อมูลการทดสอบในรูปแบบ XML แสดงโดย แท็ก และสามารถมีได้ตั้งแต่หนึ่งรายการขึ้นไป TestNG ชั้นเรียน
  • A Java คลาสที่ประกอบด้วย @ทดสอบ คำอธิบายประกอบเหนือวิธีการทดสอบถูกกำหนดให้เป็น TestNG วิธีการ

มีการใช้แท็กหลายแท็กในลำดับเพื่อสร้างไฟล์ testNG xml ที่ใช้งานได้ เช่น - และ

  • ประการแรกคือ แท็กซึ่งถือชื่อเชิงตรรกะที่กำหนดข้อมูลเต็มรูปแบบให้กับ testNG รายงานเพื่อสร้างรายงานการดำเนินการ
  • ประการที่สองคือ โปรดทราบว่าเป็นชื่อตรรกะที่เก็บข้อมูลรายงานการดำเนินการทดสอบ เช่น ผ่าน ล้มเหลว ข้ามกรณีทดสอบ และข้อมูลอื่นๆ เช่น เวลารวมในการดำเนินการและข้อมูลกลุ่ม
  • ประการที่สามคือcom.group.guru99.TC_Class1” />, com.group.guru99 เป็นแพ็คเกจที่ใช้ และชื่อคลาสทดสอบคือ TC_Class1
<?xml version="1.0" encoding="UTF-8" ?>	
<!DOCTYPE suite SYSTEM "http://testng.org/testng-1.0.dtd">	
 	<suite name="Suite">	
		<test name="Guru 99 Smoke Test Demo">	
			<groups>	
				<run>	
   					 <include name="strong_ties" />	
        		</run>	
       		</groups>	
			<classes>	
					<class name="com.group.guru99.TC_Class1" />	
           	</classes>	
		</test>	
  </suite>	

เราจะใช้ XML นี้สำหรับวิดีโอที่กำลังจะมาถึงตามที่ระบุไว้ในส่วนด้านล่าง

“ยกเว้น” หรือ “รวม” ใน XML ทดสอบ

สมมติว่าคุณกำลังมองหาการใช้งานกลไกกลุ่มแบบซับซ้อน ดังนั้น testNG XML จึงช่วยอำนวยความสะดวกในการใช้งานเพื่อไม่รวมหรือรวมการทดสอบ

Exclude Tag:  Syntax for exclude tag <exclude name="${TEST_CASE_NAME}" />
Include Tag:  Syntax for include tag <include name="${TEST_CASE_NAME}" />

หมายเหตุ เราสามารถรวม/ไม่รวมกรณีทดสอบหลายกรณีได้ครั้งละครั้ง ซึ่งใช้ได้กับ Groups ด้วยเช่นกัน

วิ่ง TestNG กลุ่ม รวม ไม่รวมโค้ด (วิดีโอสาธิต)

คำอธิบายของ Java รหัสและ XML ด้วย กลุ่ม ยกเว้น และรวมไว้ด้วย แท็กใน XML

สถานการณ์ทดสอบ: เปิดตัวเว็บไซต์ธนาคารสาธิต Guru99 ยืนยันบางสิ่งในหน้าเข้าสู่ระบบหลังจากนั้น ป้อนข้อมูลประจำตัว และยืนยันสิ่งใหม่บางอย่างในแอปพลิเคชันอีกครั้งเมื่อเข้าสู่ระบบ

วิ่ง TestNG กลุ่ม รวม ไม่รวมโค้ด

หมายเหตุ แต่ละขั้นตอนที่คุณโค้ดควรได้รับการประกาศในวิธีที่แยกจากกัน แต่เมื่อดำเนินการแล้ว ก็จะดำเนินการวิธีทดสอบโดยขึ้นอยู่กับรายการในไฟล์ XML

  • 1 วิธี: เริ่มต้นเบราว์เซอร์และ URL เปิดใช้งาน (tc01LaunchURL())
  • 2 วิธี: ตรวจสอบส่วนหัวของหน้าเข้าสู่ระบบ (tc02VerifyLaunchPage())
  • 3 วิธี: กรอกชื่อผู้ใช้และรหัสผ่านในแบบฟอร์มเข้าสู่ระบบ (tc03EnterCredentials())
  • 4 วิธี: ตรวจสอบการมีอยู่ของ Manager ID บน User Dashboard (tc04VerifyLoggedInPage())
  • 5 วิธี: ตรวจสอบลิงก์เพิ่มเติมอีกสองสามรายการบน User DashBoard (tc05VerifyHyperlinks())

รหัสสำหรับสถานการณ์ของเรา:

package com.group.guru99;	

import java.util.concurrent.TimeUnit;	

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 TC_Class1 {	
    public static final WebDriver webDriver = new FirefoxDriver();;	

    String launchPageHeading = "//h3[text()='Guru99 Bank']";	
    final String userName_element = "//input[@name='uid']", password_element = "//input[@name='password']",	
            signIn_element = "//input[@name='btnLogin']";	
    final String userName_value = "mngr28642", password_value = "ydAnate";	
    final String managerID = "//td[contains(text(),'Manger Id')]";	
    final String newCustomer = "//a[@href='addcustomerpage.php']", fundTransfer = "//a[@href='FundTransInput.php']";	

    /**	
     * This test case will initialize the webDriver	
     */	
    @Test(groups = { "bonding", "strong_ties" })	
    public void tc01LaunchURL() {	
        webDriver.manage().window().maximize();	
        webDriver.manage().timeouts().implicitlyWait(20, TimeUnit.SECONDS);	
        webDriver.get("http://www.demo.guru99.com/V4/");	
    }	

    /**	
     * Will check the presence of Heading on Login Page	
     */	
    @Test(groups = { "bonding" })	
    public void tc02VerifyLaunchPage() {	
        Assert.assertTrue(webDriver.findElement(By.xpath(launchPageHeading)).isDisplayed(),	
                "Home Page heading is not displayed");	
        System.out.println("Home Page heading is displayed");	
    }	

    /**	
     * This test case will enter User name, password and will then click on	
     * signIn button	
     */	
    @Test(groups = { "bonding", "strong_ties" })	
    public void 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();	
    }	

    /**	
     * This test case will verify manger's ID presence on DashBoard	
     */	
    @Test(groups = { "strong_ties" })	
    public void tc04VerifyLoggedInPage() {	
        Assert.assertTrue(webDriver.findElement(By.xpath(managerID)).isDisplayed(),	
                "Manager ID label is not displayed");	
        System.out.println("Manger Id label is displayed");	
    }	

    /**	
     * This test case will check the presence of presence of New customer link	
     * And FundTransfer link in Left pannel	
     */	
    @Test(groups = { "bonding" })	
    public void tc05VerifyHyperlinks() {	
        Assert.assertTrue(webDriver.findElement(By.xpath(newCustomer)).isEnabled(),	
                "New customer hyperlink is not displayed");	
        System.out.println("New customer hyperlink is displayed");	

        Assert.assertTrue(webDriver.findElement(By.xpath(fundTransfer)).isEnabled(),	
                "Fund Transfer hyperlink is not displayed");	
        System.out.println("Fund Transfer hyperlink is displayed");	
    }	

}	

โปรดทราบ: ข้อมูลรับรองจะใช้ได้เพียง 20 วันเท่านั้น ดังนั้น หากคุณพยายามเรียกใช้โค้ดบนเครื่องของคุณ คุณอาจพบข้อผิดพลาดเกี่ยวกับข้อมูลรับรองที่ไม่ถูกต้อง

คำอธิบายของรหัส:

ตามที่กล่าวไว้ข้างต้น เราได้สร้างกรณีทดสอบ 5 กรณีสำหรับการดำเนินการแต่ละอย่างในวิธีที่เป็นอิสระ

สำหรับทุกวิธี เราได้เชื่อมโยงพารามิเตอร์กลุ่มกับค่าบางค่า

โดยพื้นฐานแล้ว นี่คือชื่อของกลุ่มที่แตกต่างกัน เช่น “strong_ties” และ “bonding”

  • วิธีการแรกและที่สามถูกแท็กเป็น “bonding” และ “strong_ties” ซึ่งหมายความว่าหาก XML ได้รับการอัปเดตในกลุ่มใดกลุ่มหนึ่ง กรณีทดสอบ จะวิ่ง.
  • วิธีที่สองถูกแท็กเฉพาะกลุ่ม "พันธะ" หมายความว่าหากมีการอัปเดต XML ด้วยกลุ่มพันธะ เฉพาะในกรณีนั้นกรณีการทดสอบนี้จะทำงาน
  • กรณีทดสอบที่สี่ถูกแท็กเป็นกลุ่ม strong_ties ซึ่งหมายความว่ากรณีทดสอบนี้จะรันเฉพาะเมื่อมีการอัปเดต XML ด้วยชื่อกลุ่ม strong_ties เท่านั้น
  • สุดท้ายแต่ไม่ใช่กรณีทดสอบที่ห้าน้อยที่สุดถูกแนบเข้ากับกลุ่มพันธะ ซึ่งหมายความว่ากรณีทดสอบนี้จะรันก็ต่อเมื่อมีการอัพเดต XML ด้วยชื่อกลุ่มพันธะ

โดยรวมแล้วเรามี 4 สถานการณ์;

สถานการณ์จำลอง 1: เราต้องการรันกรณีทดสอบทั้งหมดโดยไม่คำนึงถึงชื่อกลุ่ม ในกรณีนี้ เราจะลบแท็กกลุ่มออกจากการรัน XML

สถานการณ์จำลอง 2: เราต้องการรันการทดสอบบางอย่างที่เกี่ยวข้องกับกลุ่มใดกลุ่มหนึ่งเท่านั้น เช่น strong_ties หรือ bonding โปรดดู:

  • ในวิดีโอนี้ พารามิเตอร์กลุ่มถูกแสดงความคิดเห็นจากการรัน XML ดังนั้นคุณจะเห็นกรณีทดสอบทั้งหมดถูกดำเนินการ
  • ต่อจากวิดีโอ ตอนนี้เราได้รวมชื่อกลุ่มไว้ใน XML แล้ว คุณสามารถดูเฉพาะกรณีทดสอบเฉพาะสำหรับกลุ่มนั้นเท่านั้นที่ทำงานอยู่

สถานการณ์จำลอง 3: เรากำลังใช้กลไก Exclude เพื่อแยกกรณีทดสอบ โปรดดูวิดีโอ

  • คุณจะเห็นว่าเราใช้กรณีทดสอบยกเว้นบางส่วน (tc02) โดยการเขียนชื่อในการรัน XML ในผลลัพธ์สุดท้าย กรณีทดสอบดังกล่าวไม่ทำงาน

สถานการณ์จำลอง 4: สุดท้ายนี้ เรากำลังใช้กลไกการทดสอบรวมเพื่อรวมกรณีการทดสอบ (tc01LaunchURL, tc03EnterCredentials และ tc05VerifyHyperlinks) โปรดดูวิดีโอ

ในวิดีโอนี้ คุณจะเห็นว่ากรณีทดสอบที่กล่าวถึงใน XML กำลังทำงานเฉพาะระหว่างการดำเนินการทดสอบเท่านั้น

กรุณาดาวน์โหลดรหัสจากรหัสสำหรับตัวอย่างข้างต้น -

ดาวน์โหลดโค้ดข้างต้น

สรุป

เราได้เรียนรู้วิธีที่ค่อนข้างใหม่ในการรันกรณีทดสอบโดยใช้ XML ในโครงการ Maven

เราเริ่มต้นด้วยการให้คำแนะนำสั้นๆ เกี่ยวกับ testNG และดำเนินต่อไปด้วยข้อมูลจำเพาะทางเทคนิคฉบับเต็มของกลุ่ม การไม่รวม และการรวม