TestNg使用

1、第一个测试用例
    下面代码块中,@Test注释一个方法为测试用例,assertEquals(2+2, 4)来判断两个值是否相等
package testng_test;
import org.testng.annotations.Test;
import static org.testng.AssertJUnit.assertEquals;
public class FirstTest {
    @Test
    public void testCase(){
        assertEquals(2+2, 4);
    }
}
2、TestNg注释说明
    @BeforeSuite:注解的方法在测试套件(中的所有用例)开始前运行一次
    @AfterSuite:注解的方法在测试套件(中的所有用例)结束后运行一次。
    @BeforeClass:注解的方法在当前测试类(中所有用例)开始前运行一次。
    @AfterClass:注解的方法在当前测试类(中所有用例)结束后运行一次。
    @BeforeTest:对于套件测试,在运行属于标签内的类的所有测试方法之前运行。
    @AfterTest:对于套件测试,在运行属于标签内的类的所有测试方法之后运行。
    @BeforeGroups:在调用属于该组的所有测试方法之前运行。
    @AfterGroups:在调用属于该组的所有测试方法之后运行。
    @BeforeMethod:注解的方法将在每个测试方法之前运行。
    @AfterMethod:注释的方法将在每个测试方法之后执行。
    如下代码块中使用了BeforeClass、AfterClass、BeforeMethod和AfterMethod等注解
package testng_test;
import org.testng.annotations.*;
public class FixtureTest {
    //在当前测试类开始时运行。
    @BeforeClass
    public static void beforeClass(){
        System.out.println("-------------------beforeClass");
    }
    //在当前测试类结束时运行。
    @AfterClass
    public static void afterClass(){
        System.out.println("-------------------afterClass");
    }
    //每个测试方法运行之前运行
    @BeforeMethod
    public void before(){
        System.out.println("=====beforeMethod");
    }
    //每个测试方法运行之后运行
    @AfterMethod
    public void after(){
        System.out.println("=====afterMethod");
    }
    @Test
    public void testCase1(){
        System.out.println("test case 1");
    }
    @Test
    public void testCase2(){
        System.out.println("test case 2");
    }
}
3、testng.xml文件的使用
    testng可以通过testng.xml文件来配置测试用例的执行。
    1、指定运行的测试包
<!DOCTYPE suite SYSTEM " http://testng.org/testng-1.0.dtd " >
<suite name="测试套件" verbose="1" >
    <test name="简单测试">
        <packages>
            <package name="testng_test"/>
        </packages>
    </test>
</suite>
    2、指定运行的测试类
<!DOCTYPE suite SYSTEM " http://testng.org/testng-1.0.dtd " >
<suite name="测试套件" verbose="1" >
    <test name="简单测试">
        <classes>
            <class name="testng_test.FirstTest"/>
            <class name="testng_test.FixtureTest"/>
        </classes>
    </test>
</suite>
    3、指定运行的测试用例
<!DOCTYPE suite SYSTEM " http://testng.org/testng-1.0.dtd " >
<suite name="测试套件" verbose="1" >
    <test name="简单测试">
        <classes>
            <class name="testng_test.FixtureTest">
              <methods>
                     <include name="testCase1"></include>
                     <include name="testCase2"></include>
              </methods>
            </class>
        </classes>
    </test>
</suite>
    4、说明
        <suite>...</suite>表示是一个测试套件
            name:表示测试套件的名称
            verbose:定义命令行信息打印等级(1|2|3|4|5)
        <test>...</test>表示定义了一个测试
            name:定义测试的名称
        <packages>...</packages>定义一组测试包
        <package .../>定义一个测试包
            name:表示测试包的名称
        <classes>...</classes>表示定义一组测试类
        <class .../>表示定义一个测试类
            name:表示测试类的名称
        <methods>...</methods>定义一组测试方法
        <include .../>定义一个测试用例
            name:表示测试用例的名称
4、TestNg用例分组
package testng_test;
import org.testng.annotations.Test;
import static org.testng.AssertJUnit.assertEquals;
@Test(groups = {"功能测试"})
public class TagTest {
    @Test(groups={"高", "正常"})
    public void testCase1(){
        assertEquals(2+2, 4);
    }
    @Test(groups = {"高", "正常"})
    public void testCase2(){
        assertEquals(5-3, 2);
    }
    @Test(groups = {"中", "正常"})
    public void testCase3(){
        assertEquals(2/1, 2);
    }
    @Test(groups = {"低", "异常"})
    public void testCase4(){
        assertEquals(2/0, 1);
    }
}
在测试类中通过groups来定义标签,然后testng.xml中通过groups标签来配置执行哪些用例
<!DOCTYPE suite SYSTEM " http://testng.org/testng-1.0.dtd " >
<suite name="测试套件" verbose="1" >
    <test name="简单测试">
        <groups>
            <run>
                <exclude name="异常"  />   <!-- 排除不执行的测试用例 -->
                <include name="功能测试"  />  <!-- 指定执行的测试用例 -->
            </run>
        </groups>
        <classes>
            <class name="testng_test.TagTest"/>
        </classes>
    </test>
</suite>
5、用例执行顺序
    可以在testng.xml中配置用例执行顺序,如果preserve-order标签为true,则按照methods中的用例顺序来执行,如果为false,会默认按照名称的顺序来执行,不设置的情况下默认为true
<!DOCTYPE suite SYSTEM " http://testng.org/testng-1.0.dtd " >
<suite name="测试套件">
    <test name="简单测试" preserve-order="true">
        <classes>
            <class name="testng_test.CaseRunTest">
                <methods>
                    <include name="testCase3" />
                    <include name="testCase1" />
                    <include name="testCase2" />
                </methods>
            </class>
        </classes>
    </test>
</suite>
6、用例依赖
    1、测试方法依赖
        dependsOnMethods 来设置用例的依赖,当 testAdd1() 运行失败时,则 testAdd2() 不再被执行。
package testng_test;
import org.testng.annotations.Test;
import static org.testng.AssertJUnit.assertEquals;
public class DependentMethodsTest {
    @Test
    public void testAdd1(){
        assertEquals(3+1, 5);
    }
    @Test(dependsOnMethods = {"testAdd1"})
    public void testAdd2(){
        assertEquals(3+2, 5);
    }
}
    2、测试组依赖
        dependsOnGroups 来设置组的依赖,testAdd1()和 testAdd2() 同属于于 funtest组,testAdd3()依赖于funtest组,该组有中有一条用例运行失败,则testAdd3() 不再执行。
package testng_test;
import org.testng.annotations.Test;
import static org.testng.AssertJUnit.assertEquals;
public class DependentGroupsTest {
    @Test(groups={"funtest"})
    public void testAdd1(){
        assertEquals(3+1, 5);
    }
    @Test(groups={"funtest"})
    public void testAdd2(){
        assertEquals(3+2, 5);
    }
    @Test(dependsOnGroups = {"funtest"})
    public void testAdd3(){
        assertEquals(3+2, 5);
    }
}


猜你喜欢

转载自blog.csdn.net/hxy199421/article/details/81032672
今日推荐