15分钟入门TestNG

阅读目录

  1. TestNG介绍
  2. 在Eclipse中在线安装TestNG
  3. 在Eclipse中离线安装TestNg
  4. TestNG最简单的测试
  5. TestNG的基本注解
  6. TestNG中如何执行测试
  7. 使用testtng.xml 文件执行 case
  8. TestNG按顺序执行Case
  9. TestNG异常测试
  10. TestNG组测试
  11. TestNG参数化测试
  12. TestNG忽略测试
  13. TestNG超时测试
  14. TestNG 依赖测试
  15. TestNG测试结果报告
  16. 其他

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"

在Eclipse中离线安装Testng

首先下载testng离线包:  http://pan.baidu.com/s/1hrEaX6k

1. 将解压后的文件..\eclipse-testng离线包\features\org.testng.eclipse_6.9.9.201510270734   文件夹 放到      eclipse--》features目录下

2. 将解压后的文件..\eclipse-testng离线包\plugins\org.testng.eclipse_6.9.8.201510130443  文件夹  放到                 eclipse--》plugins目录下

3. 重启eclipse

4. 验证是否安装成功,file-->new-->other-->TestNg

TestNG最简单的测试

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

package TestNG.Learn;

import org.junit.AfterClass;
import org.junit.BeforeClass;
import org.testng.annotations.Test; public class TestNGLearn1 { @BeforeClass
public void beforeClass() {
System.out.println("this is before class");
} @Test
public void TestNgLearn() {
System.out.println("this is TestNG test case");
} @AfterClass
public 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

使用testtng.xml 文件执行 case

第二种:  通过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="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="Learn.TestNGLearn1">
<methods>
<include name="TestNgLearn3" />
<include name="TestNgLearn1" />
<include name="TestNgLearn2" />
</methods>
</class>
</classes>
</test>
</suite>

TestNG异常测试

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

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

package TestNG.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 TestNG.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)

第三种: xml文件方式方便维护,xml数据分离,放置到配置文件

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

package TestNG.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="yun" />
<parameter name="test1" value="zhou" />
<test name="test12">
<classes>
<class name="Learn.ParameterizedTest1" />
</classes>
</test>
</suite>

方式二:   通过DataProvider传递参数

package TestNG.Learn;

import org.testng.annotations.DataProvider;
import org.testng.annotations.Test; public class DataProviderLearn { @DataProvider(name="user")
public Object[][] Users(){
return new Object[][]{
{"zy","cc"},
{"cnblogs.com", "zhouyun"},
{"zhou","yun"}
};
} @Test(dataProvider="user")
public void verifyUser(String userName, String password){
System.out.println("Username: "+ userName + " Password: "+ password);
}
}

方法三: 通过properties 传递参数给测试代码

package TestNG;

import org.testng.annotations.Parameters;

import java.io.FileNotFoundException;
import java.io.IOException;
import java.io.InputStream;
import java.util.Properties;

import org.testng.annotations.Test;

public class TestNGLearn4 { 
  @Test
     @Parameters({"dbconfig"})
     public void testProp(String dbconfig) throws FileNotFoundException, IOException {
         System.out.println("dbconfig : " + dbconfig);

     //通过当前类加载器的getResourceAsStream方法获取

     //使用getResourceAsStream方法去读取properties文件时需要特别注意properties文件路径的写法
         InputStream inStream = TestNGLearn4.class.getClassLoader().getResourceAsStream("TestNGLearn4/db.properties");

     //通过路径获取

     //InputStream inStream = new FileInputStream(new File("filePath"));

Properties prop = new Properties(); 
         prop.load(inStream);
         String driver = prop.getProperty("driver");
         System.out.println("********"+driver+"**********");
}}

TestNG忽略测试

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

package TestNG.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 TestNG;

import org.testng.annotations.Test;

public class TestNGLearn3 {

    @Test(timeOut = 3000) // time 毫秒
public void testThisShouldPass() throws InterruptedException {
Thread.sleep(2000);
} @Test(timeOut = 3000)
public void testThisShouldFail() throws InterruptedException {
Thread.sleep(4000);
} }

TestNG 依赖测试

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

package TestNG;

import org.testng.annotations.Test;

public class DependsTest {

    @Test
public 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>

 其它

@Test(invocationCount = 10)
//运行次数
@Test(invocationCount = 3, threadPoolSize = 3)
//一个线程池,多个线程,使用线程池,会大大降低测试方法的运行时间。
可以关注微信公众号ItalicsM  了解更多...

TestNg练习001的更多相关文章

  1. TestNG基础001

    一.什么是TestNG TestNG是一个强大的测试框架,NG是指Next Generation ,被视为是Junit的升级版本 二.TestNG适用范围 Java单元测试 接口测试 web自动化测试 ...

  2. testng入门教程15数据驱动

    testng在类 里面的数据驱动 package driver_test; import org.testng.annotations.DataProvider; import org.testng. ...

  3. Testng 的数据源 驱动測试 代码与配置

    JUnit中有讲述使用注解的方式进行数据源读取进行自己主动循环測试的方法,在TestNG中也提供了对应的方法 public class TestngDataProvider { /** * 数组内的每 ...

  4. Java Unit Testing - JUnit & TestNG

    转自https://www3.ntu.edu.sg/home/ehchua/programming/java/JavaUnitTesting.html yet another insignifican ...

  5. TestNG 入门教程

    原文出处:http://www.cnblogs.com/TankXiao/p/3888070.html 阅读目录 TestNG介绍 在Eclipse中在线安装TestNG 在Eclipse中离线安装T ...

  6. JUnit 4 与 TestNG 对比

    原文出处: 付学良的网志 原文出处2: http://www.importnew.com/16270.html -------------------------------------------- ...

  7. JAVA+Maven+TestNG搭建接口测试框架及实例

    1.配置JDK 见另一篇博客:http://www.cnblogs.com/testlurunxiu/p/5933912.html 2.安装Eclipse以及TestNG Eclipse下载地址:ht ...

  8. Idea+TestNg配置test-output输出

    说明:testNG的工程我是使用eclipse创建的,直接导入到idea中,运行test时不会生产test-output,只能在idea的控制台中查看运行结果,然后到处报告,经过不懈的百度终于找到怎么 ...

  9. testng 失败自动截图

    testng执行case failed ,testng Listener会捕获执行失败,如果要实现失败自动截图,需要重写Listener的onTestFailure方法 那么首先新建一个Listene ...

随机推荐

  1. 【Python秘籍】numpy到tensor的转换

    在用pytorch训练神经网络时,我们常常需要在numpy的数组变量类型与pytorch中的tensor类型进行转换,今天给大家介绍一种它们之间互相转换的方法. 一.numpy到tensor 首先我们 ...

  2. 4.Linux文件管理相关命令(上)

    1.复制命令cp cp - copy files and directories 拷贝 文件 和 目录 -r 递归复制,通常用来复制目录 -p 保持复制源文件的属性 -v 显示复制的过程 1. 将当前 ...

  3. GO基础之流程控制语句

    一.if分支语句 if 布尔表达式 1 { /* 在布尔表达式 1 为 true 时执行 */ } ; a% == { fmt.Println("偶数") } if 布尔表达式 1 ...

  4. vue,element列表大数据卡顿问题,vue列表渲染慢,element表格渲染慢,表格渲染慢(卡),表格全选卡

    https://github.com/livelyPeng/pl-table 一个表格组件(完美解决万级数据渲染卡顿问题),流畅渲染万级数据并不会影响到el-table的原有功能 分析: 前端UI框架 ...

  5. Git 项目提交新仓库

    提示:进入项目文件操作 步骤: 1.git init   ----------初始化git仓库 2.git remote add origin 你的项目地址  ------------------如: ...

  6. 拨云见日,彻底弄清楚Java日志框架 log4j, logback, slf4j的区别与联系

    log4j 以及 logback, slf4j 官网 日志框架的困惑 作为一个正常的项目,是必须有日志框架的存在的,没有日志,很难追踪一些奇奇怪怪的系统问题. 但是,我们经常在项目的依赖中,见到奇奇怪 ...

  7. Java基础(二十二)集合(4)Set集合

    Set集合为集类型.集是最简单的一种集合,存放于集中的对象不按特定方式排序,只是简单地把对象加入集合中.对集中存放的对象的访问和操作时通过对象的引用进行的,所以,在集中不能存放重复对象. Set接口实 ...

  8. 2019.NET Conf,我们在共同期待

    (一)回顾一个小社区红过的五分钟 不知不觉,距离中国.net社区组织的.net conf只有不到一周的时间,还记得年初在叶伟民老师,潘淳老师和张善友老师的号召下,我们长沙的十几位开发者自发组织起来,拉 ...

  9. Docker配置整理

    目录: 以非root用户身份管理Docker 配置Docker以在启动时启动 配置Docker守护程序监听连接的位置 以非root用户身份管理Docker 默认情况下,Docker运行权限由用户roo ...

  10. ubuntu & centos RTL88x2BU 无线网卡驱动(v5.1.7_19806) 安装

    前提   大部分情况都是因为当前系统的内核不满足驱动文件的编译条件,可以通过驱动文件中的文档来确定是否要升级内核还是降级内核, 对于升级内核只需要下载指定的内核版本安装即可,降级内核(暂时不清楚是否会 ...