java 如何从Maven命令行运行testng.xml

o7jaxewo  于 2023-01-11  发布在  Java
关注(0)|答案(5)|浏览(181)

我在pom.xml中有以下条目,其中包含配置中定义的套件文件。

<plugin>
    <groupId>org.apache.maven.plugins</groupId>
    <artifactId>maven-surefire-plugin</artifactId>
    <version>2.19.1</version>
    <configuration>
        <suiteXmlFiles>
            <suiteXmlFile>testng.xml</suiteXmlFile>
        </suiteXmlFiles>
    </configuration>
</plugin>

使用maven在cmd中运行这个测试的正确方法是什么?我可以使用下面的命令运行测试,但是当testng.xml已经在pom中定义时,在命令中再次指示它是没有意义的。

mvn clean test -DsuiteXmlFile=testng.xml
7rfyedvj

7rfyedvj1#

最简单的解决方案是,在surefire插件中添加以下行。

<suiteXmlFiles>
    <!-- pass testng.xml files as argument from command line -->
    <suiteXmlFile>${suiteXmlFile}</suiteXmlFile>
</suiteXmlFiles>

并运行您的xml文件,如下所示,

mvn clean test -Dsurefire.suiteXmlFiles=/path/to/testng.xml
mzmfm0qo

mzmfm0qo2#

首先,请在pom.xml中添加改进...需要添加执行部分:

<executions>
<execution>
    <phase>test</phase>
    <goals>
        <goal>test</goal>
    </goals>
</execution>
</executions>

第二,你可以在pom.xml中创建一个带有变量的section,然后从cmd中调用它。

<properties>
<defaultSuiteFiles>
        ./Sets/Suits/CMS_Administration_SiteBackup_029.xml,
    </defaultSuiteFiles>
    <suiteFile>${defaultSuiteFiles}</suiteFile>
</defaultSuiteFiles>
</properties>
...
...
<suiteXmlFiles>
    <suiteXmlFile>${suiteFile}</suiteXmlFile>
</suiteXmlFiles>

原型pom.xml的结果

<?xml version="1.0" encoding="UTF-8"?>
<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">
.....
.....

<properties>        
    <defaultSuiteFiles>
        ./Sets/Suits/CMS_Administration_SiteBackup_029.xml,
    </defaultSuiteFiles>
    <suiteFile>${defaultSuiteFiles}</suiteFile>

    <project.build.sourceEncoding>UTF-8</project.build.sourceEncoding>
</properties>

<profiles>
    <profile>
        <id>Base configuration</id>
        <activation>
            <activeByDefault>true</activeByDefault>
        </activation>
        <build>
            <defaultGoal>install</defaultGoal>
            <plugins>                    
                <plugin>
                    <groupId>org.apache.maven.plugins</groupId>
                    <artifactId>maven-surefire-plugin</artifactId>
                    <version>2.19.1</version>
                    <inherited>true</inherited>
                    <executions>
                        <execution>
                            <phase>test</phase>
                            <goals>
                                <goal>test</goal>
                            </goals>
                        </execution>
                    </executions>
                    <configuration>
                        <suiteXmlFiles>
                            <suiteXmlFile>${suiteFile}</suiteXmlFile>
                        </suiteXmlFiles>                            
                    </configuration>
                </plugin>
            </plugins>
        </build>
    </profile>
</profiles>
<dependencies>
    <dependency>
        <groupId>org.seleniumhq.selenium</groupId>
        <artifactId>selenium-java</artifactId>
        <version>3.3.1</version>
    </dependency>
</dependencies>
</project>

并使用这个,如何为cmd的例子:mvn test -DdefaultSuiteFiles="./YOUR_DIRECTORY/YOUR_SUITE.xml,"

说明:在pom.xml中,你设置了xml的默认值和变量。而且,如果你在cmd中使用变量,你将重写值。

64jmpszr

64jmpszr3#

如果你有一个固定的testng xml,那么你只需要做mvn clean test,在maven的测试阶段,surefire插件会默认执行,并且xml硬编码会被选中。

6mw9ycah

6mw9ycah4#

    • 需要在suiteXmlFiles标记之间传递testng.xml文件内容根目录的路径**

例如,对于我的项目,我使用文件名AllTests.xml代替testng.xml,它位于文件夹TestSuites下

<plugin>
                <groupId>org.apache.maven.plugins</groupId>
                <artifactId>maven-surefire-plugin</artifactId>
                <version>3.0.0-M5</version>
                <configuration>
                    <suiteXmlFiles>
                        <suiteXmlFile>src/test/resources/TestSuites/AllTests.xml</suiteXmlFile>
                    </suiteXmlFiles>
                </configuration>
 </plugin>

现在运行mvn clean test,它将从pom.xml中选择测试套件文件,并运行该套件中提到的所有测试类。
注:
1.我们需要提及testng.xml文件完整路径的原因是,默认情况下,maven将直接在项目级别下搜索此文件
1.如果您使用IntelliJ,您可以通过右键单击文件-〉复制路径-〉内容根的路径,找到testng.xml文件的内容根的路径

e3bfsja2

e3bfsja25#

遵循与@S-Kerrigan提供的解决方案完全相同的解决方案。但它在以下场景中的行为不同。
在我的文件夹中,有3个testng xml文件,但我在运行时只传递了一个testng xml文件,但它正在执行所有三个xml文件。
在pom文件的属性中定义如下:

<defaultSuiteFiles>sampletestng</defaultSuiteFiles>
<suiteFile>${defaultSuiteFiles}</suiteFile>

插件如下所示:

<plugin>
  <groupId>org.apache.maven.plugins</groupId>
    <artifactId>maven-surefire-plugin</artifactId>
    <version>${maven-surefire-plugin.version}</version>
     <configuration>
      <testFailureIgnore>true</testFailureIgnore>
        <suiteXmlFiles>
         <suiteXmlFile>${suiteFile}</suiteXmlFile>
        </suiteXmlFiles>
    </configuration>
</plugin>

在CMD mvn清理测试中-默认套件文件= src/测试/资源/测试套件/前提条件. xml

相关问题