TestNG是Java中的一个测试框架, 类似于JUnit 和NUnit, 功能都差不多, 只是功能更加强大,使用也更方便
Java中已经有一个JUnit的测试框架了。 TestNG比JUnit功能强大的多。 测试人员一般用TestNG来写自动化测试。 开发人员一般用JUnit写单元测试。
1 TestNG如何执行测试
第一种 直接执行:右键要执行的方法, 点Run As ->TestNG Test
第二种 通过testng.xml文件来执行. 把要执行的case, 放入testng.xml文件中。 右键点击testng.xml, 点Run As(类似我们代码的amm.xml)
第三种 TestNG组测试
TestNG中可以把测试用例分组,这样可以按组来执行测试用例比如:
复制代码
package TankLearn2.Learn;
import org.testng.annotations.Test;
public class GroupTest {
@Test(groups = {"systemtest"})
public void testLogin(){
System.out.println("this is test login");
}
@Test(groups = {"functiontest"})
public void testOpenPage(){
System.out.println("this is test Open Page");
}
}
复制代码
然后在testng.xml中 按组执行测试用例
复制代码
2 TestNG 异常测试
estNG通过@Test(expectedExceptions) 来判断期待的异常, 并且判断Error Message
3 TestNG参数化测试
第一种: testng.xml 方式使代码和测试数据分离,方便维护
第二种:@DataProvider能够提供比较复杂的参数。 (也叫data-driven testing)
4 TestNG忽略测试
有时候测试用例还没准备好, 可以给测试用例加上@Test(enable = false), 来禁用此测试用例
5 TestNG 依赖测试(某个方法必须依赖其他方法)dependsOnMethods()
6 TestNG默认情况下,会生产两种类型的测试报告HTML的和XML的。 测试报告位于 "test-output" 目录下.
7 TestNG https://blog.csdn.net/d6619309/article/details/52435084(讲的比较好的博客,每种注解的执行顺序有详细的讲解)
https://blog.csdn.net/taiyangdao/article/category/6352844/2(TestNG延伸)
8 suite test class method groups
9某些参数的意义
alwaysRun 对于在方法之前的调用(BeforeSuite,...除了beforeGroups),若为true,这个配置方法无视其所属的组而运行.对于在方法之后的调用(afterSuite, afterClass, ...),若为true, 这个配置方法会运行,即使其之前一个或者多个被调用的方法失败或者被跳过。
enabled 是否执行注解的测试。
inheritGroups
默认是true,则此方法会从属于在类级由@Test注解中所指定的组。举例如下:
@Test(groups = "Tomandy")
public class TestNGHelloWorld {
@BeforeClass(inheritGroups = false) //如果xml文件配置按Tomandy组执行的话,@BeforeClass注解的方法不会被执行
public void setUp(){
System.out.println("setUp!");
}
@Test(groups = "Tom")
public void helloWorld(){
System.out.println("My first TestNG testCase!");
}
}
10 xml 里面参数的意义
name:suite名称,测试报告中展现
verbose: 在控制台中如何输出,该设置不影响测试报告
allow-return-values:如果设置为false,被@Test注解且有return的方法被忽略执行
annotations:如果为"javadoc", 则使用javadoc注解,否则使用jdk注解
configfailurepolicy:字典:continue,skip,如果@Before*方法失败,TestNG是否应该继续执行套件中的其余测试,默认为skip
data-provider-thread-count:并发执行data-provider的线程数,默认大小为10
group-by-instances:默认情况下,依赖方法按类分组。例如,如果方法b()依赖于方法a(),并且您有几个包含这些方法的类实例(因为数据提供者的工厂),
那么调用顺序将为:signIn("us"),signIn("uk"),signOut("us"),,signOut("uk")。group-by-instances设置为true的话,调用顺序将为:signIn("us"),signOut("us"),signIn("uk"),signOut("uk")
guice-stage:创建父注入器的stage
junit:是否以junit模式运行
object-factory:用于实现IObjectFactory的类,实例化测试对象
parallel:是否多线程并发运行测试,默认为false,字典:classes,methods,instances,tests,true,false
parent-module:用于创建所有guice注入器的父注入器的模块
preserve-order:默认情况下,TestNG将按照在XML文件配置的顺序运行测试。如果希望以不可预知的顺序运行文件中列出的类和方法,可将preserve-order属性设置为false
skipfailedinvocationcounts:是否跳过失败的调用
thread-count:使用并行模式,要使用的线程池的大小。
time-out:为具体执行单元设定一个超时时间,方法(parallel="methods")或测试(parallel="tests")
11 DataProvider和Factory
@DataProvider:为测试用例提供参数,有多少组参数就会执行多少次用例,因此它是让一个测试类实例的某个方法执行多次,每次执行都是同一个实例。
@Factory:创建一个测试类的多个实例,每个实例中的所有测试用例都会被执行,每次执行采用的是不同实例。
12 注解详注之并发
TestNG将在同一个线程中运行相同test标签中的所有方法,不同test 标签下的用例在不同的线程执行。
13 编码执行TestNG