TestNG 执行顺序 - 它混合了来自不同类的测试

Posted

技术标签:

【中文标题】TestNG 执行顺序 - 它混合了来自不同类的测试【英文标题】:TestNG execution order - it's mixing tests from different classes 【发布时间】:2019-06-26 09:25:31 【问题描述】:

TestNG 在执行时混合了来自不同类的测试。 每个班级都有一些测试。而不是像这样执行:

    FirstTestClass firstTest FirstTestClass secondTest

    FirstTestClass 第三次测试

    SecondTestClass firstTest

    SecondTestClass secondTest SecondTestClass 第三次测试

它像这样执行,混合来自每个类的测试:

    FirstTestClass firstTest SecondTestClass firstTest FirstTestClass secondTest SecondTestClass secondTest FirstTestClass 第三次测试 SecondTestClass 第三次测试

这是我的 XML:

<suite name="Mobile App Automation" verbose="1">
<test name="android">
    <parameter name="OS" value="android"/>
    <parameter name="remote" value="true"/>
    <classes>
        <class name="Test.FirstTestClass"/>
        <class name="Test.SecondTestClass"/>
    </classes>
</test>

我所有的测试都设置了优先级参数。但它应该只影响类内的测试,而不是现在正在发生的项目的每个测试。

有什么提示吗?

【问题讨论】:

【参考方案1】:

当您的代码从 testng 文件运行时,所有优先级=0 的测试用例首先运行,然后运行优先级=1 的测试,依此类推。因此,如果您希望测试用例以特定顺序运行,则需要从所有类的测试中删除优先级。 在 testng 文件中,您还可以添加 preserve-order="true" 以及 &lt;suite name="Mobile App Automation" verbose="1"&gt; 行,然后第一类中提到的所有测试将首先运行,然后是第二类中的测试,但如果有在类中设置优先级,测试的顺序将根据优先级运行。 所以你需要先去掉优先级,然后你可以使用preserve-order="true"来维护类的执行顺序。

【讨论】:

但是在另一个项目中,我们有相同的配置,但它的行为不是这样的。那可能吗?我们如何能够为给定类中的测试设置优先级,而不是根据整个项目? 这是不可能的,因为 testng 的行为是一致的,而且我过去也遇到过同样的问题。当测试从 testng xml 执行时,测试是根据整体优先级运行的,而不仅仅是类级别。是否有任何特定原因需要优先级,因为如果类中的某些测试相互依赖,那么您也可以在类中使用 dependsOn 参数,这也可以解决以特定顺序运行执行的目的。但是,如果您的所有测试都是独立的,那么您需要删除优先级。 谢谢萨米尔。我最终所做的是在 XML 中为我想要执行的每个测试类创建不同的 标记。它现在按我的预期工作。 太好了,很高兴为您提供帮助。如果对您有帮助,请投票并接受答案:) @Max 感谢您接受答案,尽管我仍然建议从测试中删除优先级,如果您的测试相互依赖,则使用 dependsOn 参数,因为将来您的测试数量将增加,这将使您难以在 testng xml 中输入每个测试,仅提及类名会容易得多。

以上是关于TestNG 执行顺序 - 它混合了来自不同类的测试的主要内容,如果未能解决你的问题,请参考以下文章

TODO appium在不同类中使用的是同一个session

TestNG 依赖于不同类的方法

如何跨具有TestNG测试的不同类访问dependsOnMethod或dependsOnGroup?

TestNG

testNG注解的使用和执行顺序

TestNG学习-002-annotaton 注解概述及其执行顺序