TestNG介绍

TestNG是Java中的一个测试框架, 类似于JUnit 和NUnit,   功能都差不多, 只是功能更加强大,使用也更方便

Java中已经有一个JUnit的测试框架了。  TestNG比JUnit功能强大的多。  测试人员一般用TestNG来写自动化测试。  开发人员一般用JUnit写单元测试。

官方网站: http://testng.org/doc/index.html

在Eclipse中安装TestNG

打开Eclipse   Help ->Install New Software ,   然后Add   "http://beust.com/eclipse"

TestNG最简单的测试

下面是TestNG的最简单的一个例子

package TankLearn2.Learn;import org.junit.AfterClass;
import org.junit.BeforeClass;
import org.testng.annotations.Test;public class TestNGLearn1 {@BeforeClasspublic void beforeClass() {System.out.println("this is before class");}@Testpublic void TestNgLearn() {System.out.println("this is TestNG test case");}@AfterClasspublic void afterClass() {System.out.println("this is after class");}
}

TestNG的基本注解

注解 描述
@BeforeSuite 注解的方法将只运行一次,运行所有测试前此套件中。
@AfterSuite 注解的方法将只运行一次此套件中的所有测试都运行之后。
@BeforeClass 注解的方法将只运行一次先行先试在当前类中的方法调用。
@AfterClass 注解的方法将只运行一次后已经运行在当前类中的所有测试方法。
@BeforeTest 注解的方法将被运行之前的任何测试方法属于内部类的 <test>标签的运行。
@AfterTest 注解的方法将被运行后,所有的测试方法,属于内部类的<test>标签的运行。
@BeforeGroups 组的列表,这种配置方法将之前运行。此方法是保证在运行属于任何这些组第一个测试方法,该方法被调用。
@AfterGroups 组的名单,这种配置方法后,将运行。此方法是保证运行后不久,最后的测试方法,该方法属于任何这些组被调用。
@BeforeMethod 注解的方法将每个测试方法之前运行。
@AfterMethod 被注释的方法将被运行后,每个测试方法。
@DataProvider
标志着一个方法,提供数据的一个测试方法。注解的方法必须返回一个Object[] [],其中每个对象[]的测试方法的参数列表中可以分配。

该@Test 方法,希望从这个DataProvider的接收数据,需要使用一个dataProvider名称等于这个注解的名字。

@Factory 作为一个工厂,返回TestNG的测试类的对象将被用于标记的方法。该方法必须返回Object[]。
@Listeners 定义一个测试类的监听器。
@Parameters 介绍如何将参数传递给@Test方法。
@Test 标记一个类或方法作为测试的一部分。

TestNG中如何执行测试

第一种直接执行:右键要执行的方法,  点Run As ->TestNG Test

第二种:  通过testng.xml文件来执行. 把要执行的case, 放入testng.xml文件中。 右键点击testng.xml,   点Run As

testng.xml

<?xml version="1.0" encoding="UTF-8"?><!DOCTYPE suite SYSTEM "http://testng.org/testng-1.0.dtd" >
<suite name="Suite1"><test name="test12"><classes><class name="TankLearn2.Learn.TestNGLearn1" /></classes></test>
</suite>

TestNG按顺序执行Case

在testng.xml中,可以控制测试用例按顺序执行。  当preserve-order="true"是,可以保证节点下面的方法是按顺序执行的

<?xml version="1.0" encoding="UTF-8"?><!DOCTYPE suite SYSTEM "http://testng.org/testng-1.0.dtd" >
<suite name="Suite1"><test name="test12" preserve-order="true"><classes><class name="TankLearn2.Learn.TestNGLearn1"><methods><include name="TestNgLearn3" /><include name="TestNgLearn1" /><include name="TestNgLearn2" /></methods></class></classes></test>
</suite>

TestNG异常测试

测试中,有时候我们期望某些代码抛出异常。

TestNG通过@Test(expectedExceptions)  来判断期待的异常, 并且判断Error Message

package TankLearn2.Learn;import org.testng.annotations.Test;public class ExceptionTest {@Test(expectedExceptions = IllegalArgumentException.class, expectedExceptionsMessageRegExp="NullPoint")public void testException(){throw new IllegalArgumentException("NullPoint");}
}

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中 按组执行测试用例

<?xml version="1.0" encoding="UTF-8"?>
<!DOCTYPE suite SYSTEM "http://testng.org/testng-1.0.dtd" >
<suite name="Suite1"><test name="test1"><groups><run><include name="functiontest" /></run></groups></test>
</suite>

TestNG参数化测试

软件测试中,经常需要测试大量的数据集。 测试代码的逻辑完全一样,只是测试的参数不一样。  这样我们就需要一种 “传递测试参数的机制”。 避免写重复的测试代码

TestNG提供了2种传递参数的方式。

第一种: testng.xml 方式使代码和测试数据分离,方便维护

第二种:@DataProvider能够提供比较复杂的参数。 (也叫data-driven testing)

方法一: 通过testng.xml 传递参数给测试代码

package TankLearn2.Learn;import org.testng.annotations.Parameters;
import org.testng.annotations.Test;public class ParameterizedTest1 {@Test@Parameters("test1")public void ParaTest(String test1){System.out.println("This is " + test1);}
}

testng.xml

<?xml version="1.0" encoding="UTF-8"?><!DOCTYPE suite SYSTEM "http://testng.org/testng-1.0.dtd" >
<suite name="Suite1"><parameter name="test1" value="Tank" /><parameter name="test1" value="Xiao" /><test name="test12"><classes><class name="TankLearn2.Learn.ParameterizedTest1" /></classes></test>
</suite>

方式二:   通过DataProvider传递参数

package TankLearn2.Learn;import org.testng.annotations.DataProvider;
import org.testng.annotations.Test;public class DataProviderLearn {@DataProvider(name="user")public Object[][] Users(){return new Object[][]{{"root","passowrd"},{"cnblogs.com", "tankxiao"},{"tank","xiao"}};}@Test(dataProvider="user")public void verifyUser(String userName, String password){System.out.println("Username: "+ userName + " Password: "+ password);}
}

TestNG忽略测试

有时候测试用例还没准备好, 可以给测试用例加上@Test(enable = false),  来禁用此测试用例

package TankLearn2.Learn;import org.testng.annotations.Test;public class TesgNGIgnore {@Test(enabled = false)public void testIgnore(){System.out.println("This test case will ignore");}
}

TestNG 依赖测试

有时候,我们需要按顺序来调用测试用例,  那么测试用例之间就存在依赖关系。 TestNG支持测试用例之间的依赖

package TankLearn2.Learn;import org.testng.annotations.Test;public class DependsTest {@Testpublic void setupEnv(){System.out.println("this is setup Env");}@Test(dependsOnMethods = {"setupEnv"})public void testMessage(){System.out.println("this is test message");}
}

TestNG测试结果报告

测试报告是测试非常重要的部分.

TestNG默认情况下,会生产两种类型的测试报告HTML的和XML的。 测试报告位于 "test-output" 目录下.

当然我们也可以设置测试报告的内容级别.

verbose="2" 标识的就是记录的日志级别,共有0-10的级别,其中0表示无,10表示最详细

<?xml version="1.0" encoding="UTF-8"?><!DOCTYPE suite SYSTEM "http://testng.org/testng-1.0.dtd" >
<suite name="Suite1"><test name="test12" verbose="2"><classes><class name="TankLearn2.Learn.TestNGLearn1" /></classes></test>
</suite>

版权声明:本文为小平果原创文章,转载请注明:http://blog.csdn.net/i10630226

转载于:https://www.cnblogs.com/dingxiaoyue/p/4948243.html

TestNG 自动化测试入门教程--典型示例相关推荐

  1. Koa入门教程之示例应用

    Koa入门教程之示例应用 Koa范例 一个包含一些小示例的存储库,这些示例说明了如何使用Koa创建Web应用程序和其他HTTP服务器. 源码地址 https://github.com/koajs/ex ...

  2. 《SQL 入门教程》示例数据库

    文章目录 Oracle 示例表 示例数据 创建索引 删除对象 MySQL 示例表 示例数据 创建索引 删除对象 Microsoft SQL Server 示例表 示例数据 创建索引 删除对象 Post ...

  3. Activiti 入门教程(官方示例)

    文章目录 1 摘要 2 Activiti 表结构 3 下载官方 war 包并部署 4 Activiti 流程创建 5 推荐参考资料 1 摘要 Activiti 是一套使用人数最多的.技术成熟的.适应多 ...

  4. appium自动化测试_Appium自动化测试入门教程No.1—— Appium介绍

    (1)特点 appium 是一个自动化测试开源工具,支持 iOS 平台和 Android 平台上的原生应用,web应用和混合应用. >>"移动原生应用"是指那些用iOS ...

  5. 查看ocx控件方法_Appium自动化测试入门教程No.8——定位控件

    Appium 通过 uiautomatorviewer.bat 工具来查看控件的属性.该工具位于 Android SDK 的 /tools/bin/ 目录下. 常用的Appium定位控件有如下: 一. ...

  6. Struts2 入门教程 HelloWorld示例

    一.创建项目引入jar包 登录https://struts.apache.org/download下载jar包 从这个路径下拷贝下图的jar包:\struts-2.5.20\lib 代码实现 Web. ...

  7. Egg框架入门教程合集之插件/工具/教程/专栏/开源项目

    Egg框架入门教程之示例合集 Awesome Egg.js 很棒的清单,精选了最好的Egg.js插件,工具,教程,文章等.欢迎公关! 内容 博客 文章 讲解 会议活动 外挂程式 应用领域 样板 构架 ...

  8. python代码入门教程_Python入门教程丨1300多行代码,让你轻松掌握基础知识点

    欢迎关注小编,除了分享技术文章之外还有很多福利,私信学习资料可以领取包括不限于Python实战演练.PDF电子文档.面试集锦.学习资料等. 前言 本文适合有经验的程序员尽快进入Python世界.特别地 ...

  9. walking与Matlab入门教程-ros2命令

    系列文章目录 walking与Matlab入门教程-安装matlab 2022a软件 walking与Matlab入门教程-安装visual studio 2019软件 walking与Matlab入 ...

最新文章

  1. 大数据搜索:Python编码实战
  2. IPC$概念及入侵方式研究
  3. Franzis CutOut 9 Professional中文版
  4. 如何搭建一个视频直播系统
  5. 树莓派云音乐c语言,基于树莓派的红外遥控版网易云音乐播放器
  6. 【MD5】加密/解密大小写问题
  7. Flutter 如何禁止手机横屏[Flutter专题62]
  8. linux 查看服务器性能常用命令
  9. 路由器的异步和同步串行接口
  10. __name__ == ‘__main__‘的原理
  11. s3c2440第一个裸奔程序——跑马灯(转)
  12. 拼多多董事会变更:董事6人变5人 张震不再出任
  13. pg批量插入_在PostgreSQL中批量/批量更新/提升
  14. 【Python】【有趣的模块】【systimeos】
  15. iPhone 6/6 Plus 出现后,如何改进工作流以实现一份设计稿支持多个尺寸?
  16. logstash 获取多个kafka_日志工程Logstash日志采集入门篇
  17. iphone开发常用代码
  18. 通过举例彻底搞懂Matlab中max函数和min函数的用法(求最大值和最小值)
  19. excel表格的函数公式大全
  20. java stdin怎么用_如何用Java编写ssh的stdin?

热门文章

  1. js通过classname来获取元素
  2. .net后台获取html控件值的2种方法
  3. eLua学习第一课:和Lua的第一次亲密接触
  4. 动态规划-最长回文子串
  5. 串口初始化结构体和固件库讲解
  6. 汇编:div 除法指令
  7. 企鹅科技获蚂蚁金服亿元战略投资,利用智慧物联赋能商用洗衣设备
  8. linux LVM 系统盘扩容
  9. linux中yum命令详解
  10. vscode使用汇总——常用插件、常用配置、常用快捷键