3

我想按顺序执行测试方法。我在 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是一个独立的测试方法。

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


理想情况下,依赖不应该是为了保持顺序,而是在前一种方法失败时跳过测试。TestNG 的这种强制措施造成了很多麻烦!

4

1 回答 1

1

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

于 2013-08-29T16:44:14.183 回答