尝试从主方法运行 TestNG 时无法在类路径中找到类

新手上路,请多包涵

我使用 Maven 运行我的 Selenium Testng 测试,但我正在尝试创建可执行的 jar,因此其他团队成员可以简单地从他们的桌面运行一个自动化套件,只需最少的设置。

所以我添加了一个主要的“runner”方法来创建一个可执行的 jar。

 public class LaunchTests {

public static void main(String[] args) {
    TestListenerAdapter tla = new TestListenerAdapter();
    TestNG testng = new TestNG();
    List<String> suites = new ArrayList();
    suites.add("testng.xml");//path to xml..
    testng.setTestSuites(suites);
    testng.run();

}

}

我最好的猜测是需要向 POM.xml 添加一些东西吗?

当从 eclipse 或使用 mvn clean test(Surefire 插件)手动运行 testng 测试时,它们运行完美。但是在尝试作为 Java 程序运行时出现此错误。

     Exception in thread "main" org.testng.TestNGException:
Cannot find class in classpath: package.TestOne
    at org.testng.xml.XmlClass.loadClass(XmlClass.java:81)
    at org.testng.xml.XmlClass.init(XmlClass.java:73)
    at org.testng.xml.XmlClass.<init>(XmlClass.java:59)
    at org.testng.xml.TestNGContentHandler.startElement(TestNGContentHandler.java:548)
    at com.sun.org.apache.xerces.internal.parsers.AbstractSAXParser.startElement(Unknown Source)
    at com.sun.org.apache.xerces.internal.parsers.AbstractXMLDocumentParser.emptyElement(Unknown Source)
    at com.sun.org.apache.xerces.internal.impl.dtd.XMLDTDValidator.emptyElement(Unknown Source)
    at com.sun.org.apache.xerces.internal.impl.XMLDocumentFragmentScannerImpl.scanStartElement(Unknown Source)
    at com.sun.org.apache.xerces.internal.impl.XMLDocumentFragmentScannerImpl$FragmentContentDriver.next(Unknown Source)
    at com.sun.org.apache.xerces.internal.impl.XMLDocumentScannerImpl.next(Unknown Source)
    at com.sun.org.apache.xerces.internal.impl.XMLDocumentFragmentScannerImpl.scanDocument(Unknown Source)
    at com.sun.org.apache.xerces.internal.parsers.XML11Configuration.parse(Unknown Source)
    at com.sun.org.apache.xerces.internal.parsers.XML11Configuration.parse(Unknown Source)
    at com.sun.org.apache.xerces.internal.parsers.XMLParser.parse(Unknown Source)
    at com.sun.org.apache.xerces.internal.parsers.AbstractSAXParser.parse(Unknown Source)
    at com.sun.org.apache.xerces.internal.jaxp.SAXParserImpl$JAXPSAXParser.parse(Unknown Source)
    at com.sun.org.apache.xerces.internal.jaxp.SAXParserImpl.parse(Unknown Source)
    at javax.xml.parsers.SAXParser.parse(Unknown Source)
    at org.testng.xml.XMLParser.parse(XMLParser.java:38)
    at org.testng.xml.SuiteXmlParser.parse(SuiteXmlParser.java:16)
    at org.testng.xml.SuiteXmlParser.parse(SuiteXmlParser.java:9)
    at org.testng.xml.Parser.parse(Parser.java:172)
    at org.testng.TestNG.initializeSuitesAndJarFile(TestNG.java:302)
    at org.testng.TestNG.run(TestNG.java:991)
    at util.LaunchTests.main(LaunchTests.java:17)

测试.xml

 <?xml version="1.0" encoding="UTF-8"?>
<!DOCTYPE suite SYSTEM "http://testng.org/testng-1.0.dtd">
<suite name="Suite1" parallel="methods" thread-count="1">

    <test name="Chrome Adviser Portal" allow-return-values="true"
        thread-count="1">
        <parameters>
            <parameter name="browser" value="chrome" />
            <parameter name="loginType" value="adviser" />
        </parameters>
        <classes>
            <class name="adviserPortal.AdviserLogin" />
        </classes>
    </test>
</suite>

原文由 dsidler 发布,翻译遵循 CC BY-SA 4.0 许可协议

阅读 552
1 个回答

您提到您可以通过 maven surefire 插件从 eclipse 中运行测试,并且您不能仅在执行 main 方法时运行它。

This can only happen when you class LaunchTests in src/main/java and your suite xml file testng.xml is referring to classes within src/test/java . src/main/java 中的 Java 类对驻留在 src/test/java 中的 Java 类没有可见性。这解释了为什么 TestNG 抛出异常 Cannot find class in classpath

如果您的 LaunchTests 移动到 src/test/java 那么默认情况下它不会包含在您正在构建的 uber jar(可执行 jar)中,因为测试类被省略了。

所以如果你真的想做到这一点,你有两种选择

  1. 将所有测试类从 src/test/java 移动到 src/main/java 然后使用它(你的 pom 文件中的 Surefire 插件配置可能需要一些调整,让它知道你的测试源不是 src/test/javasrc/main/java
  2. 您可以使用类似 maven jar plugin 之类的东西来创建一个 jar 测试类,参考 这里

原文由 Krishnan Mahadevan 发布,翻译遵循 CC BY-SA 3.0 许可协议

撰写回答
你尚未登录,登录后可以
  • 和开发者交流问题的细节
  • 关注并接收问题和回答的更新提醒
  • 参与内容的编辑和改进,让解决方法与时俱进
推荐问题