自動化測試面試關於TestNg用法


 在Java自動化測試中,面試官經常會出關於TestNg問題,本篇將分析面試中高頻問題:

   TestNg概念:

  •  testNG代表”測試下一代”。它是用於Java編程語言的自動化測試框架, 是從JUnit框架得到啟發而來的。TestNG不僅包含JUnit框架的所有功能, 還包含一些其他功能, 這些功能使TestNG更加強大。

  • 常用注解

     

 

  •     BeforeTest

        表示注釋下的方法將在屬於該文件夾的任何測試之前首先執行,一般用於初        始化數據,准備測試環境等操作

  

@BeforeTest  
public void Before()
 {    System.out.println("測試之前");  }

 

 

  •     AfterTest

 表示帶注釋的方法下的測試方法是在所有可用類的測試方法執行后執行,用於結束驅動,銷毀驅動等操作

@AfterTest  
public void After()
 {    System.out.println("測試結束");  }

 

 

 

 

  •     AfterMethod

    表示在測試前運行

  • @AfterMethod  public void After() 
    {    System.out.println("測試結束");

     

  •     BeforeMethod

    表示在測試后運行

     

    @BeforeMethod  
    public void Before() 
    {    System.out.println("測試之前");  }

     

     

  • 注意:與AfterTest、BeforeTest不同,Method作用於測試方法,所以運行了兩次。

  •     BeforeSuite

    在test suite中的所有test運行之前運行,只運行一次;

      @BeforeSuite 
     public void Before()
     {    System.out.println("測試套件之前");  }

     

  •     AfterSuite

    在test suite中的所有test運行之后運行,只運行一次。

 

    套件代碼:

  •  //方法
  • @BeforeSuite  
    public void Before()
     {    System.out.println("測試套件之前");  } 
    
     @AfterSuite  
    public void After() 
    {    System.out.println("測試套件結束");  }

     

    xml文件

     

    <suite name="Suite1" parallel="tests" > 
       <test name="test12">    
     <classes>           
     <class name="part_2.Test_01"/>     
       </classes>        
       </test>     
    <test name="test13">   
      <classes>          
      <class name="part_2.Test_9"/>      
      </classes>      
       </test>  
      </suite>
    運行后:
    

      

     

     

  • Test

    具體的測試方法

     

     @Test  
    public void test_01() {       
    Assert.assertEquals("測試", "大牛測試", "比較值");  
    //實際值、預期的  //  
    Assert.assertEquals(actual, expected);  }  
    @Test  
    public void test_02() 
    {    Assert.assertEquals("大牛測試開發", "大牛測試開發", "比較值");  }   @Test  
    public void test_03() 
    {    //true,false    
    Assert.assertTrue(true);  }

     

Test中還可增加參數,如

@Test(invocationCount=5)其中invocationCount為執行次數

@Test(enabled=false)  false為不可用

 

  • 運行方式

    通過testng test運行,右鍵->TestNG Test

     

     

     

    通過test.xml運行

    選中所需運行的testng.xml文件,右鍵TestNg Suite運行

     

     

     

     

     

  • 依賴執行  如下執行test_01之前需先執行test_02

    例:

     

  •   String i="c"; 
     //執行條件  
    @Test(dependsOnMethods= {"test_02"}) 
     public void test_01() {  
      System.out.println(i);   
     System.out.println("test01"); 
     }  
    @Test    
    public void test_02() 
    {    i="d";    System.out.println(i);   
     System.out.println("test02");    }

     

 

  • 多線程執行

    多線程執行時,需現在testng文件中配置線程,以下配置實現:一個腳本同時並發執行

     

     

     

    <?xml version="1.0" encoding="UTF-8"?><!DOCTYPE suite SYSTEM "http://testng.org/testng-1.0.dtd" >
    <suite name="Suite1" parallel="tests" thread-count="2">   
     <test name="test12">   
     <parameter name="webdriver" value="webdriver.chrome.driver"/>    <parameter name="path" value="C:/Python3/chromedriver.exe"/>    
    <classes>          
      <class name="part_2.Test_05"/>      
      </classes>   
     </test>    
     <test name="test13">   
     <parameter name="webdriver" value="webdriver.gecko.driver"/>   
     <parameter name="path" value="D:\se\\dr\\geckodriver.exe"/> 
       <classes>            
    <class name="part_2.Test_05"/>      
      </classes>        
      </test>     
    </suite>
    

      

  • 測試代碼:

     

     @Test  
    @Parameters({"webdriver","path"})  
    public void test_02(String webdriver,String path) throws InterruptedException 
    {    System.setProperty(webdriver, path);   
    if(webdriver.contains("chrome")) { driver = new ChromeDriver(); } else {
    driver = new FirefoxDriver(); }
    driver.get("https://www.baidu.com/");
    driver.findElement(By.id("kw")).sendKeys("test"); }

     

 

  • DataProvider參數化

     

    @DataProvider()   
     public Object[][] user() { //Object數組可以存儲不同類型數據        return new Object[][]{           
         {"timtest", "timtest"},                
    {"tim2", "1234"},         
           {"tim3", "tim3"}        };    }
      @BeforeTest  public void Before() {   
     System.out.println("測試之前");  }
      @Test(dataProvider="user") 
     public void test_01(String username,String passwd) {    Assert.assertEquals(username, passwd, "比較tim的值");  }

     

  • 冒煙測試  僅運行標記為smoke用例
  • 代碼如下:

     

    xml文件配置

     

    <suite name="Suite1">   
       <groups>     
     <run>    
      <include name="smoke"/>  
        </run>    
      </groups>
        <test name="test12">  
          <classes>        
        <class name="part_2.Test_03"/>          
        </classes>  
      </test></suite>
    

      

     

    代碼如下:

     @Test  
    public void test_01() {    
    Assert.assertEquals("測試開發", "高薪必備", "比較值");    
    }  //冒煙測試  
    @Test(groups= {"smoke"})  
    public void test_02() {    
    Assert.assertEquals("大牛測試", "大牛測試", "比較值");  }

     

  •  

  • 以上列舉方法,面試中經常問,更多請關注公眾號號“大牛測試”,有免費視頻


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM