我有一个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”被调用两次。但是,当我调试它时,我可以清楚地看到它实际上只是在第一次调用时运行。之后执行继续进行,就好像调用它的第二行不存在一样。
答案 0 :(得分: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>
我从verbose="10" parallel="none"
代码中删除了<test>
,因为适用于我的布局没有这个...您可以将verbose="10"
添加到<suite>
{{1}}标记,以获取您需要的任何特定功能。请放心使用并发布您的结果,我们将很乐意为您提供进一步的帮助。如果没有看到您的跑步者配置或对设置的其余部分了解太多,可能还需要考虑其他一些事项。
您会发现这是一个更冗长的XML布局,但它在当时为我解决了同样的问题。您还可以考虑重新安排代码并制作一个@Test方法,将该XML上的所有方法作为单个测试调用,从而可以减少XML文件的长度。
答案 1 :(得分:0)
解决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>