我们在Eclipse写好了基于TestNG的代码,调试的时候通过Eclipse运行。但是在实际使用的时候有时需要运行代码的环境上没有Eclipse,这时怎么办?

通过main函数调用testng.xml文件,然后打成可执行jar包执行

1 假设我们已经写好了testng.xml,现在我们需要写一个主类和main函数用来调用testng.xml

package ngtest;
import java.util.List;
import org.testng.TestNG;
import com.google.common.collect.Lists; public class TestPerson {
public static void main(String[] args) {
TestNG tng = new TestNG();
List<String> suites = Lists.newArrayList();
//添加要执行的testng.xml文件
suites.add("testng.xml");
tng.setTestSuites(suites);
tng.run();
}
}

2 把项目打成可执行jar包

利用Eclipse自带的打包工具,

  1. 在项目名上点击右键,选择export

  2. 在弹出的菜单中选择java->Runable JAR file,点击next

  3. 在当前页做如下操作:Launch configuration 中选择主类,Export destination 中设置导出后的路径和jar包名,在Library handling 选择第三项(可以选择任意一一项,第三项是把依赖包放到一个子文件夹中,当运行出现找不到类时,我们可以及时向该文件夹中添加依赖包)

  4. 在后面弹出的窗口中一路点击yes 或者 ok,完成后目标就会出现在第三步Export destination设置的位置上。

3 运行jar包

打成的jar包中有程序运行需要的.class文件,但是缺少了testng配置文件,所以需要把testng配置文件放到jar包的同级目录上,然后双击jar包(或者进入cmd命令行,输入java -jar jar包名)即可执行jar包,执行完后就会在同级目录上生成TestNG运行结果文件。

在命令行中直接运行TestNG配置文件

命令行运行TestNG的基本语法java org.testng.TestNG testng.xml

在命令行中运行一个java程序都需要设置classpath环境变量,用来说明要执行的.class文件在哪里(简单的不需要设置,是因为那个.class文件没有跨包依赖,而我们正好可以找到他)。我们这里需要设置的classpath包括两个值,第一个值指向该程序依赖的jar包的位置,第二个值指向要运行的.class文件的位置

这需要如下操作

  1. 在classpath环境变量中添加TestNG依赖包的路径,添加环境变量的方法请自行百度,下图是使用Eclipse 的TestNG插件后TestNG依赖包的位置。可以看到图中有四个包,这四个都需要添加到classpath环境变量中。

  2. 在classpath中添加本程序生成的class文件的根目录,普通项目一般在项目名下的bin文件夹中,maven项目在target文件夹中。
  3. 在命令行中切换到testng.xml所在的目录
  4. 执行java org.testng.TestNG testng.xml

如果不添加classpath环境变量,也可以在运行时指定classpath的值,比如

D:\workspace\tester>java -classpath "%classpath%;D:\workspace\tester\target\test-classes" org.testng.TestNG testng.xml

上面-classpath "%classpath%;D:\workspace\tester\target\test-classes"的含义是设置当前运行环境的classpath,classpath包含两部分,一部分是%classpath%表示引用当前设置的系统环境变量中classpath的值(在系统classpath中我设置了testng依赖包的位置,如果没有设置系统环境变量classpath,这里需要写上上面四个包的全路径,中间用分号分割),第二个值是D:\workspace\tester\target\test-classes表示我的项目编译后生成的.class文件放在这里。

TestNG独立运行的几种方法.md的更多相关文章

  1. 让进程在后台可靠运行的几种方法 nohup,setsid,&,disown,CTRL-z ,screen

    让进程在后台可靠运行的几种方法 几年前在developerWorks上面看到的文章,感觉非常实用,又简单整理了一下,转到这里,希望给看到的人带来一些帮助.文中提到的nohup和subshell方式一直 ...

  2. Linux 技巧:让进程在后台可靠运行的几种方法【转】

    我们经常会碰到这样的问题,用 telnet/ssh 登录了远程的 Linux 服务器,运行了一些耗时较长的任务, 结果却由于网络的不稳定导致任务中途失败.如何让命令提交后不受本地关闭终端窗口/网络断开 ...

  3. webpack命令局部运行的几种方法

    webpack命令局部运行的几种方法   1. 第一种,先全局安装webpack 命令:npm install -g webpack 然后再在项目内安装 命令:npm install webpack ...

  4. linux进程后台运行的几种方法 - nohup/setsid/&

    linux进程后台运行的几种方法 - nohup/setsid/& [转载]   我们经常会碰到这样的问题,用 telnet/ssh 登录了远程的 Linux 服务器,运行了一些耗时较长的任务 ...

  5. TestNG在Eclipse中运行的几种方法

    目录 1 在Eclipse Outline视图中,点右键run as TestNG Test (不推荐) 2 在Eclipse类编辑界面,直接点击右键run as TestNG Test 3 通过Te ...

  6. Linux 技巧:让进程在后台可靠运行的几种方法(转)

    下面举了一些例子, 您可以针对不同的场景选择不同的方式来处理这个问题. nohup/setsid/& 场景: 如果只是临时有一个命令需要长时间运行,什么方法能最简便的保证它在后台稳定运行呢? ...

  7. Linux 技巧:让进程在后台可靠运行的几种方法

    我们经常会碰到这样的问题,用 telnet/ssh 登录了远程的 Linux 服务器,运行了一些耗时较长的任务, 结果却由于网络的不稳定导致任务中途失败.如何让命令提交后不受本地关闭终端窗口/网络断开 ...

  8. linux进程后台运行的几种方法

    转载:http://hi.baidu.com/ntuxmzvdpzbnuxq/item/79131b93f606a348f0421562 我 们经常会碰到这样的问题,用 telnet/ssh 登录了远 ...

  9. 转: Linux 技巧:让进程在后台可靠运行的几种方法

    我们经常会碰到这样的问题,用 telnet/ssh 登录了远程的 Linux 服务器,运行了一些耗时较长的任务, 结果却由于网络的不稳定导致任务中途失败.如何让命令提交后不受本地关闭终端窗口/网络断开 ...

随机推荐

  1. if while 条件语句练习题

    1.使用while循环输入123456 8910 n = 1 while n < 11 if n == 7 pass else print(n) n= n + 1 2.求1-100内所有数的和. ...

  2. mini木马c源码

    #pragma comment(lib, "ws2_32.lib") #pragma comment(linker,"/subsystem:\"windows\ ...

  3. 【实战】SpringBoot + KafKa

    1.配置pom包 <dependency> <groupId>org.springframework.kafka</groupId> <artifactId& ...

  4. java中关于IO流的知识总结(重点介绍文件流的使用)

    今天做软件构造实验一的时候,用到了java文件流的使用,因为之前学的不是很踏实,于是决定今天好好总结一下, 也方便以后的回顾. 首先,要分清IO流中的一些基础划分: 按照数据流的方向不同可以分为:输入 ...

  5. TCP/IP 第三章

    1,ip协议不可靠.无连接特性介绍 不可靠:计算机A往计算机B发送数据报1,若途径的路由器缓存已满,或者ttl(time to live 生存周期)到了,则路由器直接丢弃数据包1,并产生icmp数据包 ...

  6. React躬行记(6)——事件

    React在原生事件的基础上,重新设计了一套跨浏览器的合成事件(SyntheticEvent),在事件传播.注册方式.事件对象等多个方面都做了特别的处理. 一.注册事件 合成事件采用声明式的注册方式, ...

  7. spring源码深度解析— IOC 之 bean 创建

    在 Spring 中存在着不同的 scope,默认是 singleton ,还有 prototype.request 等等其他的 scope,他们的初始化步骤是怎样的呢?这个答案在这篇博客中给出. s ...

  8. Java多线程(2)线程锁

    多线程访问同一个资源进行读写操作,就很容易出一些问题(比如我们常见的读者写者,生产者消费者模型)所以我们会选择对他们设置信号量或者加锁,来限制同一个时刻只有一个线程对某个对象进行操作. 多线程是一个蛮 ...

  9. 源码阅读 - java.util.concurrent (二)CAS

    背景 在JDK 5之前Java语言是靠synchronized关键字保证同步的,这会导致有锁 锁机制存在以下问题: (1)在多线程竞争下,加锁.释放锁会导致比较多的上下文切换和调度延时,引起性能问题. ...

  10. TCP中的粘包问题,以及用TCP和UDP实现多次聊天

    TCP协议 在连接内多和客户端说几句 #server端 import socket sk = socket.socket() sk.bind(('127.0.0.1',9001)) sk.listen ...