TestNG是一个测试框架,可以简化广泛的测试需求。
- 建立工程
首先我们在idea中应该新建一个project,并选择“maven”,点击下一步(如下图)
填写groupId(一般为包名)和ArtifactId(一般为工程名)
2. 添加依赖
创建成功后:我们需要在pom中添加testng依赖,然后点击自动更新maven
<dependencies><dependency><groupId>org.testng</groupId><artifactId>testng</artifactId><version>6.9.8</version><scope>test</scope></dependency>
</dependencies>
- 代码编写
下面是一个简单的例子:
import org.testng.annotations.Test;
public class Test1 {
@Test
public void test1()
{
System.out.println(“hello testng”);
}
}
- 运行结果
输出如下:我们可以看到用TestNG方式执行,输出内容相对全一些,会显示执行了多少个,失败了多少个,通过了多少个
TestNG相关注释
注释
注释介绍
@BeforeSuite在此套件中的所有测试运行之前,将运行带注释的方法。@AfterSuite在此套件中的所有测试运行后,将运行带注释的方法。@BeforeTest在运行属于<test>标记内的类的任何测试方法之前,将运行带注释的方法。@AfterTest在运行了属于<test>标记内的类的所有测试方法之后,将运行带注释的方法。@BeforeClass在调用当前类中的第一个测试方法之前,将运行带注释的方法。@AfterClass在运行当前类中的所有测试方法之后,将运行带注释的方法。@BeforeMethod每次调用@Test方法之前运行,即执行用例之前进行的初始化@AfterMethod每次调用@Test方法之后运行@DataProvider标志着一个方法,提供数据的一个测试方法。注解的方法必须返回一个Object[] [],其中每个对象[]的测试方法的参数列表中可以分配。该@Test 方法,希望从这个DataProvider的接收数据,需要使用一个dataProvider名称等于这个注解的名字。
@invocationCount
测试用例被调用执行的次数
@threadPoolSize
开启的线程数
TestNG的数据驱动
什么是数据驱动:指的是一个脚本固定的情况下,用数据来控制该脚本是否运行,以及运行的次数,和每次运行时对应的参数
实现方式:@DataProvider
@DataProvider的简单使用(该注释需要定义属性name):
@Test测试用例,属性dataProvider需要指定对应的数据提供者名称
import org.testng.annotations.DataProvider;
import org.testng.annotations.Test;public class Test1 {@DataProvider(name="testcase")public Object[][] dp(){return new Object[][]{{"小红","90"},{"小明","80"}};}@Test(dataProvider = "testcase")public void test1(String n1,String n2){System.out.println(n1 + " " + n2);}
}
这样我们的输出结果如下图:可以看到testcase被执行了2次。
延迟数据提供者:
延迟初始化指的是:当我们获取了一个数据,对他执行测试方法,然后就废弃这个数据对象,在测试下一个对象。
延迟初始化的思想其实指的是当你真正需要一个对象时才创建它,而不是提前去创建它
实现延迟初始化,TestNg允许我们从数据提供者返回一个Iterator对象,而不是一个二维对象数组。
举个简单的例子:
public interface Iterator<E> {boolean hasNext();E next();
}import java.util.Iterator;public class AccoutIterator implements Iterator{private int index = 0;static private final int MAX = 4;@Overridepublic boolean hasNext() {return index<MAX;}@Overridepublic Object next() {return new Object[]{"Hello!"+(index++)};}public void remove() {throw new UnsupportedOperationException("remove");}
}import org.testng.annotations.DataProvider;
import org.testng.annotations.Test;
import java.util.Iterator;
public class Test1 {@DataProvider(name = "iterator")public Iterator<Object[]> iteratorDataProvider(){return new AccoutIterator();}@Test(dataProvider = "iterator")public void test1(String name){System.out.println(name);}}
看看我们的输出结果:
忽略测试
有时候测试用例还没准备好, 可以给测试用例加上@Test(enable = false), 来禁用此测试用例
@Test(enabled = false)
public void test1()
{System.out.println("ignore");
}
依赖测试
如下图,我们test1的运行依赖于test2,所以如果我们只运行test1的话,会先运行依赖的测试用例,在运行自己
import org.testng.annotations.Test;public class Test1 {@Test(dependsOnMethods = {"test2"})public void test1(){System.out.println("我依赖于test2");}@Testpublic void test2(){System.out.println("test2");}
}
运行结果如下图所示:
TestNG官方文档:https://testng.org/doc/documentation-main.html#parameters-testng-xml
TestNG官方文档推荐一个入门级别的TestNG视频教程:http://www.iqiyi.com/w_19rth5swkd.html