如何从命令行运行TestNG

40

我该如何在命令行中运行一个 .java 的 TestNG 项目?

我已经阅读了 TestNG 文档,并尝试了以下方法,但都没有成功:

C:\projectfred> java org.testng.TestNG testng.xml 

我的项目中有以下的testng.xml文件:

<!DOCTYPE suite SYSTEM "http://testng.org/testng-1.0.dtd" >  
<suite name="SuiteAll" verbose="1">
    <test name="TestAll">  
        <packages>  
            <package name="com.project.fred.tests"/>
        </packages>  
    </test>  
</suite>

我得到的错误是:

Exception in thread "main" java.lang.NoClassDefFoundError: org/testng/TestNG
Caused by: java.lang.ClassNotFoundException: org.testng.TestNG
        at java.net.URLClassLoader$1.run(Unknown Source)
        at java.security.AccessController.doPrivileged(Native Method)
        at java.net.URLClassLoader.findClass(Unknown Source)
        at java.lang.ClassLoader.loadClass(Unknown Source)
        at sun.misc.Launcher$AppClassLoader.loadClass(Unknown Source)
        at java.lang.ClassLoader.loadClass(Unknown Source)
Could not find the main class: org.testng.TestNG.  Program will exit.

显然,我在命令行中没有正确引用TestNG。有人知道如何使其工作吗?

14个回答

27

你需要将testng.jar放在类路径下。

尝试使用C:\projectfred> java -cp "path-tojar/testng.jar:path_to_yourtest_classes" org.testng.TestNG testng.xml命令。

更新:

在Linux上运行此命令,在Windows上也应该有类似的命令。

test/bin# java -cp ".:../lib/*" org.testng.TestNG testng.xml

目录结构:

/bin - All my test packages are under bin including testng.xml
/src - All source files are under src
/lib - All libraries required for the execution of tests are under this.

我编译所有的源文件后,它们会放在 bin 目录下。因此,在类路径中,我需要指定 bin 目录的内容以及所有库,如 testng.xml、日志记录器等。如果您不想指定 testng.xml 可用的完整路径,则还需将 testng.xml 复制到 bin 文件夹中。

 /bin
    -- testng.xml
    -- testclasses
    -- Properties files if any.
 /lib
    -- testng.jar
    -- log4j.jar

更新:

进入文件夹MyProject并按照以下方式输入Java命令以运行:

java -cp ".: C:\Program Files\jbdevstudio4\studio\plugins\*" org.testng.TestNG testng.xml

我相信testng.xml文件在C:\Users\me\workspace\MyProject下,如果不是,请提供testng.xml文件的完整路径。

答案如下:

我认为 testng.xml 文件位于 C:\Users\me\workspace\MyProject 下。如果不是,请提供 testng.xml 文件的完整路径。


请问您能否提供您的测试类和相关库所在的层次结构? - Patton
是的,我尝试过了,非常感谢你的努力。我得到了与之前相同的错误,即 org.testng.TestNG 的 NoClassDefFoundError。我正在使用 Eclipse 的 TestNG 插件,这会有影响吗? - Fuzzy Analysis
1
在这种情况下,您的测试类不在类路径下。您是否在存在类文件的相同目录下?因为您使用了“.”,它表示当前目录,所以如果您不在类文件所在的目录中,则建议您使用完整路径到该文件夹。顺便说一下,我能够在我的机器上使用我在答案中提到的命令完美地运行所有测试。如果您无法运行,请检查类路径。 - Patton
我想我的无能在这里显露出来:S。我将尝试找到一种在Jenkins上以Ant任务或其他方式运行TestNG测试的方法。这是我的最新帖子:https://dev59.com/ymQn5IYBdhLWcg3wgnTg - Fuzzy Analysis
最终通过一个Ant脚本使其工作,我很快会发布。 - Fuzzy Analysis
显示剩余6条评论

16

如果您正在使用Maven,您可以非常轻松地从cmd行运行它,进入具有testng.xml的目录(或者你的命名为其他名称的xml,其中包含所有将运行的类),并运行此命令:

mvn clean test -DsuiteXmlFile=testng.xml 

这个页面提供了更详细的解释:如何从Maven命令行运行testng.xml

我之前不知道是否使用Maven很重要,所以在我的搜索词中没有包含它,我想在这里提一下,以防其他人和我有相同的情况。


7

经过两天的尝试,我仍然不知道为什么无法运行来自 http://www.tutorialspoint.com/testng/testng_environment.htm 的示例代码。

C:\TestNG_WORKSPACE>java -cp "C:\TestNG_WORKSPACE" org.testng.TestNG testng.xml

解决此问题的方法如下: 我得出了以下结论:首先安装 Eclipse,并下载 TestNG 插件。然后按照教程说明使用 javac 从 cmd 创建和编译测试类,添加 testng.xml。要在 Windows 10 的 cmd 上运行 testng.xml,请运行以下命令:
java -cp C:\Users\Lenovo\Desktop\eclipse\plugins\org.testng.eclipse_6.9.12.201607091356\lib\*;C:\Test org.testng.TestNG testng.xml

澄清一下:C:\Users\Lenovo\Desktop\eclipse\plugins\org.testng.eclipse_6.9.12.201607091356\lib\*上面的路径代表您通过安装TESTNG插件下载的jcommander.jar和testng.jar的位置。路径可能会有所不同,因此要确保,请打开eclipse的安装位置,进入插件并搜索jcommander.jar。然后复制该位置,之后添加*以选择所有必要的.jars文件。

C:\Test  

上面的路径表示测试.xml在您的项目中的位置。获取所有必要的路径后,使用“;”将它们附加在一起。

我希望我对你们中的一些人有所帮助 :)


6
非常感谢,这真的非常有帮助。我已经能够使用命令行运行我的TestNG类,但我仍然想总结一下如下...
1) Set the classpath for the testng.jar in the environment variables
(either manually or via command line).

2) Create a new folder "MyTest".

3) Compile all your classes(testNG+java) and put them(.class files )
in a new folder "Mytest\bin".

4) Put your 'testng.xml' and '.properties' files to "Mytest\bin"
again.

5) Put all the .jar files (testng,selenium... etc) in a new folder
"Mytest\lib".

6) Browse to the folder "bin" via command line and run the command
java -cp "..\lib\*;" org.testng.TestNG testng.xml

这将运行您的TestNG测试用例。


3
以下命令适用于我。前提是所有必需的jar包,包括testng jar包都保存在lib中。
java -cp "lib/*" org.testng.TestNG testng.xml

3

准备包含以下内容的MANIFEST.MF文件

Manifest-Version: 1.0
Main-Class: org.testng.TestNG

将所有的测试类和依赖项打包在同一个jar包中,命名为 tests.jar
jar cmf MANIFEST.MF tests.jar -C folder-with-classes/ .

注意末尾的“.”,将 folder-with-classes/ 替换为正确的文件夹名称或路径。

创建 testng.xml 文件,并按以下内容填写:

<?xml version="1.0" encoding="UTF-8"?>
<!DOCTYPE suite SYSTEM "http://testng.org/testng-1.0.dtd" >
<suite name="Tests" verbose="5">
  <test name="Test1">
    <classes>
      <class name="com.example.yourcompany.qa.Test1"/>
    </classes>
  </test>  
</suite>

com.example.yourcompany.qa.Test1替换为您的测试类的路径。

运行你的测试。

java -jar tests.jar testng.xml

3
在Windows中使用“;”作为分隔符问题已得到解决。
java -cp "path of class files; testng jar file path" org.testng.TestNG testng.xml

ex:-

java -cp ".\bin;..\common_lib\*;" org.testng.TestNG testng.xml

3
我曾经遇到同样的问题,因为我从Eclipse下载了TestNG插件。以下是我采取的方法:
  1. 将TestNG添加到项目库后,在项目中创建一个名为lib(名称可以是任何)的文件夹:
  2. 转到“C:\Program Files\Eclipse\eclipse-java-mars-R-win32-x86_64\eclipse\plugins”位置,并将com.beust.jcommander_1.72.0.jarorg.testng_6.14.2.r20180216145.jar文件复制到创建的文件夹(lib)中。
注意:文件名应为testng.jar和jcommander.jar
  1. 现在启动CMD,导航到您的项目目录,然后键入:
    Java -cp C:\Users\User123\TestNG\lib*;C:\Users\User123\TestNG\bin org.testng.TestNG testng.xml
就这样!如果您还有其他问题,请告诉我。

我正在按照你在这里提出的方案进行操作,但是我遇到了一个错误:Error: Could not find or load main class java Caused by: java.lang.ClassNotFoundException: java 请帮忙! - zara
1
使用Eclipse顶部菜单栏中的项目菜单执行项目清理。 - cruisepandey

1

在阅读了各种帖子后,我在 IntelliJ Idea 上进行了尝试,这对我很有效:

java -cp "./lib/*;Path to your test.class"  org.testng.TestNG testng.xml

这是我的目录结构:

/lib
  -- all jar including testng.jar
/out
  --/production/Example1/test.class
/src
 -- test.java
testing.xml

所以通过这个命令来执行:

java -cp "./lib/*;C:\Users\xyz\IdeaProjects\Example1\out\production\Example1" org.testng.TestNG testng.xml

我的项目目录Example1在路径中:

C:\Users\xyz\IdeaProjects\

1
在Windows中指定jar和类文件路径时,您需要使用分号作为分隔符。这样可以解决问题。
假设类文件位于C:.下。
java -cp ".;C:\testng.jar" org.testng.TestNG testing.xml

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接