哈喽大家好,我是小浪。那么今天是一期基于Java+TestNG测试框架的入门教学的博客,从只会手工测试提升到自动化测试,这将对你的测试技术提升是非常大的,有助于我们以后在找工作、面试的时候具备更大的竞争力~
文章目录
- 一、什么是TestNG?
- 二、如何创建第一个TestNG用例?
- 三、TestNG的常用注解
- 四、以XML的方式运行TestNG
- 五、以Maven的方式运行TestNG
一、什么是TestNG?
在学习之前,我们首先来了解一下什么是TestNG
:
TestNG
是一个基于Java
的测试框架,它是JUnit
的替代品,可以更好地满足开发人员和测试人员的需求。TestNG的优势包括:
1.更好的注释:TestNG允许使用更多的注释来描述测试,这使得测试代码更加易读和易于维护.
2.更好的分组:TestNG允许将测试用例分组,这使得测试用例的管理更加容易.
3.更好的依赖性管理:TestNG允许测试用例之间建立依赖关系,这使得测试用例的执行更加灵活.
4.更好的参数化:TestNG允许在测试用例中使用参数,这使得测试用例的复用更加容易.
5.更好的报告:TestNG生成的测试报告更加详细和易读.
二、如何创建第一个TestNG用例?
OK,那了解了什么是TestNG
之后,博主这里借助IDEA来演示打印第一个单元测试用例~
1、首先我们需要下载一个编译器IDEA
(别告诉我你连IDEA都没有下载~),新建一个Maven项目
2、找到pow.xml
文件,将以下配置文件的代码复制进去,等待IDEA加载~
<?xml version="1.0" encoding="UTF-8"?>
<project xmlns="http://maven.apache.org/POM/4.0.0"
xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
xsi:schemaLocation="http://maven.apache.org/POM/4.0.0 http://maven.apache.org/xsd/maven-4.0.0.xsd">
<modelVersion>4.0.0</modelVersion>
<groupId>org.example</groupId>
<artifactId>MavenTest</artifactId>
<version>1.0-SNAPSHOT</version>
<dependencies>
<dependency>
<groupId>org.testng</groupId>
<artifactId>testng</artifactId>
<version>6.10</version>
</dependency>
</dependencies>
</project>
3、建好了项目之后,我们需要去下载一个插件Create TestNG XML
,File->settings-Plugins搜插件的名字~
4、java
文件下面新建一个类Test1
,鼠标选中类名,按alt+enter
选择Create Test
.
5、选择TestNG
,然后取一个类名,这里我就取得Test1,之后大家可以在test目录下面看到我们刚才取的类名,注意类名必须以大写的Test
结尾~
6、写上第一个测试用例的代码,这里我就直接打印了,大家可以自行选择喜欢的内容进行输出~
@Test
public void Test(){
System.out.println("这是一个TestNG测试框架case");
}
运行结果:我们可以看到运行成功了!!
三、TestNG的常用注解
1、@BeforeClass
:在调用当前类的第一个测试方法之前运行,在当前类中仅运行一次
@BeforeClass
public void BeforeClass(){
System.out.println("在调用当前类的第一个测试方法之前运行,在当前类中仅运行一次");
}
2、@AfterClass
:在调用当前类的第一个测试方法之后运行,在当前类中仅运行一次
@AfterClass
public void AfterClass(){
System.out.println("在调用当前类的第一个测试方法之后运行,在当前类中仅运行一次");
}
3、@BeforeTest
:注释的方法将在属于test标签内的所有类的所有测试方法运行之前运行,一个test标签内可能有多个class(类),在当前test标签内仅运行一次~
@BeforeTest
public void BeforeTest(){
System.out.println("这是BeforeTest的用例case");
}
4、@AfterTest
:注释的方法将在属于test标签内的所有类的所有测试方法运行之后运行,一个test标签内可能有多个class(类),在当前test标签内仅运行一次~
@AfterTest
public void AfterTest(){
System.out.println("这是AfterTest的用例case");
}
运行结果:(注意比较优先级)
5、@BeforeSuite
:在该套件的所有测试运行之前运行,仅运行一次
@BeforeSuite
public void BeforeSuite(){
System.out.println("这是@BeforeSuite的用例case");
}
6、@AfterSuite
:在该套件的所有测试运行之后运行,仅运行一次
@AfterSuite
public void AfterSuite(){
System.out.println("这是@AfterSuite的用例case");
}
7、@BeforeMethod
:注释方法将在当前类中的每个测试方法之前运行
@BeforeMethod
public void BeforeMethod(){
System.out.println("这是@BeforeMethod的用例case");
}
8、@AfterMethod
:注释方法将在当前类中的每个测试方法之后运行
@AfterMethod
public void AfterMethod(){
System.out.println("这是@AfterMethod的用例case");
}
9、@BeforeGroups
:配置方法将在组列表运行之前运行。 此方法保证在调用属于这些组中的任何第一个测试方法之前运行
10、@AfterGroups
:此配置方法将在组列表运行之后运行。该方法保证在调用属于这些组的任何最后一个测试方法之后运行
@Test(groups = "groups1")
public void Test1(){
System.out.println("这是groups1的用例Test1");
}
@Test(groups = "groups1")
public void Test11(){
System.out.println("这是groups1的用例Test11");
}
@Test(groups = "groups2")
public void Test2(){
System.out.println("这是groups2的用例Test2");
}
@Test(groups = "groups2")
public void Test22(){
System.out.println("这是groups2的用例Test22");
}
//只对group1有效,即Test1和Test11
@BeforeGroups(groups="group1")
public void BeforeGroups(){
System.out.println("这是@BeforeGroups的用例case");
}
//只对group2有效,即Test2和Test22
@AfterGroups(groups="group2")
public void AfterGroups(){
System.out.println("这是@AfterGroups的用例case");
}
运行结果:
由此可以得出TestNG运行时,执行顺序:@BeforeSuite->@BeforeTest->@BeforeClass->@BeforeGroups.
11、@Parameters
:描述如何将参数传递给@Test
方法
12、@DataProvider
:标记一种方法来提供测试方法的数据。 注释方法必须返回一个Object [] []
,其中每个Object []
可以被分配给测试方法的参数列表。 要从该DataProvider
接收数据的@Test
方法需要使用与此注释名称相等的dataProvider
名称
四、以XML的方式运行TestNG
那么TestNG支持xml的格式运行,那么如何操作呢?
1、首先我们先来认识一些xml中的标识符以及它们的含义:
<suite>
套件,根标签,通常由几个<test组成>
属性:
name
套件的名称,必须属性;
verbose
运行的级别或详细程度;
parallel
是否运行多线程来运行这个套件;
thread-count
如果启用多线程,用于指定开户的线程数;
annotations
在测试中使用的注释类型;
time-out
在本测试中的所有测试方法上使用的默认超时时间;
<test>
测试用例,name为必须属性;
<classes>
用例中包含的类,子标签为<class name="className">
;
<class>
测试类,其中属性name为必须属性;;
packages>
用例中包含的包,包中所有的方法都会执行,子标签为<package name="packageName">
;
package>
测试包,name为必须属性;
<methods>
指定测试类中包含或排除的方法,子类为<include>
,<exclude>; <include>
指定需要测试的方法,name为必须属性;
<exclude>
指定类中不需要测试的方法,name为必须属性;
<groups>
指定测试用例中要运行或排除运行的分组,子标签为<run>
,<run>
下包含<include>
,<exclude>
标签,<include>
,<exclude>
的name指定运行、不运行的分组;
2、在项目下新建一个testng.xml
文件:
代码模板如下:
<!DOCTYPE suite SYSTEM "https://testng.org/testng-1.0.dtd" >
<suite name="Suite1" verbose="1" >
<test name="Nopackage" >
<classes>
<class name="NoPackageTest" />
</classes>
</test>
<test name="Regression1">
<classes>
<class name="test.sample.ParameterSample"/>
<class name="test.sample.ParameterTest"/>
</classes>
</test>
</suite>
3、在test
目录下面新建一个类Test3Test
:
import org.testng.Assert;
import org.testng.annotations.Test;
import org.testng.annotations.*;
public class Test3Test {
@Test(groups = "group1")
public void testC03() {
System.out.println("testC03");
Assert.assertTrue(true);
}
@Test(groups = "group1")
public void testC04() {
System.out.println("testC04");
Assert.assertTrue(true);
}
@Test(groups = "group2")
public void testC05() {
System.out.println("testC05");
Assert.assertTrue(true);
}
@BeforeTest
public void beforeTest() {
System.out.println("beforeTest");
}
@AfterTest
public void afterTest() {
System.out.println("afterTest");
}
@BeforeClass
public void beforeClass() {
System.out.println("beforeClass");
}
@AfterClass
public void afterClass() {
System.out.println("afterClass");
}
@BeforeSuite
public void beforeSuite() {
System.out.println("beforeSuite");
}
@AfterSuite
public void afterSuite() {
System.out.println("afterSuite");
}
@BeforeGroups(groups = {"group1", "group2"})
public void beforeGroups() {
System.out.println("beforeGroups");
}
@AfterGroups(groups = {"group1", "group2"})
public void afterGroups() {
System.out.println("afterGroups");
}
@BeforeMethod
public void beforeMethod() {
System.out.println("beforeMethod");
}
@AfterMethod
public void afterMethod() {
System.out.println("afterMethod");
}
}
4、修改testng.xml
文件中的代码,右键运行testng.xml
文件:
<!DOCTYPE suite SYSTEM "http://testng.org/testng-1.0.dtd" >
<suite name="Suite" parallel="none">
<test name="Test">
<classes>
<class name="Test3Test"/>
</classes>
</test>
</suite>
运行结果:
五、以Maven的方式运行TestNG
1、首先我们需要下载一个插件Maven Helper
:
2、其次需要在pow.xml中配置以下依赖,代码粘贴后,需要点击IDEA右上角的Maven刷新按钮,这样代码就不会出现爆红了~
<dependencies>//注意这个依赖放在这个<dependencies>标签里面
<dependency>
<groupId>org.apache.logging.log4j</groupId>
<artifactId>log4j-api</artifactId>
<version>2.8</version>
</dependency>
</dependencies>
<build>//<build>标签单独开一行
<plugins>
<plugin>
<groupId>org.apache.maven.plugins</groupId>
<artifactId>maven-surefire-plugin</artifactId>
<version>2.19</version>
<configuration>
<suiteXmlFiles>
<suiteXmlFile>testng.xml</suiteXmlFile>//该文件位于工程根目录时,直接填写名字,其它位置要加上路径。
</suiteXmlFiles>
</configuration>
</plugin>
</plugins>
</build>
代码不爆红就说明没有问题~
3、右键Maven,点击test
即可运行Maven:
4、运行结果:
注意事项:Maven Helper
这个插件的语法为 :<suiteXmlFile>src/test/resources/testNGFilesFolder/${testNgFileName}.xml</suiteXmlFile>
标签里是测试代码的路径~
OK,那么以上就是本篇博客的所有内容了,下篇博客我们继续更新TestNG的其他知识点,感兴趣的小伙伴可以点个star支持一下;关于秋招,实习可添加下方v咨询欧~