zoukankan      html  css  js  c++  java
  • 自动化测试面试关于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("大牛测试", "大牛测试", "比较值");  }
    • 以上列举方法,面试中经常问,更多请关注公众号号“大牛测试”,有免费视频

    欢迎加入交流群:Selenium学习群: 628908894
  • 相关阅读:
    曹工说Spring Boot源码(18)-- Spring AOP源码分析三部曲,终于快讲完了 (aop:config完整解析【下】)
    曹工说Spring Boot源码(17)-- Spring从xml文件里到底得到了什么(aop:config完整解析【中】)
    曹工说Spring Boot源码(16)-- Spring从xml文件里到底得到了什么(aop:config完整解析【上】)
    曹工说Spring Boot源码(15)-- Spring从xml文件里到底得到了什么(context:load-time-weaver 完整解析)
    期货
    手机像素密度的计算公式
    线性代数第一讲 行列式01
    matlab找出某个元素的位置序号
    《树先生》影评
    当你的才华还不足以支撑起你的野心时,你就该静下心来学习
  • 原文地址:https://www.cnblogs.com/tim2016/p/15261713.html
Copyright © 2011-2022 走看看