按预期顺序运行依赖和独立的测试方法



我想按顺序执行测试方法。我在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>

我的测试班是

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");
}

执行测试后,我的输出为
在方法创建中,
在方法delete中,
在方法中输入

但我想要的是先执行"创建",然后执行"输入",然后再执行"删除"方法。这里delete是一种独立的测试方法。

我在谷歌小组的一个问题上读到,Cedric Beust提到,你可以使用依赖项在testng.xml中显式包含测试方法。我不明白为什么这是强制执行?如果我想以我想要的任何顺序一起执行独立和依赖的测试方法,该怎么办?我观察到,独立的方法首先被执行,然后是依赖的方法。


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

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

最新更新