配置testng.xml以连续运行测试而不键入每个类

时间:2013-09-13 14:22:45

标签: java selenium-webdriver testng

我正在使用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测试的任何建议都会很棒。

2 个答案:

答案 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>

希望有效。