TestNG基础
简介
什么是TestNG?
是一款设计测试用例执行流程的测试框架。是java中的一个开源『自动化测试框架』。
TestNG还涵盖了整个核心的JUnit4功能,但引入了一些新的功能。它目前是很流行的单元测试框架,有完善的用例管理模块,配合Maven能够很方便管理依赖,插件
特点
- 注解
- TestNG使用Java和面向对象的功能
- 支持综合类测试(例如,默认情况下,没有必要创建一个新的测试每个测试方法的类的实例)
- 独立的编译时间测试代码运行时配置/数据信息
- 灵活的运行时配置
- 主要介绍“测试组”。当编译测试,只要问TestNG运行所有的“前端”的测试,或“快”,“慢”,“数据库”等
- 支持依赖测试方法,并行测试,负载测试,局部故障
- 灵活的插件API
TestNG和JUnit的区别
下面我来整理一下自己在使用TestNG和JUnit之后,最直观的区别有哪些
安装
1.创建maven项目,
2.填写好项目名,项目路径,项目组织,项目ID,如图所示
3.点击finish完成创建,在pom.xml下配置testng依赖
<dependencies>
<dependency>
<groupId>org.testng</groupId>
<artifactId>testng</artifactId>
<version>${testng.version}</version>
</dependency>
</dependencies>
4.下载依赖(pom文件重新加载项目)
5.依赖包下载成功,运行输出BUILD SUCCESS
快速入门
创建Demo测试类
我们在test/java目录下创建一个package名test,再在包名下创建一个测试类DemoTest
基础注解使用
public class DemoTest {
//测试套件前运行,一个测试套件中可以包含多个测试类,仅运行一次。
@BeforeSuite
public void beforeSuite(){
System.out.println("BeforeSuite");
}
//注释的方法将在属于<test>标签内的类的所有测试方法运行之前运行。
@BeforeTest
public void beforeTest(){
System.out.println("BeforeTest");
}
//在调用当前类的第一个测试方法之前运行,注释方法仅运行一次。
@BeforeClass
public void beforeClass(){
System.out.println("BeforeClass");
}
//如果这个注解没有定义是哪个group就不执行,定义哪个group就会在哪个组执前的method前执行
@BeforeGroups("group1")
public void beforeGroups(){
System.out.println("BeforeGroups");
}
//将类或方法标记为测试的一部分。
@Test(groups = "group2")
public void test2(){
System.out.println("test from group2");
}
//在某个group内,每执行一个test的group方法,就会被调用一次,
@BeforeMethod
public void beforeMethod(){
System.out.println("beforeMethod");
}
@Test(groups = "group1")
public void test1(){
System.out.println("test from group1");
Assert.assertTrue(true);
}
@Test(groups = "group1")
public void test11(){
System.out.println("test11 from group1");
Assert.assertTrue(true);
}
//注释的方法将在属于<test>标签内的类的所有测试方法运行之后运行。
@AfterTest
public void afterTest(){
System.out.println("afterTest");
}
@AfterTest
public void afterClass(){
System.out.println("afterClass");
}
//测试套件后运行,一个测试套件中可以包含多个测试类,仅运行一次。
@AfterSuite
public void afterSuite(){
System.out.println("afterSuite");
}
//此配置方法将在之后运行组列表。该方法保证在调用属于任何这些组的最后一个测试方法之后不久运行。
@AfterGroups("group1")
public void afterGroup(){
System.out.println("afterGroups");
}
//注释方法将在每个测试方法之后运行。
@AfterMethod
public void afterMethod(){
System.out.println("afterMethod");
}
}
我们看下控制台输出效果,各个注解的执行顺序
参数化测试
@Parameters 使用textng.xml传送参数
有的方法需要传参,好比登录成功时我们需要用户的姓名和ID号
参数的传递直接写在代码中不利于维护更改,也不方便不懂代码的测试人员进行参数修改,这个时候就需要参数化测试
首先我们再创建个DemoTest2类,编写一个login() 方法,需要在方法上加上注解@Parameters,
并在xml配置文件中利用<parameter name = "xxx" value = "xxx"/>
的方式传参
<?xml version="1.0" encoding="UTF-8"?>
<!DOCTYPE suite SYSTEM "http://testng.org/testng-1.0.dtd">
<suite name="testNG Demo">
<test verbose="2" preserve-order="true" name="/Users/kobe/workspace/mavenProject/testngProject">
<classes>
<class name="org.cycx.test.DemoTest2">
<parameter name="name" value="Allen_Qin"></parameter>
<parameter name="id" value="001"></parameter>
</class>
</classes>
</test>
</suite>
测试结果:
@DataProvider传递参数
public class Test01 {
@Test(dataProvider = "readCases")
public void test01(CaseInfo caseInfo){
System.out.println(caseInfo);
}
@DataProvider
public Object[] readCases(){
List<CaseInfo> listDatas = EasyPoiExcelUtil.readExcel(0);
return listDatas.toArray();
}
}