zoukankan      html  css  js  c++  java
  • TestNg使用指南

    TestNg的基本注解

    注解 描述
    @BeforeSuite 注解的方法将只运行一次,运行所有测试前此套件中。
    @AfterSuite 注解的方法将只运行一次此套件中的所有测试都运行之后。
    @BeforeClass 注解的方法将只运行一次先行先试在当前类中的方法调用。
    @AfterClass 注解的方法将只运行一次后已经运行在当前类中的所有测试方法。
    @BeforeTest 注解的方法将被运行之前的任何测试方法属于内部类的 标签的运行。
    @AfterTest 注解的方法将被运行后,所有的测试方法,属于内部类的标签的运行。
    @BeforeGroups 组的列表,这种配置方法将之前运行。此方法是保证在运行属于任何这些组第一个测试方法,该方法被调用。
    @AfterGroups 组的名单,这种配置方法后,将运行。此方法是保证运行后不久,最后的测试方法,该方法属于任何这些组被调用。
    @BeforeMethod 注解的方法将每个测试方法之前运行。
    @AfterMethod 被注释的方法将被运行后,每个测试方法。
    @DataProvider
    标志着一个方法,提供数据的一个测试方法。注解的方法必须返回一个Object[] [],其中每个对象[]的测试方法的参数列表中可以分配。
    该@Test 方法,希望从这个DataProvider的接收数据,需要使用一个dataProvider名称等于这个注解的名字。
    @Factory 作为一个工厂,返回TestNG的测试类的对象将被用于标记的方法。该方法必须返回Object[]。
    @Listeners 定义一个测试类的监听器。
    @Parameters 介绍如何将参数传递给@Test方法。
    @Test 标记一个类或方法作为测试的一部分。

    TestNg分组测试

    分组测试的应用场景:
    1、在编写测试的过程中,只想执行个别或者某一部分/某一类型的测试用例;
    2、一个类中有多个测试方法只想执行其中的某些方法。
    分组测试在配置时,TestNG执行的原则是:只保留最小集合进行执行
    @Test(groups = {"smoke", "func"})

    <?xml version="1.0" encoding="UTF-8"?>  
    <!DOCTYPE suite SYSTEM "http://testng.org/testng-1.0.dtd">  
    <suite name="framework_testng">  
        <test verbose="2" name="TestGroups">  
            <groups>  
                <run>  
                    <include name="functest" />  
                    <exclude name="checkintest" />  
                </run>  
            </groups>  
            <classes>  
                <class name="com.dragon.testng.annotation.TestngGroups" />  
            </classes>  
        </test>  
    </suite>  
    

    TestNg依赖测试

    测试用例之间的依赖,使用@Test(dependsOnMethods = {"setupEnv"})声明

    TestNg异常测试

    期望某些代码抛出异常则通过。

    使用@Test(expectedExceptions = xxx) 声明,例:@Test(expectedExceptions = {ArithmeticException.class,NullPointerException.class}) 当出现异常中的任意一个类则用例通过。
    同时可以使用正则表达式更精确匹配异常内容,使用@Test(expectedExceptions = xxx, expectedExceptionsMessageRegExp="xxx") 声明,例:@Test(dataProvider = "dp", expectedExceptions= {ArithmeticException.class}, expectedExceptionsMessageRegExp="/ by zero")

    TestNg忽略测试

    使用@Test(enabled = false)声明,忽略测试方法,禁止此测试用例

    TestNg参数化测试

    测试代码逻辑完全一样,只是测试参数不一样,这时需要传递参数的机制,避免重复的测试代码。
    TestNG提供了2种传递参数的方式。

    第一种: testng.xml 方式使代码和测试数据分离,方便维护

    第二种:@DataProvider能够提供比较复杂的参数。 (也叫data-driven testing)

    方法一: 通过testng.xml 传递参数给测试代码

    
    import org.testng.annotations.Parameters;
    import org.testng.annotations.Test;
    public class ParameterizedTest1 {
        @Test
        @Parameters("test1")
        public void ParaTest(String test1){
            System.out.println("This is " + test1);
        }
    }
    testng.xml
    <?xml version="1.0" encoding="UTF-8"?><!DOCTYPE suite SYSTEM "http://testng.org/testng-1.0.dtd" ><suite name="Suite1">
    
            <parameter name="test1" value="Tank" />
            <parameter name="test1" value="Xiao" />
        <test name="test12">
            <classes>
                <class name="TankLearn2.Learn.ParameterizedTest1" />
            </classes>
        </test></suite>
    

    方式二: 通过DataProvider传递参数

    
    import org.testng.annotations.DataProvider;
    import org.testng.annotations.Test;
    public class DataProviderLearn {
        @DataProvider(name="user")
        public Object[][] Users(){
            return new Object[][]{
                    {"root","passowrd"},
                    {"cnblogs.com", "tankxiao"},
                    {"tank","xiao"}
            };
        }
        @Test(dataProvider="user")
        public void verifyUser(String userName, String password){
            System.out.println("Username: "+ userName + " Password: "+ password);
        }
    }
    

    TestNg按顺序执行Case

    在testng.xml中,可以控制测试用例按顺序执行。 当preserve-order="true"是,可以保证节点下面的方法是按顺序执行的

    
    <?xml version="1.0" encoding="UTF-8"?><!DOCTYPE suite SYSTEM "http://testng.org/testng-1.0.dtd" ><suite name="Suite1">
        <test name="test12" preserve-order="true">
            <classes>
                <class name="test.Learn.TestNGLearn1">
                    <methods>
                        <include name="TestNgLearn3" />
                        <include name="TestNgLearn1" />
                        <include name="TestNgLearn2" />
                    </methods>
                </class>
            </classes>
        </test></suite>
    

    TestNg中同一个类中执行多个test()方法在testng.xml中的配置

    public class IndexInfo extends BaseTesting{
    private IndexPage IndexPage1;
    //	private AddEquipmentInfoManagePage AddEquipmentInfoManagePage1;
    protected static final Log log = LogFactory.getLog(IndexPage.class);
    @BeforeClass
    public void beforeClass() throws Exception {
    init(Constants.USER_ADMIN, Constants.PASSWD_ADMIN);
    IndexPage1=new IndexPage(driver);	
    }
    @AfterTest
    public static void tearDownAfterClass() throws Exception {
    if(driver != null)
    {
    driver.quit();
    System.out.println("运行结束");
    
    }
    }	
    @Test(dataProvider = "csvtestLogin1")
    public void testLogin1(String case_num,String username,String password,String msg,String info) throws InterruptedException{
    {
    System.out.println("方法1");
    
    }
    
    @Test(dataProvider = "csvtestLogin2")
    public void testLogin2(String case_num,String username,String password,String msg,String info) throws InterruptedException{
    {
    System.out.println("方法2");
    
    }
    
    

    配置testng.xml文件:

    
    <?xml version="1.0" encoding="UTF-8"?>
    <suite name="Suite" parallel="false">
      <test name="Demo"  >
        <classes>
          <class name="com.sa.test.IndexInfo">
              <methods preserve-order="true">
                  <include name="testLogin1"/>
                  <include name="testLogin2"/>          
              </methods>
          </class>
        </classes>
      </test>
    </suite>
    

    TestNG可以通过priority来设置用例的运行顺序,不写则表示priority为0,即最先执行

  • 相关阅读:
    四则运算02
    第三周学习进度条
    《构建之法》阅读笔记1
    第二周学习进度条
    四则运算01
    第八周进度条
    每日站立会日07,08
    每日站立会议06
    每日站立会议05
    每日站立会议04
  • 原文地址:https://www.cnblogs.com/seamy/p/15649038.html
Copyright © 2011-2022 走看看