测试工作——TestNG

阅读目录

  1. TestNG介绍
  2. 在Eclipse 中安装TestNG插件
  3. TestNG最简单的测试
  4. TestNG的基本注解
  5. TestNG中如何执行测试
  6. TestNG中按顺序执行Case
  7. TestNG异常测试
  8. TestNG组测试
  9. TestNG参数化测试
  10. TestNG忽略测试
  11. TestNG 依赖测试
  12. 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"

TestNG最简单的测试

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

package TestNg;

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

第二种:  通过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>

转自:http://www.cnblogs.com/TankXiao/p/3888070.html

时间: 2024-10-24 15:51:07

测试工作——TestNG的相关文章

谈谈单元测试之(四):测试工具 TestNG

前言 上一篇文章<测试工具 JUnit 4>中提到了 JUnit 4,并对 JUnit 4 做了简单的讨论,这篇文章我们将要围绕另一款测试工具讨论 -- TestNG.其实,这篇文章应该写在<测试工具 JUnit 3>之后,和<测试工具 JUnit 4>之前,为什么这么说呢? 那是因为,TestNG 是在 JUnit 3 之后出来了,而 JUnit 4 是在 TestNG 推出之后,综合 JUnit 3 的优点,并且借鉴了 TestNG 的优势,才推出的.但是,考虑到,

测试工作管理与规范

1. 测试工作准备 测试负责人在软件项目的需求阶段开始介入,逐步深入了解该项目的需求.设计过程,从而有针对性的编制测试计划和测试大纲(测试方案.测试用例). 对测试人员进行业务培训,了解该项目的大体流程及各项功能. 2. 测试计划的制定 测试计划的制定要与项目开发的总体计划相吻合:测试计划中要充分考虑资源计划(人员安排,设备分配.与其它部门的协调配合以及其它不确定的因素)等:测试计划的制定还要考虑测试版本计划,与开发协调,按照版本生成计划(多长时间出一个版本),制定测试计划. 3. 时间节点的控

测试工作中常用工具介绍

测试工作中的常用工具总结 SwitchHosts 这个软件可以存储多个Hosts配置方案并配有切换方案功能,以方便在测试的过程中,应对不同的测试环境实现自由切换Hosts方案的功效. OpenVPN 对于数据库的操作是建立在远程的基础上的,所以在公用网络上建立专用网络成了必要.OpenVPN GUI可以通过用户名和密码让用户连接到专用的VPN网络上,从而让用户远程访问服务器端应用成为可能. SecureCRT 用来连接服务器的虚拟终端,可以模拟远程服务器端的终端在对服务器进行操作,比如查看测试日

如何做好测试工作

在测试行业摸爬滚打了多年,自认为还是一名综合素质不错的测试,但还是有很多不足.今天就想给刚从事测试工作不久的同行说一下做好测试的前提条件与个人素养.作为一名优秀的测试工程师,首先要对测试工作感兴趣:测试工作很多时候都是显得有些枯燥的,因此热爱测试工作和测试技术,才更容易做好测试工作.其次要有专业的技能和行业知识,能够支持测试工程师发展的有力保障. 有了兴趣.热情和专业的技术,我们就能做好测试工作么?不一定,测试工程师,是用户和技术之间的最后一道保障,这个保障的可靠性和安全性,还需“六个心”.“两

测试工作杂谈

最近多个项目同一时间交付测试,进入焦头难额的测试阶段,边测边思考问题: 当待测试项目多到已经规定不需要跑测试用例时,前期辛苦写下的测试用例还有意义吗 当测试项目的交付质量已经差到每天bug数以十位数百位数计时,开发人员难道还不应该自测吗 当测试计划中要求接口测试,数据库测试而开发人员无法配合时,测试工作还能愉快的进行吗 以上三个问题是俺工作中实际的情况,想知道软件行业所有的公司都有这些问题么,还是俺们公司是特例中的战斗机 ==. 测试工作杂谈,布布扣,bubuko.com

【转】如何一直保持测试工作的热情

软件测试工作有时让人觉得枯燥,重复,不受重视, 工作技术含量低,从而打击了很多同事的工作热情, 缺乏工作热情,因缺乏工作热情导致人更体验不到工作的乐趣. 我对软件测试的工作热情也经历了: 好奇软件测试做什么-->做好的激情--->因重视不够和成长瓶颈的原因也出现了热情消失,迷茫的状态-->但随着自己视野的打开以及人生观的成长,慢慢的又重新找到了方向和热情-->在哪都能保持一股热情. 常有人问: 你是如何保持热情的? 我想关键有几点: 1.人生价值观.当你经历多了身边见多了,你会发现

虚拟化技术在测试工作的应用优势(原创)

  如果问现在最流行的IT名词是什么?那一定是“虚拟化与云计算”.虚拟化和云计算是IT产业界的一场技术革命,已经成为了IT行业未来发展的方向. 如今,测试也引入了这一行业领先的技术,建立了公司的的虚拟化平台,使公司的软件测试工作步入了虚拟化时代. 一.什么是虚拟化 虚拟是相对于真实而言,简单来讲:虚拟化就是将原来运行在真实环境上的计算机系统运行在虚拟的环境中.维基百科给出的定义是:“虚拟化是表示计算机资源的抽象方法, 通过虚拟化可以用与访问抽象前资源一致的方法访问抽象后的资源.这种资源的抽象方法

测试工作的必经之路

测试工作进行到一定程度,我更加觉得应该把测试人员抽出来去更多的思考测试计划.测试策略以及最大程度做好风险预测而不是不断的去重复一些枯燥乏味的工作,当然,手工测试应该自始至终伴随着项目,这是产品质量强有力的保证. 随着项目功能在不断的完善,性能在不断的优化,我们项目出现bug概率的也在一点点降低,而我们手工测试人员此时依靠bug的数量来体现工作价值的现状就会显得越发“囧”---我们在不断的测试,但是,bug的产量却日渐萧条.作为一个上进的tester,我们不能坐以待毙,于是根据对测试团队的规划,我

功能测试的测试工作流程

按照产出的文档,介绍项目开发过程中的工作步骤 1. 测试计划:这个计划,我个人觉得应该在详细设计确定后,代码开始编写的时候进行制定,因为我是"提早开始测试工作"思路的忠实fans. a) 测试计划,主要是给后面的测试工作一些指南,不能写成领导看的计划,而是要写成由做事的人看的计划 b) 包含的内容可能有: i. 测试团队人员及分工(要确定当测试时出现缺陷界定.测试环境准备等问题时能找到指定的人员) ii. 测试开始结束时间(理想情况下,不要安排的太紧,赶工肯定会造成延期或测试不完整,可