【问题标题】:TestNG - cannot run same test twice in a suiteTestNG - 不能在一个套件中两次运行相同的测试
【发布时间】:2018-08-03 14:48:55
【问题描述】:

我有一个运行良好的 TestNG 测试套件,除了一件事:我不能两次运行相同的测试。我想运行两次测试的原因是我正在测试登录/注销用户的 Web 服务,并且我想验证登录是否有效,然后注销是否有效,然后再次登录,以便后续需要用户登录的测试才能继续。

这是我的 testng.xml 的相关部分:

<suite name="WebServiceTestSuite">
    <test name="webServiceTest" verbose="10" parallel="none">
        <classes>
            <class name="com.abcco.webservice.DivisionTest">
                <methods>
                    <include name="registrationCreateTest"></include>
                    <include name="registrationActivateTest"></include>
                    <include name="appUserLoginTest"></include>
                    <include name="appUserLogoutTest"></include>
                    <include name="appUserLoginTest"></include>
                    <include name="sessionValidateTest"></include>
                    <include name="sessionExtendTest"></include>
                </methods>
            </class>
        </classes>
    </test>
</suite>

如您所见,“appUserLoginTest”被调用了两次。但是,当我调试它时,我可以清楚地看到它只是在第一次被调用时才真正运行。之后执行继续进行,就好像调用它的第二行不存在一样。

【问题讨论】:

  • 为您要重复的每个测试创建一个别名方法。它只是调用该步骤的方法。

标签: java testng


【解决方案1】:

这实际上是在 TestNG 中设计的。我看到了两种可能的选择:

首先,考虑在您的测试中使用 DataProvider,以便可以使用不同的参数重复执行它们。

或者,更改 XML 布局,使每个方法都成为其自己标记的一部分。在这种配置中,XML 会更长,但作为套件的一部分,您可以根据需要多次调用测试方法。

编辑:现在有更多细节。

作为对您的评论的回应,这里有一个示例 XML 布局,当我遇到同样的问题时,它对我有用。试试这个:

<suite name="WebServiceTestSuite">
<test name="webServiceTest">
    <classes>
        <class name="com.abcco.webservice.DivisionTest">
            <methods>
                <include name="registrationCreateTest"></include>
            </methods>
        </class>
    </classes>
</test>
<test name="webServiceTest">
    <classes>
        <class name="com.abcco.webservice.DivisionTest">
            <methods>
                <include name="registrationActivateTest"></include>
            </methods>
        </class>
    </classes>
</test>
<test name="webServiceTest">
    <classes>
        <class name="com.abcco.webservice.DivisionTest">
            <methods>
                <include name="appUserLoginTest"></include>
            </methods>
        </class>
    </classes>
</test>
<test name="webServiceTest">
    <classes>
        <class name="com.abcco.webservice.DivisionTest">
            <methods>
                <include name="appUserLogoutTest"></include>
            </methods>
        </class>
    </classes>
</test>
<test name="webServiceTest">
    <classes>
        <class name="com.abcco.webservice.DivisionTest">
            <methods>
                <include name="appUserLoginTest"></include>
            </methods>
        </class>
    </classes>
</test>
<test name="webServiceTest">
    <classes>
        <class name="com.abcco.webservice.DivisionTest">
            <methods>
                <include name="sessionValidateTest"></include>
            </methods>
        </class>
    </classes>
</test>
<test name="webServiceTest">
    <classes>
        <class name="com.abcco.webservice.DivisionTest">
            <methods>
                <include name="sessionExtendTest"></include>
            </methods>
        </class>
    </classes>
</test>
</suite>

我从&lt;test&gt; 标签中删除了verbose="10" parallel="none",因为对我有用的布局没有这个...您可以将verbose="10" 添加到&lt;suite&gt; 标签以获得任何您需要的特定功能。尝试一下并发布您的结果,我很乐意为您提供进一步的帮助。在没有看到您的跑步者配置或对其余设置了解太多的情况下,可能还有其他一些事情需要考虑。

您会发现这是一个更加冗长的 XML 布局,但它在当时为我解决了同样的问题。您还可以考虑重新安排您的代码并创建一个 @Test 方法,该方法将调用此 XML 上的所有方法作为单个测试,从而可以减少 XML 文件的长度。

【讨论】:

  • 感谢您的意见。然而,这两种解决方案似乎都不起作用。使用 DataProvider 参数,它看起来像测试连续触发 n 次。这对我需要运行测试 A,然后测试 B,然后再次测试 A 的情况没有帮助。关于使用 XML 布局使每个方法都是其自己标签的一部分,有两件事:首先,在我上面的示例代码中,每个方法已经是其自己标签的一部分。其次,我没有看到一种不同的方式来布置 XML,以便每个方法都属于某个不同的标签(除了我上面提到的“包含”)。我认为 Bob 上面的别名建议会起作用。
  • 我稍后会发布更详细的答案(此评论不适用于代码示例和许多单词)。 Bob 的建议当然是可行的,但是当我遇到这个挑战时尝试同样的事情时,我最终得到了很多无关的代码。
【解决方案2】:

解决TestNG测试中代码重复的问题我只能找到这个解决方案:

创建一个 rootsuite.xml 文件,如:

<suite name="Description">
<suite-files>
    <suite-file path="../../Actions/Test1.xml"/>
    <suite-file path="../../Actions/Test2.xml"/>
    <suite-file path="Actions/Test3.xml"/>
    <suite-file path="../../Common/Close Browser.xml"/>
</suite-files>

<suite-files>
    <suite-file path="../../Actions/Test1.xml"/>
    <suite-file path="../../Actions/Test2.xml"/>
    <suite-file path="Actions/Test4.xml"/>
    <suite-file path="../../Common/Close Browser.xml"/>
</suite-files>
</suite>

重要!您不能在 Test1.xml、Test2.xml、Test3.xml、Test4.xml 中包含重复的套件文件 - 所有重复的套件都将被忽略。

请注意,TestNG 的版本必须至少为 6.9.9

<dependency>
  <groupId>org.testng</groupId>
  <artifactId>testng</artifactId>
  <version>6.9.9</version>
  <scope>test</scope>
</dependency> 

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2016-02-20
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多