0

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

4

2 回答 2

0

我曾经也有过一样的问题。使用 parallel="false" 和 ; 仍然启动了多个浏览器。作为一种解决方法,我将我的所有类都注释为@Test 并为它们分配了一个组名。在类的这个@Test 注释中,您可以使用dependOnGroups 定义顺序并设置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>

希望有效。

于 2014-02-19T09:04:35.863 回答
0

如果套件的并行属性中未指定任何内容,则默认情况下 Testng 将按顺序运行。指定包应该可以解决您的问题。您可以在套件声明中专门定义 parallel = false 并检查并行调用测试的原因。你可以参考这里看看如何。还要检查您的代码,看看是否没有正确完成拆卸。

从 xml 的 dtd ..

!ATTLIST suite
    name CDATA #REQUIRED
    junit (true | false) "false"
    verbose CDATA #IMPLIED
    parallel (false | methods | tests | classes | instances) "false"

是的,在一个类中定义所有测试并不是一个好主意。

于 2013-09-16T08:38:40.203 回答