目录
1.TestNg介绍
TestNg是Java中开源的自动化测试框架,灵感来源于Junit和NUnit。引入Java的注解便于编写和管理测试类和方法
2、TestNG安装
(1)JDK
(2)Intelli IDEA
(3)在IDEA中安装TestNg插件
(4)如果是Maven项目,还需要在pom.xml中添加依赖和插件
<dependencies>
<dependency>
<groupId>org.testng</groupId>
<artifactId>testng</artifactId>
<version>6.10</version>
<scope>test</scope>
</dependency>
</dependencies>
<!-- testng.xml所在的路径,这里指的是相对路径 -->
<plugin>
<artifactId>maven-surefire-plugin</artifactId>
<configuration>
<suiteXmlFiles>
<suiteXmlFile>testng.xml</suiteXmlFile>
</suiteXmlFiles>
</configuration>
<version>2.22.1</version>
</plugin>
3、TestNG使用
3.1 编写测试用例脚本
(1)新建测试用例类
(2)使用注解
- @Test注解:使用改注解的方法或类可以被testNG识别并运行
@Test(dependsonMethods="test2"):依赖其他方法,运行当前方法之前需要先执行test2
@Test(alwayRun=true):设置为true时,无论什么情况都会运行
@Test(description="xxx"):对用例进行说明
@Test(enabled=false):设置为false时,表示改方法失效
@Test(dataProvider="datas"):设置数据提供者的名称
- Before/After注解
针对当前项目:
@BeforeSuite:带有该注释的方法将在该套件中的所有测试方法运行之前运行,仅运行一次。
@AfterSuite:带有该注释的方法将在该套件中的所有测试方法运行之后运行,仅运行一次。
@BeforeTest:带有该注释的方法将在运行属于标签<test>内的类的所有测试方法之前执行
@AfterTest:带有该注释的方法将在运行属于标签<test>内的类的所有测试方法之后执行
针对当前类:
@BeforeClass:带有该注释的方法将在调用当前类的第一个测试方法之前执行
@AfterClass:带有该注释的方法将在调用当前类的第一个测试方法之后执行
@BeforMethod:带有该注释的方法将在每个测试方法之前运行
@AfterMethod:带有该注释的方法将在每个测试方法之后运行
@BeforeGroups:此方法保证在调用属于这些组中的任何一个的第一个测试方法之前不久运行。
@AfterGroups:该方法保证在调用属于任何这些组的最后一个测试方法之后不久运行。
- 传递参数
(1)@Parameters
@Parameters({"first","last"}):描述如何将参数传递给@Test方法。
需要预先在testng.xml中使用<parameter>标签传入参数名和参数值
<parameter name="first" value="尼古拉斯"/>
(2)@DataProvider:可以传递更多的参数,不需要在xml中写,直接在方法上加注解就可以用
参考:版权声明:本文为CSDN博主「wangjie0925」的原创文章,遵循CC 4.0 BY-SA版权协议,转载请附上原文出处链接及本声明。
(1)注释方法返回一个Object[][]:明确知道有几组数据
其中每个Object []可以被分配给测试方法的参数列表。 要从该DataProvider接收数据的@Test方法需要使用与此注释名称相等的dataProvider名称。
@DataProvider(name="loginData")
private Object[][] LoginDataProvider() throws IOException {
Object[][] result=null;
SqlSession session=DatabaseUtil.getSqlSession();
result=new Object[][]{{session.selectOne("loginTest",1)},{session.selectOne("loginTest",2)}};
return result;
}
(2)返回类型是Iterator<Object[]>,不管有多少组测试数据,都可以返回,使用迭代器时,test所在方法的参数类型必须与迭代器中的类型一致
@DataProvider(name="loginData")
private Iterator<Object[]> LoginDataProvider() throws IOException {
List<Object[]> result=new ArrayList<Object[]>();
SqlSession session=DatabaseUtil.getSqlSession();
List<Object> alldata=session.selectList("loginTestAll");
Iterator it=alldata.iterator();
while(it.hasNext()){
result.add(new Object[] { it.next() });
}
return result.iterator();
}
(3)断言方法:
- 硬断言Assert类:断言失败,阻塞后边其他代码执行
- 断言方法基本上是有1至3个输入参数,1个参数为真或假;2-3个参数的顺序是actualValue(实际值)、expectedValue(期望值)、[, message](信息)。
- Assert.assertEquals(actual,Expected):断言,进行实际和预期值的比较
(1)assertTrue:判断是否为True。
(2)assertFalse:判断是否为False。
(3)assertSame:判断引用地址是否相同。
(4)assertNotSame:判断引用地址是否不相同。
(5)assertNull:判断是否为null。
(6)assertNotNull:判断是否不为null。
(7)assertEquals:判断是否相等。
(8)assertNotEquals:判断是否不相等。
(9)assertEqualsNoOrder:判断忽略顺序是否相等。
- 软断言SoftAssert类:断言失败,不阻塞后边其他代码执行
3.2 创建TestNG.xml文件
运行TestNG测试脚本需要配置一个xml文件,使用xml配置文件进行测试用例脚本的执行和管理,在xml配置文件里,不仅可以选择某些需要执行的测试脚本,还可以排除某些不需要运行的测试脚本。
(1)创建testng.xml文件
(2)修改testng.xml
参考:Java+Maven+TestNG - 创建项目篇
编写了测试用例脚本后,就可以修改testng.xml文件了。基本格式如下:
- 每一个xml文件只能有一个suite根标签,代表的是一个测试集(项目);
- 一个suite中可以包含多个test(模块),多个test会按照顺序执行;
- 每一个test里边可以写需要运行的测试用例的class(模块下的测试类)。如果不写,默认会跑所有的测试用例;
- 每个class可以指定要执行哪些用例,不执行哪些用例。如果不写method,则默认本类里的全部用例都执行。
<?xml version="1.0" encoding="UTF-8"?>
<!DOCTYPE suite SYSTEM "http://testng.org/testng-1.0.dtd">
<suite name="测试testng">
<test verbose="2" preserve-order="true" name="G:/Pj/OJOnline/maven-oj">
<classes>
<class name="problem.ProblemDAOTest">
<methods>
<include name="selectAllCase"/>
<include name="selectOneCase"/>
</methods>
</class>
</classes>
</test>
<listeners>
<listener class-name="org.uncommons.reportng.HTMLReporter"/>
<listener class-name="org.uncommons.reportng.JUnitXMLReporter"/>
</listeners>
</suite>
4、测试报告生成
(1)默认的测试报告
执行testng.xml后(maven项目可以使用mvn test命令),在target目录下会生成surefire-reports文件夹,运行index.html文件可以查看报告
(2)ReportNG
在testng.xml中配置监听
<listeners>
<listener class-name="org.uncommons.reportng.HTMLReporter"/>
<listener class-name="org.uncommons.reportng.JUnitXMLReporter"/>
</listeners>
在pom.xml文件中添加ReportNG的依赖:
<!-- https://mvnrepository.com/artifact/org.uncommons/reportng -->
<dependency>
<groupId>org.uncommons</groupId>
<artifactId>reportng</artifactId>
<version>1.1.4</version>
<scope>test</scope>
<exclusions>
<exclusion>
<groupId>org.testng</groupId>
<artifactId>testng</artifactId>
</exclusion>
</exclusions>
</dependency>
<!-- https://mvnrepository.com/artifact/com.google.inject/guice -->
<dependency>
<groupId>com.google.inject</groupId>
<artifactId>guice</artifactId>
<version>4.2.0</version>
<scope>test</scope>
</dependency>
<!-- https://mvnrepository.com/artifact/velocity/velocity-dep -->
<dependency>
<groupId>velocity</groupId>
<artifactId>velocity-dep</artifactId>
<version>1.4</version>
</dependency>
<!-- https://mvnrepository.com/artifact/com.google.code.gson/gson -->
<dependency>
<groupId>com.google.code.gson</groupId>
<artifactId>gson</artifactId>
<version>2.8.0</version>
</dependency>
<!-- https://mvnrepository.com/artifact/org.uncommons/reportng -->
<dependency>
<groupId>org.uncommons</groupId>
<artifactId>reportng</artifactId>
<version>1.1.4</version>
<scope>test</scope>
<exclusions>
<exclusion>
<groupId>org.testng</groupId>
<artifactId>testng</artifactId>
</exclusion>
</exclusions>
</dependency>
<!-- https://mvnrepository.com/artifact/com.google.inject/guice -->
<dependency>
<groupId>com.google.inject</groupId>
<artifactId>guice</artifactId>
<version>4.2.0</version>
<scope>test</scope>
</dependency>
<!-- https://mvnrepository.com/artifact/velocity/velocity-dep -->
<dependency>
<groupId>velocity</groupId>
<artifactId>velocity-dep</artifactId>
<version>1.4</version>
</dependency>
在编辑配置中,取消Listerners中的Use default reports选项
执行testng.xml文件或mvn test,可以看到测试报告在test-output文件夹下