TestNG的英文为Test Next Generation, 听上去好像下一代测试框架已经无法正常命名了的样子,哈哈,言归正传,啥是TestNG呢,它是一套测试框架,在原来的Junit框架的思想基础上开发的新一代测试框架,既然这么牛b,那果断弄来试试。本文主要从安装步骤-->第一个测试例子-->再多一点例子-->框架分析-->suite文件的书写-->总结结束。

安装步骤:

  1. 第一步,当然首先是在你的java sdk, eclipse ide, system environment,都已经配置好了的情况下进行, 这些本人早就搭建好了,为了体现手把手教学,这里附加上本人的开发环境参数:os: win 8, java_version: 1.7, path: (added), eclipse_version: 4.3.1, 好了,其实只要装好这些就行了,版本么,再说,哈哈,开工

  2. 第二步,去官网download一个TestNG插件,这个工作在eclipse内完成,点击help->install new software,紧接着填上http://beust.com/eclipse

  

  然后一路next到finish。好了TestNG插件装上了,为了check一下是否正常工作,新建一个空的工程,然后再新建一个一个TestNG类试一下,如果能够正常建立,那么就成功了,步骤:file->new->Other,会看到

  如果这个看到了,那么okay,恭喜你,可以开工写测试的case了,至此,环境搭建完成。

  第一个测试例子:

  点击src包上右击,新建一个类,->new->class,包名就叫cases吧,类名就叫CaseOne吧不要main方法,然后finish

  写第一个TestNG的带有@Test的方法如图

  会有小error,这是因为我们还没有将TestNG加入到我们的LIB中来,点击错误,会有import Library的选项,点击便有了,如图

  最后

  

  可见方法method1写好了,在method里加一句

  

System.out.println("**********method1*********");

  执行程序可以看到Console里打印了**********method1*********,接下来加入更多的方法

package cases;

import org.testng.annotations.Test;

public class CaseOne {
@Test
public void method1(){
//selenium code
System.out.println("**********method1*********");
// Assert.assertEquals("A", "B");
} @Test
public void method2(){
System.out.println("**********method2*********");
} @Test
public void method3(){
System.out.println("**********method3*********");
}
}

  执行以上代码,程序将从上到下执行三个带有@Test的方法。结果

  我们可以对这三个方法建立倚赖,所有后面的都建立在之前的case通过的情况下,标注是这样写的

package cases;

import org.testng.annotations.Test;

public class CaseOne {
@Test
public void method1(){
System.out.println("*********method1*********");
// Assert.assertEquals("A", "B");
} @Test(dependsOnMethods={"method1"})
public void method2(){
System.out.println("*********method1*********");
} @Test(dependsOnMethods={"method1","method1"})
public void method3(){
System.out.println("*********method1*********");
}
}

   这样前面的case没通过,后面的当然也不会过,比如将注释掉的那句代码去掉就不会通过执行后面两case了。

  我们还可以对method进行分组,如

@Test(groups={"group1"})

  这样就不用像方法3那样倚赖写一大串了,只需要一个group的名字便可以了。

  框架分析

  再来看看别的annotation吧!上代码

package cases;

import org.testng.annotations.AfterClass;
import org.testng.annotations.AfterMethod;
import org.testng.annotations.AfterTest;
import org.testng.annotations.BeforeClass;
import org.testng.annotations.BeforeMethod;
import org.testng.annotations.BeforeTest;
import org.testng.annotations.Test; public class TestCase2 {
@BeforeTest
public void setUp(){
System.out.println("*******before********");
} @BeforeMethod
public void beforeMethod(){
System.out.println("*******beforeMethod********");
} @AfterMethod
public void afterMethod(){
System.out.println("*******aftermethod********");
} @Test
public void t1(){
System.out.println("*********t1**********");
} @Test
public void t2(){
System.out.println("*********t2**********");
} @BeforeClass
public void beforeClass(){
System.out.println("*****beforeClass*****");
} @AfterClass
public void afterClass(){
System.out.println("*****afterClass*****");
} @AfterTest
public void finish(){
System.out.println("*******finish********");
}
}

  运行得到结果如下

*******before********
*****beforeClass*****
*******beforeMethod********
*********t1**********
*******aftermethod********
*******beforeMethod********
*********t2**********
*******aftermethod********
*****afterClass*****
*******finish********
PASSED: t1
PASSED: t2 ===============================================
Default test
Tests run: 2, Failures: 0, Skips: 0
===============================================

  这样一来咱们就大概的知道了不同的annotation下的方法的执行顺序了。基本上是@BeforeTest->@BeforeClass->(@BeforeMethod->@Test->@AfterTest)->...重复()内内容...->@AfterClass->@AfterTest.好了,框架基本如下,

  再多一点例子:

  同时建立多个Class,如

  

  如果全部选中,当然会从上当下的执行,但是万一有些文件我们不想执行呢,比如CaseOne中的method1我们想跳过去,那就得写一个控制文件了,在TestNG中使用xml来控制,在顶级目录下建一个build.xml文件,内容如下

<?xml version="1.0" encoding="UTF-8"?>
<!DOCTYPE suite SYSTEM "http://testng.org/testng-1.0.dtd">
<suite name="My Sample Suite">
<test name="First test">
<classes>
<class name="cases.CaseOne"></class>
</classes>
</test>
<test name="Second test">
<classes>
<class name="cases.CaseTwo"></class>
</classes>
</test>
<test name="Third test">
<classes>
<class name="cases.CaseThree"></class>
</classes>
</test>
</suite>

  这是按类写的,当然你可以写的更详细,指定方法

<?xml version="1.0" encoding="UTF-8"?>
<!DOCTYPE suite SYSTEM "http://testng.org/testng-1.0.dtd">
<suite name="My Sample Suite">
<test name="First test">
<classes>
<class name="cases.CaseOne"></class>
<methods>
<include name="method1"/>
<include name="method2"/>
</methods>
</classes>
</test>
<test name="Second test">
<classes>
<class name="cases.CaseTwo"></class>
</classes>
</test>
<test name="Third test">
<classes>
<class name="cases.CaseThree"></class>
</classes>
</test>
</suite>

  这样类CaseOne中的第三个方法会掠过去不执行。

  总结:

  在我看来,TestNG是一个非常好用的测试框架,其测试步骤顺序很规范,很强大,当然还有很多东西要去探索。笔者水平较浅,不足之处,大家海涵!

TestNG环境搭建以及框架初识的更多相关文章

  1. 【搬运工】之——Selenium+IDEA+Maven+TestNG环境搭建(转)

    Selenium+IDEA+Maven+TestNG环境搭建 第一 安装java环境. 1. 下载并安装Jdk1.7或Jdk1.8 http://www.oracle.com/technetwork/ ...

  2. Myeclipse+selenium2.0+Junit+TestNg环境搭建

    这周末把自动化的环境搭好了,在网上也百度了很多,现在分享下,希望大家少走一点歪路. 需要用到的安装包都在这个里面,自取: 链接:https://pan.baidu.com/s/10ohf757ztgN ...

  3. React+Webpack+ES6环境搭建(自定义框架)

    引言 目前React前端框架是今年最火的.而基于React的React Native也迅速发展.React有其独特的组件化功能与JSX的新语法,帮助前端设计有了更好的设计与便捷,而React Nati ...

  4. php开发环境搭建——laravel框架,apache服务器,git版本控制

    本文主要阐述做项目前的开发环境安装——后端为php,前端采用grunt进行自动化构建.具体介绍了windows平台下采用apache运行php的环境搭建,以及git工具安装.写得有点粗糙,但过程完整, ...

  5. selenium java maven testNg环境搭建

    maven获取jar的xml地址:http://mvnrepository.com 步骤一安装jdk(略) 步骤二 安装eclipse(略) 步骤三 安装testNG 步骤四 maven安装 步骤三 ...

  6. iOS,XMPP本地环境搭建和框架使用

    1.XMPP的MySQL和openfire环境配置 2.XmppFramework框架导入和介绍 XMPP的MySQL和openfire环境配置 1.下载mysql安装 mysql下载 打开MySQL ...

  7. Selenium+IDEA+Maven+TestNG环境搭建

    第一 安装java环境. 1. 下载并安装Jdk1.7或Jdk1.8 http://www.oracle.com/technetwork/java/javase/downloads/index.htm ...

  8. Java 本地开发环境搭建(框架采用 Spring+Spring MVC+Hibernate+Jsp+Gradle+tomcat+mysql5.6)

    项目搭建采用技术栈为:Spring+Spring MVC+Hibernate+Jsp+Gradle+tomcat+mysql5.6 搭建环境文档目录结构说明: 使用Intellj Idea 搭建项目过 ...

  9. webpack 环境搭建基础框架

    一.安装babel相关 1,安装依赖 cnpm i -D babel-core babel-loader babel-preset-env babel-preset-stage- babel-plug ...

随机推荐

  1. Android第一次项目

    学习了一个月的Android,接触了人生中第一个安卓项目,对于一个小白来说,总结是很重要的学习方法,以下我把学到的东西总结以下: 1. 1>okhttp3用法解析(边贴代码边熟悉) public ...

  2. 复习java基础第六天(IO)

    一:File 类 • 输入:读取外部数据(磁盘.光盘等存储设备的数据)到程序(内存)中.  • 输出:将程序(内存)数据输出到磁盘.光盘等存储设备中 • Java 的 IO 流主要包括输入.输出两种 ...

  3. dubbo之分组聚合

    按组合并返回结果 ,比如菜单服务,接口一样,但有多种实现,用group区分,现在消费方需从每种group中调用一次返回结果,合并结果返回,这样就可以实现聚合菜单项. 相关代码可以参考 dubbo 项目 ...

  4. python write和writelines的区别

    file.write(str)的参数是一个字符串,就是你要写入文件的内容.file.writelines(sequence)的参数是序列,比如列表,它会迭代帮你写入文件. 下面两种方式写入文件的效果是 ...

  5. 怎么在阿里云搭建一个WordPress博客(超详细教程)

    想以正确的方式启动一个 WordPress 博客吗?我知道,这可能是一个令人恐惧的想法 -- 其实你并不孤单.但是,在帮助很多用户创建博客之后,我决定编写一份详细的指南,让任何没有技术知识的人都能拥有 ...

  6. PHP共享内存

    如何使用 PHP shmop 创建和操作共享内存段,使用它们存储可供其他应用程序使用的数据. 1. 创建内存段 共享内存函数类似于文件操作函数,但无需处理一个流,您将处理一个共享内存访问 ID.第一个 ...

  7. let、var、const用法区别

    1.var var 声明的变量为全局变量,并会进行变量提升:也可以只声明变量而不进行赋值,输出为undefined,以下写法都是合法的. var a var a = 123  2.let let 声明 ...

  8. 一张图搞懂javascript原型链

    js高级里面原型链对于新手来说并不友好,总的来说就是 任何函数都有自己的原型对象(prototype),任何实例对象都__proto__指向构造函数的原型 先来个最简单的原型三角关系 var fn = ...

  9. 51nod1289 大鱼吃小鱼

    有N条鱼每条鱼的位置及大小均不同,他们沿着X轴游动,有的向左,有的向右.游动的速度是一样的,两条鱼相遇大鱼会吃掉小鱼.从左到右给出每条鱼的大小和游动的方向(0表示向左,1表示向右).问足够长的时间之后 ...

  10. nyoj113-字符串替换

    字符串替换 时间限制:3000 ms  |  内存限制:65535 KB 难度:2 描述 编写一个程序实现将字符串中的所有"you"替换成"we" 输入 输入包 ...