为什么我的@BeforeTest方法有时被报告为上一次测试的最后一个元素?

时间:2017-11-30 16:46:16

标签: testng testng-eclipse

我有一个testNG套件,执行一些selenium代码。我正在测试我在webapp中的页面之间的导航。有四种不同的用户级别,可根据用户类型访问受限制的页面。我还需要在Chrome和IE中测试它。

我已经为我的testng.xml设置了Mkyong.com tutorial

我选择在单个testng.xml中为所有用户和两个浏览器收集所有导航测试。它总共提供了8个测试类,其中4和4在运行测试之前执行了相同的配置类。

的testng.xml:

<!DOCTYPE suite SYSTEM "http://testng.org/testng-1.0.dtd" >
<suite name="Releaseboard Local tests" parallel="none">


    <test name="user1 chrome">
        <classes>
            <class name="testsuite.ChromeConfig" />
            <class name="testcase.User1NavigationTests" />
        </classes>
    </test>
    <test name="user2 chrome">
        <classes>
            <class name="testsuite.ChromeConfig" />
            <class name="testcase.User2NavigationTests" />
        </classes>
    </test>
    <test name="user3 chrome">
        <classes>
            <class name="testsuite.ChromeConfig" />
            <class name="testcase.User3NavigationTests" />
        </classes>
    </test>
    <test name="user4 chrome">
        <classes>
            <class name="testsuite.ChromeConfig" />
            <class name="testcase.User4NavigationTests" />
        </classes>
    </test>


    <test name="user1 ie">
        <classes>
            <class name="testsuite.IeConfig" />
            <class name="testcase.User1NavigationTests" />
        </classes>
    </test>
    <test name="user2 ie">
        <classes>
            <class name="testsuite.IeConfig" />
            <class name="testcase.User2NavigationTests" />
        </classes>
    </test>
    <test name="user3 ie">
        <classes>
            <class name="testsuite.IeConfig" />
            <class name="testcase.User3NavigationTests" />
        </classes>
    </test>
    <test name="user4 ie">
        <classes>
            <class name="testsuite.IeConfig" />
            <class name="testcase.User4NavigationTests" />
        </classes>
    </test>
</suite>

现在,当我运行这些测试时,我期望所有8个测试类的输出:

enter image description here

如果它们是红色或绿色并不重要,但我希望xml中的所有测试标签都从两个级别开始,并始终处于同一级别。还有一个级别高于显示的三个级别,但此时无关紧要。

然而,我得到的输出是,有时下一级别2显示在前一级别1内。然后它失败了@BeforeTest注释方法。这本身并不会那么糟糕,因为它实际上也在上一次测试失败后在1级运行测试。但是,如果测试已显示在前一个测试中,则它始终在级别1的@BeforeTest失败,并且会自动跳过所有级别3的测试方法。见下图:

enter image description here

所有带有时间的行都是截图中的实际行。其余的编辑是为了匿名。

请注意我的@BeforeTest和@AfterTest方法,setup和tearDown现在由于某种原因被列为测试。在错误的测试里面,没有任何真正的测试方法,而在里面,突然用实际的测试方法。这些错误每次都是完全随机的。没有特定的测试总是包含下一个。有时候有三个,有时只有一个。唯一一致的是,它永远不会连续两次。我真的不明白这里发生了什么。我喜欢更好地解释,或做更多的研究,但我很难将这个问题煮到一个可搜索的术语。我有一种感觉,这可能无法回答,直到我能得到赏金。

我会发布任何其他任何人都可以想到的代码示例,但是现在我不知道从哪里开始。

1 个答案:

答案 0 :(得分:1)

似乎我的问题的答案是,当@BeforeTest注释方法失败时会发生这种情况。换句话说,设置和拆除显示在先前的测试层次结构中的事实可能只是testNG方面的次要报告错误。这不是任何错误的原因。在我的情况下,错误的原因和跳过的测试是不稳定的设置方法的结果。它有时,有时不工作的事实是由于我的页面上有敏感的小条件元素,有时会及时发现/加载,有时则没有。