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、指定运行的测试包
<suite name="测试套件" verbose="1" >
<test name="简单测试">
<packages>
<package name="testng_test"/>
</packages>
</test>
</suite>
2、指定运行的测试类
<suite name="测试套件" verbose="1" >
<test name="简单测试">
<classes>
<class name="testng_test.FirstTest"/>
<class name="testng_test.FixtureTest"/>
</classes>
</test>
</suite>
3、指定运行的测试用例
<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标签来配置执行哪些用例
<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
<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);
}
}