一、TestNG断言
TestNG的断言种类很多,包括相等/不相等,true/false、为null/不为null、相同/不相同等。
import org.testng.Assert; # 导入Assert包
Assert.assertEquals();
Assert.assertNotEquals();
Assert.assertTrue();
Assert.assertFalse();
Assert.assertNull();
Assert.assertNotNull();
Assert.assertSame();
Assert.assertNotSame();
二、前后置方法
注解 | 描述 |
---|---|
@BeforeSuite | 在该套件的所有测试都运行在注释的方法之前,仅运行一次 |
@AfterSuite | 在该套件的所有测试都运行在注释方法之后,仅运行一次 |
@BeforeTest | 注释的方法将在属于test标签内的类的所有测试方法运行之前运行 |
@AfterTest | 注释的方法将在属于test标签内的类的所有测试方法运行之后运行 |
@BeforeClass | 在调用当前类的第一个测试方法之前运行,注释方法仅运行一次 |
@AfterClass | 在调用当前类的第一个测试方法之后运行,注释方法仅运行一次 |
@BeforeMethod | 注释方法将在每个测试方法之前运行 |
@AfterMethod | 注释方法将在每个测试方法之后运行 |
@Test | 将类或方法标记为测试的一部分,此标记若放在类上,则该类所有公共方法都将被作为测试方法 |
前后置方法的执行顺序示例:
import org.testng.Assert;
import org.testng.annotations.*;
public class NewTest {
@Test(groups="group1")
public void test1() {
System.out.println("test1 from group1");
Assert.assertTrue(true);
}
@Test(groups="group1")
public void test11() {
System.out.println("test11 from group1");
Assert.assertTrue(true);
}
@Test(groups="group2")
public void test2()
{
System.out.println("test2 from group2");
Assert.assertTrue(true);
}
@BeforeTest
public void beforeTest()
{
System.out.println("beforeTest");
}
@AfterTest
public void afterTest()
{
System.out.println("afterTest");
}
@BeforeClass
public void beforeClass()
{
System.out.println("beforeClass");
}
@AfterClass
public void afterClass()
{
System.out.println("afterClass");
}
@BeforeSuite
public void beforeSuite()
{
System.out.println("beforeSuite");
}
@AfterSuite
public void afterSuite()
{
System.out.println("afterSuite");
}
//只对group1有效,即test1和test11
@BeforeGroups(groups="group1")
public void beforeGroups()
{
System.out.println("beforeGroups");
}
//只对group1有效,即test1和test11
@AfterGroups(groups="group1")
public void afterGroups()
{
System.out.println("afterGroups");
}
@BeforeMethod
public void beforeMethod()
{
System.out.println("beforeMethod");
}
@AfterMethod
public void afterMethod()
{
System.out.println("afterMethod");
}
}
运行结果如下:
对照前面的说明应该就可以能比较明白了。
三、分组测试
1.分组测试步骤
第一步:把测试类或测试用例方法分组,一个方法可以属于多个不同的分组
@Test(groups = {"group1","group33"})
# 第二步:使用BeforeGroups添加分组执行前的方法
@BeforeGroups(groups="group1")
@AfterGroups(groups="group1")
第二步:在testng.xml文件中添加分组执行代码
第三步:右键执行上面的示例代码的testng.xml文件(示例代码已经分组)
如上图,只执行了group1组的测试用例。
2.BeforeGroups和AfterGroups注释
@BeforeGroups | 配置方法将在之前运行组列表。 此方法保证在调用属于这些组中的任何一个的第一个测试方法之前不久运行 |
@AfterGroups | 此配置方法将在之后运行组列表。该方法保证在调用属于任何这些组的最后一个测试方法之后不久运行 |
注释掉示例代码中的BeforeGroups和AfterGroups修改的方法,就不执行了。
四、分suite测试
测试套件是用于测试软件程序的行为或一组行为的测试用例的集合。 在TestNG中,我们无法在测试源代码中定义一个套件,但它可以由一个XML文件表示,因为套件是执行的功能。 它还允许灵活配置要运行的测试。 套件可以包含一个或多个测试,并由<suite>
标记定义。<suite>
是testng.xml的根标记。 它描述了一个测试套件,它又由几个<test>
部分组成。
下表列出了<suite>
接受的所有定义的合法属性。
属性 | 描述 |
---|---|
name | 套件的名称,这是一个强制属性 |
verbose | 运行的级别或详细程度,级别为0-10,其中10最详细 |
parallel | TestNG是否运行不同的线程来运行这个套件,默认为none,其他级别为methods、tests、classes、instances |
thread-count | 如果启用并行模式(忽略其他方式),则为使用的线程数 |
annotations | 在测试中使用的注释类型 |
time-out | 在本测试中的所有测试方法上使用的默认超时 |
五、@Test()属性设置
1.预期异常测试
预期异常测试通过在@Test注解后加入预期的Exception
来进行添加
@Test(expectedExceptions = ArithmeticException.class)
public void divisionWithException() {
int i = 1 / 0;
System.out.println("After division the value of i is :"+ i);
}
2.忽略测试
有时候我们写的用例没准备好,或者该次测试不想运行此用例,那么删掉显然不明智,那么就可以通过注解@Test(enabled = false)
来将其忽略掉,此用例就不会运行了,如下范例:
import org.testng.annotations.Test;
public class TestCase1 {
@Test(enabled=false)
public void TestNgLearn1() {
System.out.println("this is TestNG test case1");
}
@Test
public void TestNgLearn2() {
System.out.println("this is TestNG test case2");
}
}
运行结果:
this is TestNG test case2
PASSED: TestNgLearn2
3.超时测试
“超时”表示如果单元测试花费的时间超过指定的毫秒数,那么TestNG将会中止它并将其标记为失败。此项常用于性能测试。@Test(timeOut = 5000)
4.依赖测试
@Test(dependsOnGroups= {"TestNgLearn1"})
依赖分组,且为hard依赖
@Test(dependsOnMethods= {"TestNgLearn1"}, alwaysRun=true)
依赖方法,且为soft依赖