TestNG.xml 套件包含所有包的所有文件

Posted

技术标签:

【中文标题】TestNG.xml 套件包含所有包的所有文件【英文标题】:TestNG.xml suite to include all packages all files 【发布时间】:2012-09-10 11:35:48 【问题描述】:

即将用 Maven+TestNG+Selenium 实现一个测试框架。

你如何声明一个告诉 TestNG 运行 ALL 测试的 suite.xml?我已经尝试了所有这些都无济于事:

<!DOCTYPE suite SYSTEM "http://testng.org/testng-1.0.dtd" >
<suite name="Toplevel TestNG configuration" verbose="10">
  <test name="all">
    <classes>
      <class name="*" />
    </classes>
  </test>
</suite>

<!DOCTYPE suite SYSTEM "http://testng.org/testng-1.0.dtd" >
<suite name="Toplevel TestNG configuration" verbose="10">
  <test name="all">
    <groups>
      <run>
        <include name="*" />
        <exclude name="disabled" />
      </run>
    </groups>
  </test>
</suite>

<!DOCTYPE suite SYSTEM "http://testng.org/testng-1.0.dtd" >
<suite name="Toplevel TestNG configuration" verbose="10">
  <test name="all">
    <packages>
      <package name="*" />
    </packages>
  </test>
</suite>

我需要使用不同的参数指定不同的套件配置,但都运行所有测试。我可以挖掘的每个示例都明确列出了对我来说意义小于零的每个类或包。

【问题讨论】:

我同样觉得这真的很奇怪。正如人们所期望的那样,在test 目录中创建一个TestNG 测试似乎不仅可能,而且容易,但未能更新testng.xml,你瞧,测试实际上并不是作为套件的一部分运行... 【参考方案1】:

下面的作品来自 TestNg 的 3 级 Pkg

<package name="orgPkg.namePkg.appnamePkg.applicationPkg.functionalityPkg"/></packages>

【讨论】:

【参考方案2】:

您可以通过将 testng.xml 文件声明为

来添加包内的所有测试类
<!DOCTYPE suite SYSTEM "http://testng.org/testng-1.0.dtd" >
<suite name="sampleTest" parallel="false">

    <test name="sample-Test" preserve-order="true" verbose="2">
        <packages>
            <package name="org.sample.something.*"/>
        </packages>
    </test>

</suite>

没有地方可以通过测试作为搜索选项。如果你想做类似的事情,你必须在代码中实现套件并在那里实现搜索场景。

【讨论】:

列出数百个包和数千个类当然是我不打算做的事情。为什么我会?这是冗余信息。 Maven+TestNG默认可以找到所有测试,为什么指定套件时会丢失这个特性? (唯一的目的是添加参数...) 你的包名可以是正则表达式,将允许你运行一切。不过,这非常昂贵,因为 TestNG 必须走完整个课程路径才能做到这一点。 正是我想要的。那么为什么 class="*" 不起作用呢? (遍历类路径并不昂贵,因为它只在启动时发生一次。手动列出每个类/包昂贵且容易出错。)【参考方案3】:

假设您有一个三级包,您的测试类位于com.abc.xyz 包下。

<package name="*" /> </packages> , doesn't work. 
<package name="com.*.*" />  doesn't work. 
<package name="com.abc.*" />  does work.

【讨论】:

从我刚刚完成的测试来看,以下方法也可以:` ` 感谢 Dave ,似乎它是正则表达式而不是简单的通配符。就像 luis 说的那样, .* match all 。所以 com.* 将匹配 com.abc 和 comabc.abc 下的任何内容(只是猜测)【参考方案4】:

据我所知,应该使用 .* 来匹配它们。

【讨论】:

就是这样! 【参考方案5】:

AFAIK testng 没有您正在寻找的正则表达式选项。

但是,我认为你可以通过两种方式得到你想要的:

    如果您正在使用 Testng 插件在 Eclipse 上工作。您只需选择定义了所有包的测试文件夹即可。使用 maven,它主要是您的 src/test/java 文件夹,右键单击并说 run as testng。这样做会创建一个临时的 customsuite.xml,其中列出了您的所有类。您可以将 xml 保存为默认 xml。

    带有 maven 的surefire 插件可以选择指定includes,然后是一个模式。 您可以尝试将其设置为 */.java,我认为它会拾取所有测试用例(虽然没有尝试过)。然后,您可以将测试调用为 mvn test。

【讨论】:

点击包时TestNG这个customsuite.xml是怎么设计的? 是的。我想你已经回答了。 customsuite xml 是基于插件代码设计的。具体来说,我们在这里讨论的是哪个插件? Eclipse 的 testng 插件,它为您提供右键单击时看到的选项。

以上是关于TestNG.xml 套件包含所有包的所有文件的主要内容,如果未能解决你的问题,请参考以下文章

TestNG 在运行 pom.xml 中提到的所有测试套件之前运行一次

在 aws-device 场中运行特定的 TestNG testng.xml 套件文件

Maven 故障安全插件不运行 testNG XML 套件

testNG xml文件详解

TestNG:如何以编程方式运行自定义 TestNG.XML 文件

详解testng.xml