我正在使用selenium来自动化销售点应用程序的一些测试。由于外部程序用于管理应用程序与外部设备(打印机,现金抽屉......)之间的通信,因此一次只能打开一个浏览器会话或外部程序混淆(例如:现金抽屉事件一个浏览器会话在另一个浏览器会话中被触发。)
我目前在testng.xml文件中执行以下操作:
<suite name="Test Suite" verbose="10" preserve-order="True">
<test name="Item Entry -- Quantity Required -- Basic" annotations="JDK">
<parameter name = "filepath" value = "C:\Java Projects\Gravity\config\US\" />
<classes>
<class name="tests.itementry.quantityrequired.BasicPath"/>
</classes>
</test>
<test name = "Item Entry -- Quantity Required -- Cancel">
<classes>
<class name = "tests.itementry.quantityrequired.Cancel" />
</classes>
</test>
</suite>
我之前尝试过指定包而不是类,但这导致测试并行运行(多个浏览器同时打开)。我知道另一种选择是将测试组合成一个类(这可能是最好的设计选择???),但我认为最好将每个场景作为自己的类。
关于如何配置我的testng.xml文件或将测试场景转换为testng测试的任何建议都会很棒。
答案 0 :(得分:0)
如果在套件的parallel属性中没有指定任何内容,则默认情况下,Testng将按顺序运行。指定包应该已经解决了您的问题。您可以在套件声明中专门定义parallel = false,并检查为什么要并行调用测试。您可以参考here查看具体方法。检查你的代码,看看是否没有正确完成拆解。
来自xml的dtd ..
!ATTLIST suite
name CDATA #REQUIRED
junit (true | false) "false"
verbose CDATA #IMPLIED
parallel (false | methods | tests | classes | instances) "false"
是的,在一个类中定义所有测试并不是一个好主意。
答案 1 :(得分:0)
我遇到了同样的问题。对于两者使用parallel =“false”;仍然会启动多个浏览器。 作为一种解决方法,我已将所有类注释为@Test并为其分配了一个组名。在该类的@Test注释中,您可以使用dependsOnGroups定义顺序并设置alwaysRun =“true”。 您可以包含该软件包,并且需要在testNG xml中包含所有组。
<test name="My suite">
<groups>
<dependencies>
<group name="c" depends-on="a b" />
<group name="z" depends-on="c" />
</dependencies>
</groups>
</test>
希望有效。