【问题标题】:Forbid TestNG to execute specific test classes in same time禁止 TestNG 同时执行特定的测试类
【发布时间】:2022-01-19 19:11:02
【问题描述】:

如果当前正在执行来自另一个特定类的测试,是否有任何好的解决方案可以防止 testng 运行来自特定类的测试?

我有下一套:

<suite name="Name" parallel="classes" thread-count="5">
   <test name="TestName">
      <packages>
         <package name="test.folder.*" />
      </packages>
   </test>
</suite>

在“文件夹”内,它有很多其他文件夹,其中包含由该套件并行执行的测试类。

但是我需要以某种方式指定,例如,如果 test.folder.a1.A1Tests 正在运行,test ng 应该等到它完成,运行类 test.folder.b1.B1Tests 并选择另一个没有的类在指定类的“禁止”列表中。

让我们再解释一次我想要什么。

  1. 出现空闲线程
  2. TestNG 想在其中运行 b1.B1Tests
  3. TestNG 检查当前是否有 a1.A1Tests 正在运行(或禁止列表中的其他类)
  4. 如果是,它会推迟 b1.B1Tests 类并搜索另一个类

关键是我有测试,它们相互影响,我想保存并行性但不想同时执行它们。

我现在找到的唯一方法,它在当前套件中添加一个测试,在单线程中执行所有受影响的测试,然后以与现在相同的方式执行另一个测试。

但我希望你有更漂亮的解决方案。

【问题讨论】:

    标签: java selenium testing testng


    【解决方案1】:

    TestNG 已经实现了“dependsOnMethods”、“dependsOnGroups”选项。

    但您的要求是具有某种类级别的依赖关系。

    如果您试图找到一个在测试运行时更改测试顺序的解决方案,这将不起作用。

    TestNG 确定测试的特定顺序并将其保留在整个执行过程中。如果轮到测试,那么您可以简单地等待一些条件,但不要进行新的测试而不是当前的测试。

    所以我的建议将保持这种假设。

    选项 1 - 使用单独的 testng xml 配置

    您似乎已经在使用它了。

    将所有无法安全并行运行的测试移动到具有非并行配置的单独 testng xml 中,并保持其他测试并行运行,然后将它们合并到单个 xml 中运行是一种常见的解决方案,即易于实施和维护。

    在大多数情况下,与其他现有替代方案相比,它已经足够好,因为它简单明了。

    以下是它的外观示例:

    https://stackoverflow.com/a/70753897/5226491

    选项 2 - 实现您自己的同步

    正如我所提到的,没有现成的选择。

    你应该:

    • 确定哪个类取决于其他类的列表
    • 跟踪所有正在运行的课程
    • 解决依赖关系:检查测试方法是否属于某个必须等待其他阻塞类完成工作的类

    您必须使用所有必要的同步来实现它,以确保它不会导致问题、死锁等。

    您可以从实现ITestListener 开始,它会在测试开始时将所有正在运行的测试类添加到线程安全集合中,并在测试结束时将其删除。

    https://www.javadoc.io/doc/org.testng/testng/7.4.0/org/testng/ITestListener.html

    https://www.javadoc.io/doc/org.testng/testng/7.4.0/org/testng/ITestResult.html#getTestClass--

    我认为选项 2 需要时间来实现和测试(更不用说良好的编程经验),选择它一定有一个非常好的理由。

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2019-06-26
      • 2011-02-09
      • 2019-02-01
      • 2015-02-18
      相关资源
      最近更新 更多