2

**首先:我已经阅读了这里关于如何做到这一点的每一篇文章,我正在遵循这封信的所有说明,包括来自 Maven 本身的说明。

我已经使用 TestNG 将 Eclipse Selenium 项目转换为 Maven 项目。我无法让 Maven 从 Test.XML 文件运行我的测试,而不是在默认模式下运行,它只选择文件名中带有“Test”一词的任何内容......我可以直接执行 test.xml 和所有内容有效,所以我认为我的转换正确。由于我正在从现有框架进行转换,因此将所有内容切换为使用默认的“只需抓取任何称为 'test' 的东西”所需的努力是令人望而却步的,我希望 SureFire 使用我的 Test.XML 文件。

我是 Maven 新手,所以请原谅我没有使用正确的术语,但是:当我以 TEST 的“目标”“运行”POM 文件时,它只会忽略我的 test.xml 文件并运行其中包含“test”一词的任何内容,我通过更改名称等验证了这一点......我主要从 Eclipse 运行,几次我尝试命令行的结果相同。

这是我的POM:

<project xmlns="http://maven.apache.org/POM/4.0.0" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xsi:schemaLocation="http://maven.apache.org/POM/4.0.0 http://maven.apache.org/xsd/maven-4.0.0.xsd">
    <modelVersion>4.0.0</modelVersion>
    <groupId>test</groupId>
    <artifactId>TestSuite</artifactId>
    <version>0.0.1-SNAPSHOT</version>
    <packaging>jar</packaging>
    <name>TestSuite</name>
    <url>http://maven.apache.org</url>
    <properties>
        <project.build.sourceEncoding>UTF-8</project.build.sourceEncoding>
    </properties>
    <build>
        <plugins>
            <plugin>
                <groupId>org.apache.maven.plugin</groupId>
                <artifactId>maven-surefire-plugin</artifactId>
                <version>2.16</version>
                <configuration>
                    <suiteXmlFiles>
                        <suiteXmlFile>src/test/resources/test.xml</suiteXmlFile>
                    </suiteXmlFiles>
                </configuration>
            </plugin>
        </plugins>
    </build>
    <dependencies>
        <dependency>
            <groupId>org.testng</groupId>
            <artifactId>testng</artifactId>
            <version>6.8.5</version>
            <scope>test</scope>
        </dependency>
        <dependency>
            <groupId>net.sourceforge.jexcelapi</groupId>
            <artifactId>jxl</artifactId>
            <version>2.6</version>
        </dependency>
        <dependency>
            <groupId>org.seleniumhq.selenium</groupId>
            <artifactId>selenium-java</artifactId>
            <version>2.35.0</version>
        </dependency>
    </dependencies>
</project>

如果您需要更多信息,请告诉我,我会修改,但我的 TestNG 文件实际上只是调用了一个测试类,如果我直接将其作为 testNG 测试执行,它就可以工作。其余代码有效,所以我假设不是那样。也许是 Eclipse 中的一个设置?

4

2 回答 2

0

我无法让 Maven 从 Test.XML 文件运行我的测试,而不是在默认模式下运行,在默认模式下,它只会选择文件名中带有“Test”一词的任何内容。

这可能是因为Maven Surefire 插件的默认包含模式

默认情况下,Surefire 插件会自动包含所有具有以下通配符模式的测试类:

“**/Test*.java” - 包括其所有子目录和所有以“Test”开头的 java 文件名。“**/*Test.java” - 包括其所有子目录和所有以“Test”结尾的 java 文件名。“**/*TestCase.java” - 包括其所有子目录和所有以“TestCase”结尾的 java 文件名。

而且,如您所知,“套件 XML 文件配置将覆盖包含和排除模式并运行套件文件中的所有测试。”

我无法确定,但读取 test.xml 文件似乎存在一些问题(文件未找到、解析、编码问题等),并且 Surefire 回退到包含/排除策略。

你可以做一个小测试来证明这一点。在“配置”中添加“包含”和/或“排除”部分,并排除除随机类之外的所有类。如果运行该随机类,则简单地忽略“suiteXmlFiles”。

希望这将缩小范围。

于 2013-12-07T00:22:21.087 回答
0

groupid 不正确。您在插件中缺少一个 s 。它应该是<groupId>org.apache.maven.plugins</groupId>

我认为正在发生的事情是因为 maven 默认为它的默认测试阶段配置而忽略了你的。

希望能帮助到你。

于 2013-12-09T14:56:54.633 回答