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

标签 java maven 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 手动运行 testng 测试时,或使用 mvn clean test(Surefire 插件),它们运行完美。但是在尝试作为 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>

最佳答案

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

这只会发生在你类 LaunchTests 驻留在 src/main/java 并且你的套件 xml 文件 testng.xml 是指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/java 而是 src/main/java
  2. 您引用here,使用类似maven jar plugin 的东西来创建测试类的jar。 .

关于java - 尝试从主方法运行 TestNG 时无法在类路径中找到类,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/43094008/

相关文章:

java - 生成 JAVA 文件并在运行时使用它们

java - 如何创建调度程序以每晚 12:00 运行我的脚本- Selenium WebDriver

java - 运行 spring mvc + spring boot gradle java 9 项目,最终出现 java.lang.NoClassDefFoundError : java/sql/SQLException

Java - 访问for循环内外的变量

java - 如何使用单元格编辑从 sjg 网格调用 struts 操作

java - 如何解决: java. lang.NoSuchMethodError : javax. persistence.EntityManager.createStoredProcedureQuery(Ljava/lang/String;)

java - Netbeans 中的 .dat 文件未打包为 jar

java - 我可以使用光传感器来测量闪光之间的周期吗?有没有我可以使用的类(class)或者

maven - 如何通过 FTPS 使用 Wagon maven 插件

java - java testng 当条件达到时完成测试用例方法