Testng 按预期顺序运行相关和独立的测试方法

Testng 按预期顺序运行相关和独立的测试方法,testng,Testng,我想按顺序执行测试方法。我在testng.xml中使用了保留顺序设置为true的类 <test name="group-test" preserve-order="true" > <classes> <class name="com.dependency.ClassA"> <methods> <include name="create"/>

我想按顺序执行测试方法。我在testng.xml中使用了保留顺序设置为true的类

<test name="group-test" preserve-order="true" >
    <classes>
        <class name="com.dependency.ClassA">
            <methods>
                <include name="create"/>
                <include name="enter"/>
                <include name="delete"/>
            </methods>
        </class>
    </classes>
</test>
执行测试后,我的输出为
在创建方法中,
在方法删除中,
在方法中输入

但我想要的是首先执行“create”然后“enter”然后“delete”方法。这里删除是一种独立的测试方法。

我在一篇文章中读到Cedric Beust提到,您可以在testng.xml中使用依赖项或显式地包含测试方法。我不明白为什么这是强制执行?如果我想以任意顺序同时执行独立和依赖的测试方法,该怎么办?我观察到,独立方法首先执行,然后是依赖方法



理想情况下,依赖项不应用于保持顺序,而应在前一种方法失败时跳过测试。TestNG的这种强制执行造成了很多麻烦

我和testng有着相同的主要缺陷(我必须说是明显的)。到目前为止,我找到的最佳解决方案是使用优先级。EG@测试(优先级=10),然后是下一个测试@测试(优先级=20)等。到目前为止,我发现的文档和互联网搜索都表示使用@测试(优先级=1),然后@测试(优先级=2),但随后您会遇到明显的未来维护问题:每次在中间添加一个测试时,都必须重新测试所有的测试。所以这个10、20等的解决方案要好得多,因为它至少允许您在test1和test2之间添加@Test(priority=11)、12等。我已经证实,它确实有效。幸运的是testng没有强制执行1,2,3,否则我们真的会有麻烦!哦,顺便说一句,如果您有组和方法依赖性(除非需要,否则不应在所有测试中使用!),那么它看起来就像@Test(priority=10,groups=“login”)、@Test(priority=20,groups=“login”)等等。另外,您似乎已经知道了,但其他人可能会想知道,请记住,如果使用依赖项来设置测试运行顺序,那么如果一个测试失败,那么之后的所有测试都将被跳过——这根本不是您想要的。无论如何,希望这能帮助你摆脱困境,至少在找到更好的解决方案之前。祝你好运

@CedricBeust如果你正在读这篇文章。请提出解决办法。缺少此功能实际上阻碍了我们实现基于TestNG的健全测试套件的方式,我们已经开发了这套测试套件,但无法执行!dependsOnMethods将覆盖您在XML中指定的任何内容。如果需要严格排序,请对所有方法使用dependsOnMethods。@CedricBeust我不能仅为严格排序而对所有方法使用dependsOnMethods。我只想在真正需要依赖时才使用它。您是否可以为此提供任何解决方案?创建TestNG时没有考虑到该特性有什么具体原因吗?这是一个非常基本和明显的要求。我迷路了。您想要严格的方法排序,但您拒绝使用正好做到这一点的功能。@Cedricbe我当然希望“保留顺序”的功能能按它应该的方式工作(对于严格排序),dependsOnMethods能按它应该的方式工作(仅对于依赖项而不是严格排序).我刚刚读到你的问题,你现在在优先顺序上遇到了问题!:P我正在努力避免查看TestNG源代码并编写补丁。
public class ClassA {


@Test()
public void Create() throws Exception
{
    System.out.println("in method create");

}   
@Test(dependsOnMethods= "Create")
public void Enter() throws Exception
{
    System.out.println("in method Enter");

}
@Test()
public void delete() throws Exception
{
    System.out.println("in method delete");

}