TestNg练习001
15分钟入门TestNG
阅读目录
- TestNG介绍
- 在Eclipse中在线安装TestNG
- 在Eclipse中离线安装TestNg
- TestNG最简单的测试
- TestNG的基本注解
- TestNG中如何执行测试
- 使用testtng.xml 文件执行 case
- TestNG按顺序执行Case
- TestNG异常测试
- TestNG组测试
- TestNG参数化测试
- TestNG忽略测试
- TestNG超时测试
- TestNG 依赖测试
- TestNG测试结果报告
- 其他
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)//一个线程池,多个线程,使用线程池,会大大降低测试方法的运行时间。
TestNg练习001的更多相关文章
- TestNG基础001
一.什么是TestNG TestNG是一个强大的测试框架,NG是指Next Generation ,被视为是Junit的升级版本 二.TestNG适用范围 Java单元测试 接口测试 web自动化测试 ...
- testng入门教程15数据驱动
testng在类 里面的数据驱动 package driver_test; import org.testng.annotations.DataProvider; import org.testng. ...
- Testng 的数据源 驱动測试 代码与配置
JUnit中有讲述使用注解的方式进行数据源读取进行自己主动循环測试的方法,在TestNG中也提供了对应的方法 public class TestngDataProvider { /** * 数组内的每 ...
- Java Unit Testing - JUnit & TestNG
转自https://www3.ntu.edu.sg/home/ehchua/programming/java/JavaUnitTesting.html yet another insignifican ...
- TestNG 入门教程
原文出处:http://www.cnblogs.com/TankXiao/p/3888070.html 阅读目录 TestNG介绍 在Eclipse中在线安装TestNG 在Eclipse中离线安装T ...
- JUnit 4 与 TestNG 对比
原文出处: 付学良的网志 原文出处2: http://www.importnew.com/16270.html -------------------------------------------- ...
- JAVA+Maven+TestNG搭建接口测试框架及实例
1.配置JDK 见另一篇博客:http://www.cnblogs.com/testlurunxiu/p/5933912.html 2.安装Eclipse以及TestNG Eclipse下载地址:ht ...
- Idea+TestNg配置test-output输出
说明:testNG的工程我是使用eclipse创建的,直接导入到idea中,运行test时不会生产test-output,只能在idea的控制台中查看运行结果,然后到处报告,经过不懈的百度终于找到怎么 ...
- testng 失败自动截图
testng执行case failed ,testng Listener会捕获执行失败,如果要实现失败自动截图,需要重写Listener的onTestFailure方法 那么首先新建一个Listene ...
随机推荐
- go-异常处理-error-panic-recover
Go语言的函数可以一次返回多个结果.这就为我们温和地报告错误提供了语言级别的支持. func readFile(path string) ([]byte, error) { file, err := ...
- 7.Linux文件编辑之Vim
1.VIM基本概述 1.什么是VIM? vi和vim是Linux下的一个文本编辑工具.(可以理解为windows的记事本,或word文档) 2.为什么要使用VIM? 因为Linux系统一切皆为文件,而 ...
- 楼上请让路 RoarCTF2019 Writeup
Misc 签到题 RoarCTF{签到!!!} 黄金六年 文件尾部有一段base64,解码为16进制可以看到是一个压缩包 打开压缩包需要密码 使用pr抽帧 可以看到部分帧中有二维码,依次扫码即可得到k ...
- (一)如何理解java面向对象编程
哲学中,事物总是螺旋式上升,波浪式前进.因而编程也逐渐向人类更容易理解的方向前进,多年来人们苦苦追求的编程境界 : 高扩展性(extensibility),高复用性(reuseable).java语言 ...
- 基于STM32F103和Cube的输入捕获例程
1.开发环境 (1)Cube5.24 (2)Keil5 (3)STM32F103 2.Cube配置 Cube配置很简单,只要打开TIM4通道1的引脚,设置为输入捕获模式,在配置是高或低电平沿触发 TI ...
- 整理了适合新手的20个Python练手小程序
100个Python练手小程序,学习python的很好的资料,覆盖了python中的每一部分,可以边学习边练习,更容易掌握python. 本文附带基础视频教程:私信回复[基础]就可以获取的 [程序1] ...
- 前后端hosts配置访问问题解决思路
问题背景:前后端分离情况下后端开发测试需要配置hosts,有此问题的人员有RD,QA,PM,User 测试环境由于用户使用这种配置导致无法使用线上系统发起单据影响用户使用,同时让用户误以为系统出问题而 ...
- 虚拟机--python环境配置
1.安装VMware 2.安装Ubantu (1)打开VMware,打开编辑-->首选项,更改虚拟机存储的位置. (2)创建新的虚拟机(自定义): (3)编辑虚拟机--点击CD/VCD--更改成 ...
- http和Https简介、详解
目录 引用 一.HTTP和HTTPS的基本概念 二.HTTP与HTTPS有什么区别? 三.HTTPS的工作原理 四.HTTPS的优点 五.HTTPS的缺点 六.http切换到HTTPS 引用 超文本传 ...
- (Java) 模拟http请求调用远程接口
package com.vcgeek.hephaestus.utils; import java.io.BufferedReader; import java.io.IOException; impo ...