一、Before和After类注解
1、@BeforeSuite、@AfterSuite
2、@BeforeTest、@AfterTest
3、@BeforeClass、@AfterClass
4、@BeforeMethod、@AfterMethod
5、执行顺序:创建TestNGDomr01 TestNGDomr02 两个文件内容一样,看代码执行结果。
import org.testng.annotations.*;
public class TestNGDome01 {
@BeforeSuite
public void BeforeSuite(){
System.out.println(this.getClass().getName()+":@BeforeSuite");
}
@BeforeTest
public void BeforeTest(){
System.out.println(this.getClass().getName()+":@BeforeTest");
}
@BeforeClass
public void BeforeClass(){
System.out.println(this.getClass().getName()+":@BeforeClass");
}
@BeforeMethod
public void BeforeMethod(){
System.out.println(this.getClass().getName()+":@BeforeMethod");
}
@Test
public void Test01(){
System.out.println(this.getClass().getName()+":@Test01");
}
@Test
public void Test02(){
System.out.println(this.getClass().getName()+":@Test02");
}
@AfterMethod
public void AfterMethod(){
System.out.println(this.getClass().getName()+":@AfterMethod");
}
@AfterClass
public void AfterClass(){
System.out.println(this.getClass().getName()+":@AfterClass");
}
@AfterTest
public void AfterTest(){
System.out.println(this.getClass().getName()+":2AfterTes");
}
@AfterSuite
public void AfterSuite(){
System.out.println(this.getClass().getName()+"@AfterSuite");
}
}
//结果
TestNGDome01:@BeforeSuite
TestNGDome02:@BeforeSuite
TestNGDome01:@BeforeTest
TestNGDome02:@BeforeTest
TestNGDome01:@BeforeClass
TestNGDome01:@BeforeMethod
TestNGDome01:@Test01
TestNGDome01:@AfterMethod
TestNGDome01:@BeforeMethod
TestNGDome01:@Test02
TestNGDome01:@AfterMethod
TestNGDome01:@AfterClass
TestNGDome02:@BeforeClass
TestNGDome02:@BeforeMethod
TestNGDome02:@Test01
TestNGDome02:@AfterMethod
TestNGDome02:@BeforeMethod
TestNGDome02:@Test02
TestNGDome02:@AfterMethod
TestNGDome02:@AfterClass
TestNGDome01:@AfterTest
TestNGDome02:@AfterTest
TestNGDome01:@AfterSuite
TestNGDome02:@AfterSuite
===============================================
Suite1
Total tests run: 4, Failures: 0, Skips: 0
===============================================
Process finished with exit code 0
二、@Test的相关属性
1、alwaysRun:如果为ture,表示该测试方法所依赖的测试方法即使失败了也会继续执行。
2、dataProvider:选定传入参数的构造器。
3、dataProviderClass:确定参数构造器的Class类。
4、dependsOnGroups:确定依赖的前置测试组名。
5、dependsOnMethods:确定依赖的前置测试方法。
6、enabled:默认为true,如果指定为false,表示不执行该测试方法。
7、expectedException:指定期待测试方法抛出的异常,多个异常类型以逗号分隔。
8、groups:指定该测试方法所属的组,可以指定多个组,以逗号隔开。
9、invocationCount:指测试方法需要被调用的次数
10、invocationTimeOut:每一次超时的调用时间,单位是毫秒。
11、priority:测试方法优先级设置,数值越低,优先级越高。
12、timeOut:整个测试方法超时时间,单位是毫秒。
三、TestNG参数化
1、@Parameters,配合testng.xml使用,注意需要运行testng.xml文件不然会会报错
import org.testng.annotations.Parameters;
import org.testng.annotations.Test;
public class ParametersTestng {
@Parameters({"first-name"})
@Test
public void test(String name){
System.out.println(name);
}
@Parameters({"first-name","second-name"})
@Test
public void test2(String name1,String name2){
System.out.println("full name:"+name1+" "+name2);
}
}
//xml文件
<!DOCTYPE suite SYSTEM "http://testng.org/testng-1.0.dtd" >
<suite name="Suite1" verbose="1" >
<test name="test1" >
<parameter name="first-name" value="@Test1" ></parameter>
<parameter name="second-name" value="@Test2" ></parameter>
<classes>
<class name="ParametersTestng" />
</classes>
</test>
</suite>
2、@DataProvider
如果引用外部的@DataProvider,需要把方法声明为Static,引用时需要标注dataProviderClass。
import org.testng.annotations.Test;
public class ParametersTestng {
@Test(dataProvider = "DataProviderTest",dataProviderClass = DataProviderTest.class)
public void test(String name1,String name2){
System.out.println(name1+":"+name2);
}
}
public class DataProviderTest {
@DataProvider(name = "DataProviderTest")
public static Object[][] Datatest(){
return new Object[][]{
{"first-name","zhang"},
{"second-name","san"}
};
}
}
四、xml配置文件
1、创建一个testng.xml文件,需要声明suite名称,用于描述要运行的测试脚本集。
2、可以选择一个包执行。
3、可以选择一个类执行
4、可以选择类下的某几个方法执行。
5、可以指定组执行。
//文件并不能执行 只是列出如何选择包、类、方法、组执行
<!DOCTYPE suite SYSTEM "http://testng.org/testng-1.0.dtd" >
<suite name="Suite1" verbose="1" >
<test name="test1" >
<groups>
<run>
<include name="01"></include>
</run>
</groups>
<packages>
<package name="com.java.code"></package>
</packages>
<classes>
<class name="TestClass" >
<methods>
<include name="test01"/>
</methods>
</class>
</classes>
</test>
</suite>
五、ReportNG报告
1、修改pom文件添加
<dependencies>
<dependency>
<groupId>org.uncommons</groupId>
<artifactId>reportng</artifactId>
<version>1.1.4</version>
<exclusions>
<exclusion>
<groupId>org.testng</groupId>
<artifactId>testng</artifactId>
</exclusion>
</exclusions>
</dependency>
<dependency>
<groupId>com.google.inject</groupId>
<artifactId>guice</artifactId>
<version>4.0-beta5</version>
</dependency>
</dependencies>
<build>
<plugins>
<plugin>
<groupId>org.apache.maven.plugins</groupId>
<artifactId>maven-surefire-plugin</artifactId>
<configuration>
<suiteXmlFiles>
<suiteXmlFile>src/test/java/testng.xml</suiteXmlFile>
</suiteXmlFiles>
<properties>
<property>
<name>usedefaultlisteners</name>
<value>false</value>
</property>
<property>
<name>listener</name>
<value>org.uncommons.reportng.HTMLReporter</value>
</property>
</properties>
<workingDirectory>target/</workingDirectory>
</configuration>
</plugin>
</plugins>
</build>
2、修改testng.xml文件添加
//在<suite></suite>元素中进行配置
<listeners>
<listener class-name="org.uncommons.reportng.HTMLReporter"/>
<listener class-name="org.uncommons.reportng.JUnitXMLReporter"/>
</listeners>
3、运行testng.xml文件,可以在当前目录下的test-output\html\index.html中查看生成的ReportNG报告。
其他
1、使用testng类需要在Project-》src-》test-》java下创建java class文件。
2、创建testng.xml文件,File-》New-》File-》testng.xml。
3、Project的Groupid可以在pom.xml文件中查看。