Testng 为什么我的@BeforeTest方法有时会被报告为以前测试的最后一个元素?

Testng 为什么我的@BeforeTest方法有时会被报告为以前测试的最后一个元素?,testng,testng-eclipse,Testng,Testng Eclipse,我有一个testNG套件,执行一些selenium代码。我正在测试我拥有的一个webapp中页面之间的导航。有四个不同的用户级别,根据用户类型提供对受限页面的访问。我还需要在Chrome和IE中测试这一点 我已经为testng.xml设置遵循了一个标准 我选择在一个testng.xml中收集所有用户和两种浏览器的所有导航测试。它总共提供了8个测试类,其中4个和4个在运行测试之前执行相同的配置类 testng.xml: <!DOCTYPE suite SYSTEM "http://testn

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

我已经为testng.xml设置遵循了一个标准

我选择在一个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个测试类都有这样的输出:

它们是红色还是绿色并不重要,但我希望xml中的所有测试标记都从两个级别开始,并且始终处于同一级别。还有一个级别高于所示的三个级别,但在这一点上并不重要

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

所有在末尾带有时间的线条都是屏幕截图中的实际线条。其余的都是匿名编辑的

注意我的@BeforeTest和@AfterTest方法,setup和tearDown,由于某种原因现在是如何被列为测试的。无论是在错误的测试中,没有任何真正的测试方法,还是在接下来的测试中,突然出现了实际的测试方法。这些错误每次都是完全随机的。没有特定的测试总是包含下一个测试。有时有三个,有时只有一个。唯一一致的是,它从来不是两个连续的。我真的不明白这里发生了什么。我很想更好地解释,或者做更多的研究,但我真的很难把这个问题归结为一个可搜索的术语。我有一种感觉,除非我能悬赏,否则这件事可能得不到答复


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

我的问题的答案似乎是,当@BeforeTest注释方法失败时会发生这种情况。换句话说,安装和拆卸显示在以前的测试层次结构中,这一事实很可能只是testNG方面的一个小报告错误。这不是任何错误的原因。在我的例子中,错误的原因和跳过的测试是由于安装方法不稳定造成的。它有时起作用,有时不起作用,这是因为我的页面上有敏感的小条件元素,有时是及时发现/加载的,有时不是

这正是我的想法,这可能更多的是代表性问题,而不是实际问题。