37

我究竟如何从命令行运行 .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。有谁知道如何让这个工作?

4

13 回答 13

25

你需要有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

Update

转到文件夹MyProject并键入运行 java 命令,如下所示:-

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

我相信 testng.xml 文件在C:\Users\me\workspace\MyProject如果不是请给出testng.xml文件的完整路径

于 2012-08-10T07:46:19.233 回答
14

如果你使用的是 Maven,你可以很容易地从 cmd 行运行它,cd 到带有 testng.xml 的目录(或者你的任何名称,包含所有将运行的类的 xml)并运行这个 cmd:

mvn clean test -DsuiteXmlFile=testng.xml 

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

我不知道你是否使用 Maven 很重要,所以我没有将它包含在我的搜索词中,我想我会在这里提到它,以防其他人与我处于相同的情况。

于 2019-04-27T00:22:44.310 回答
7

好吧,经过 2 天的尝试,我无法从

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\* 上面的路径表示您通过安装 Eclipse 的 TESTNG 插件下载的 jcommander.jar 和 testng.jar 的位置。路径可能会有所不同,因此请确保只需打开 eclipse 的安装位置,转到插件并搜索 jcommander.jar。然后复制该位置,然后添加 * 以选择所有必要的 .jar。

C:\Test  

上面的路径表示项目中 testing.xml 的位置。获得所有必要的路径后,使用“;”附加它们。

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

于 2016-09-07T08:49:45.507 回答
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 案例。

于 2014-12-02T09:44:26.137 回答
3

在 Windows 问题上使用“;”作为分隔符已得到解决。

java -cp "path of class files; testng jar file path" org.testng.TestNG testng.xml

前任:-

java -cp ".\bin;..\common_lib\*;" org.testng.TestNG testng.xml
于 2014-10-03T17:51:56.657 回答
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
于 2016-09-28T14:42:33.767 回答
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

就是这样 !
如果您还有其他顾虑,请告诉我。

于 2018-04-05T13:14:20.913 回答
3

下面的命令对我有用。前提是所有必需的 jars,包括 testng jar 都保存在 lib 中。

java -cp "lib/*" org.testng.TestNG testng.xml
于 2018-06-08T09:46:30.027 回答
1

在 windows 中指定 jar 和类文件路径时,您需要使用分号作为分隔符。这解决了这个问题。
假设类文件在C:下。

java -cp ".;C:\testng.jar" org.testng.TestNG testing.xml
于 2014-09-01T10:45:41.340 回答
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\
于 2019-04-09T04:37:21.050 回答
1

如果以上答案都不起作用,您可以在 IDE 中运行测试,获取类路径并在您的命令中使用它。例如:如果您使用的是 Intellij IDEA,您可以在控制台顶部找到它(下面的屏幕截图)。 Intellij 控制台

单击突出显示的部分会展开并显示完整的类路径。

您需要删除文件夹内对 jar 的引用:JetBrains\IntelliJ IDEA Community Edition 2019.1.3

java -cp "path_copied" org.testng.TestNG testng.xml

于 2019-06-18T19:44:48.563 回答
0

我尝试了这篇文章的所有内容,但结果发现我缺少一个 jar 文件。这是我的解决方案:

如果您收到以下错误,请将 guice-4.2.2.jar 添加到您的 jar 文件中。如果您使用的是 maven,请添加以下依赖项。

<dependency>
    <groupId>com.google.inject</groupId>
    <artifactId>guice</artifactId>
    <version>4.1.0</version>
</dependency>


Exception in thread "main" java.lang.NoClassDefFoundError: com/google/inject/Stage
        at org.testng.internal.Configuration.<init>(Configuration.java:33)
        at org.testng.TestNG.init(TestNG.java:216)
        at org.testng.TestNG.<init>(TestNG.java:200)
        at org.testng.TestNG.privateMain(TestNG.java:1312)
        at org.testng.TestNG.main(TestNG.java:1304)
Caused by: java.lang.ClassNotFoundException: com.google.inject.Stage
        at java.base/jdk.internal.loader.BuiltinClassLoader.loadClass(BuiltinClassLoader.java:602)
        at java.base/jdk.internal.loader.ClassLoaders$AppClassLoader.loadClass(ClassLoaders.java:178)
        at java.base/java.lang.ClassLoader.loadClass(ClassLoader.java:522)
        ... 5 more
于 2020-11-06T18:52:21.260 回答
0

试试下面的命令

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

其中bin包含项目的编译类,jars文件夹包含执行 testng.xml 文件所需的 jars

Make sure not to use bin\* instead of bin\ as it will lead you to errors.

现在必要的 jar 将是您的 TestNG jar、jcommander jar 和 bsh jar,您可以从这里下载这些 jar

您的项目结构将如下所示 -

Project
    |_ _ bin
      | _ _ your compiled classes
    |_ _ jars
      |_ _ testng.jar
      |_ _ jcommander.jar
      |_ _ bsh.jar
    |_ _ testng.xml

我还写了一篇文章,解释了如何在创建新项目或在现有项目中运行 testng.xml 文件。希望您在文章中找到您的解决方案。

于 2021-04-25T06:00:58.717 回答