国庆7天假期,大部分朋友都出去旅游了,微信圈里全是晒旅游的照片, 东南亚游,欧洲游呀,真是羡慕呀。 悲惨的我只去了上海野生动物园, 在家休息,利用这段假期,把之前学过的东西都总结下。

我前段时间加班太多了,每天忙碌工作,都没精力去管自己的学习新技能的计划, 博客也没写几篇,很多想做的事情都因为工作太忙而耽搁了。 所以工作太忙了也不好,没有精力关注工作以外的事情。

最近写自动化测试每天都用到TestNG,  把常用的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测试结果报告

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 TankLearn2.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="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 {

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

如果您看了本篇博客,觉得对您有所收获,请点击右下角的 [推荐]

如果您想转载本博客,请注明出处

如果您对本文有意见或者建议,欢迎留言

感谢您的阅读,请关注我的后续博客

TestNG 入门教程【转】的更多相关文章

  1. testng入门教程16数据驱动(把数据写在xml)

    testng入门教程16数据驱动(把数据写在xml) testng入门教程16数据驱动(把数据写在xml)把数据写在xml文件里面,在xml文件右键选择runas---testng执行 下面是case ...

  2. testng入门教程12 TestNG执行多线程测试

    testng入门教程 TestNG执行多线程测试 testng入门教程 TestNG执行多线程测试 并行(多线程)技术在软件术语里被定义为软件.操作系统或者程序可以并行地执行另外一段程序中多个部分或者 ...

  3. testng入门教程10 TestNG参数化测试

    在TestNG的另一个有趣的功能是参数测试.在大多数情况下,你会遇到这样一个场景,业务逻辑需要一个巨大的不同数量的测试.参数测试,允许开发人员运行同样的测试,一遍又一遍使用不同的值. TestNG让你 ...

  4. testng入门教程9 TestNG依赖测试

    有时候,你可能需要在一个特定的顺序调用方法在测试案例,或你想分享一些数据和方法之间的状态.TestNG支持这种依赖测试方法之间的显式依赖它支持声明. TestNG允许指定依赖,无论与否: 使用属性de ...

  5. testng入门教程8 TestNG异常测试

    TestNG跟踪异常处理代码提供了一个选项.可以测试是否需要代码抛出异常或不抛出. @Test注释expectedExceptions 参数一起使用.现在,让我们来看看@Test(expectedEx ...

  6. testng入门教程7 TestNG组测试

    在TestNG中组测试是一个新的创新功能,它不存在于JUnit框架,它允许调度到适当的部分方法和瓶坯复杂的测试方法分组.您不仅可以声明属于群体的那些方法,但你也可以指定一组包含其他组.然后,TestN ...

  7. testng入门教程6 TestNG忽略测试

    有时,我们的代码是没有准备好,如果测试用例写入到测试方法/代码将无法运行,在这种情况下,@Test(enabled = false)有助于禁用此测试案例. 测试方法是标注了@Test(enabled ...

  8. testng入门教程5TestNG套件测试

    TestNG套件测试 测试套件的测试是为了测试软件程序的行为或一系列行为的情况下,是一个集合.在TestNG,我们不能定义一套测试源代码,但它代表的套件是一个XML文件执行特征.这也允许灵活的配置要运 ...

  9. testng入门教程3用TestNG执行case的顺序

    本教程介绍了TestNG中执行程序的方法,这意味着该方法被称为第一和一个接着.下面是执行程序的TestNG测试API的方法的例子. 创建一个Java类文件名TestngAnnotation.java在 ...

随机推荐

  1. 8.RabbitMQ 消息传递Java对象

    通过消息服务器传递Java对象,Java类必须实现序列化接口,可以把Java对象转化为字节数组,从消费者或生产者传递到另外一个JVM中,一定需要两个JVM共享这个类,比如是UserInfo类.   1 ...

  2. 2019 牛客多校第六场 J Upgrading Technology

    题目链接:https://ac.nowcoder.com/acm/contest/886/J 题目大意 略. 分析 见代码. 代码如下 #include <bits/stdc++.h> u ...

  3. 基于三角形与位置指纹识别算法的WiFi定位比较

    文章来着:https://wenku.baidu.com/view/55d1f4146edb6f1aff001fec.html

  4. scikit-learn 应用

    首先是sklearn的官网:http://scikit-learn.org/stable/ 在官网网址上可以看到很多的demo,下边这张是一张非常有用的流程图,在这个流程图中,可以根据数据集的特征,选 ...

  5. 使用python和tushare股票交易日历数据,判断节假日周末休市

    接口:trade_cal 描述:获取各大交易所交易日历数据,默认提取的是上交所 注:tushare模块下载和安装教程,请查阅我之前的文章 输入参数 名称       |       类型        ...

  6. CSS 命名规范将省下调试时间

    我听说很多开发者厌恶 CSS.而在我的经验中,这往往是由于他们并没有花时间来学习 CSS. CSS 算不上是最优美的『语言』,但迄今二十多年来,它都是美化 web 举足轻重的工具.从这点来说,也还算不 ...

  7. 关于jquery ajax项目总结

    $.ajax({        url:"../action/BorrowAction.php?action=oready",        async:true,//异步请求   ...

  8. CF850E Random Elections

    题意:一共有n个人,要在三个人中选prefer,一开始他们心中都会想好他们的排名(共6种),之后给出的判断不会矛盾.规则如下:一共有三轮,分别是a->b,b->c,c->a,每个人选 ...

  9. thinkphp 操作绑定到类

    定义 ThinkPHP3.2版本提供了把每个操作方法定位到一个类的功能,可以让你的开发工作更细化,可以设置参数ACTION_BIND_CLASS,例如: 'ACTION_BIND_CLASS' =&g ...

  10. ROS 自定义消息类型方法

    流程 1.在package中新建文件夹名为msg 2.在msg文件夹中创建消息(此处以my_msg.msg)为例,注意的是要以msg为后缀名 内容举例如下: int32 data1 float64 d ...