自动化测试面试关于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("大牛测试", "大牛测试", "比较值");  }

     

  •  

  • 以上列举方法,面试中经常问,更多请关注公众号号“大牛测试”,有免费视频

posted @ 2021-09-13 11:32  大牛测试技术  阅读(605)  评论(0编辑  收藏  举报