TestNG独立测试

时间:2013-04-18 16:03:38

标签: selenium testng

我有一个包含6个类的测试套件,它们之间总共有120个测试。

我面临的问题是,当其他一些测试运行时,某些测试无法运行。例如,对于测试a,b,c,d,e,f:

  • a无法使用b或c
  • 运行
  • b无法使用a或c
  • 运行
  • c无法使用a或b
  • 运行
  • d无法使用f
  • 运行
  • e可以运行任何东西
  • f无法使用d
  • 运行

这是一个小例子,但希望它说明了这一点。我仍然希望尽可能多地利用并行性,例如d和e都可以同时运行。我还在学习testNG,但我尝试了以下几点:

将无法一起运行的测试分组到一个组 - 我找不到以'parallel =“groups”'模式运行testNG的方法,比如'parallel ='类“”,其中组中的所有测试都在同一个线程中运行。将每个不能在一个类中一起运行的测试放在一起会允许'parallel =“类”'工作,但这意味着测试不会按照目前的测试功能进行排列。

在测试中放置依赖关系 - 我认为每个测试都依赖于另一个(可能有组?),形成一个链,例如a-> b-> c。这个问题是它们总是按顺序运行,这可能会隐藏问题。这里的另一个问题是测试维护成为一个问题,因为你必须确保链是单一的并且不会破坏!

创建一个按组排序列表的方法拦截器 - 我不完全确定这个,但我不认为它会阻止测试已经运行而另一个不兼容的测试是被选为'旁边的'。'

我已经看到TestNG & Selenium: Separate tests into "groups", run ordered inside each group似乎正在尝试相同的目标,但由于不同的原因,所以解决方案到达那里并不合适,因为它不是依赖性问题,而是隔离问题。

有什么东西可以帮助我吗?

非常感谢,

菲尔

1 个答案:

答案 0 :(得分:1)

您可以重构测试,以便您当前的类列表不再标记为测试。相反,引入新的测试代理类,其方法只调用原始类中的测试过程。这样,维护功能区域中的代码非常简单。或者,由于代理类基于它们使用的资源类型,您可以将它们放入套件中的单独测试中并使用parallel="tests"

实际上,您不必介绍这些代理类。您可以将测试指定为

<test name="boiler">
   <classes>
      <class name="org.example.A">
         <methods>
            <include name="a1"/>
            <include name="a2"/>
         </methods
      </class>
      ... <!-- list of methods that use the boiler -->
   </classes>
</test>
<test name="waterheater">
    <classes>
      <class name="org.example.B">
         <methods>
            <include name="b"/>
         </methods>
      </class>
       ... <!-- list of methods that use the waterheater -->
   </classes>
</test>

使用代理类的优点是列出测试可以在类级别而不是方法级别完成。您的里程可能会有所不同。

<test name="boiler">
   <classes>
      <class name="org.example.BoilerProxy"/>
   </classes>
</test>
<test name="waterheater">
   <classes>
       <class name="org.example.WaterHeaterProxy"/>
   </classes>
</test>
...
  

这个问题是它们总是按照这个顺序运行   可能隐藏问题。

TestNG几乎总是每次都以完全相同的顺序运行一系列测试。我相信如果你想在使用TestNG的设施以不同的顺序运行事物时发现错误,那么你的设计就是一个缺陷。没有快捷方式来映射可能发生的序列组合并明确地测试它们,或者至少是它们的可管理子集。有鉴于此,如第一段所述,设置代理测试可能是您最好的选择,因为您可以根据需要重复和重新排序。

测试并行性,异步性和竞争条件很难。除了好的设计之外,没有捷径可供选择。

我根据这个答案创建了一篇博文:http://ancient-marinator.blogspot.com/2013/05/on-testing-scheduling-your-tests.html