如果运行模式为 parallel="methods",如何强制 TestNG 为每个方法创建新的测试类实例

Posted

技术标签:

【中文标题】如果运行模式为 parallel="methods",如何强制 TestNG 为每个方法创建新的测试类实例【英文标题】:How to force TestNG create new instance of test class for each method if run mode is parallel="methods" 【发布时间】:2013-03-15 23:59:23 【问题描述】:

如果运行模式为parallel="methods",如何强制TestNG为每个方法创建新的测试类实例?

JUnit 会自动执行此操作,但 TestNG 在方法之间重用相同的实例。

有没有办法改变这种行为?

我正在运行 selenium 测试并在 @BeforeMethod 方法中创建 webdriver 并将其存储到类变量中以在测试方法中使用它并关闭 @AfterMethod

并且我希望能够在不共享 webdriver 的情况下并行运行一个测试类的方法。

【问题讨论】:

只要在构造函数中赋值你的字段就可以达到你想要的效果。 那行不通——构造函数只被调用一次。 使用@BeforeMethod@AfterMethod 管理驱动程序不是一个好主意。我建议将 TestNG 与 QAF 一起使用,它会以最有效的方式利用 TestNG 的所有功能来处理驱动程序管理和其他黑盒测试需求。 【参考方案1】:

结帐Factory

来自javadoc:

Marks a method as a factory that returns objects that will be used by TestNG as Test classes. The method must return Object[].

【讨论】:

【参考方案2】:

没有办法强制 testng 这样做。一种解决方案是将 webdriver 实例设置为 threadlocal 变量。这将有助于做的是,它会为每个线程创建一个 webdriver 对象,如果你对变量进行 get 操作,它。只会给你那个线程的对象。

【讨论】:

【参考方案3】:

我使用 TestNG 并行运行多个 selenium webdriver 测试。要为每个方法设置新的 WebDriver,请在 @Test 注释中使用 @DataProvider annotation 及其关联属性。

【讨论】:

以上是关于如果运行模式为 parallel="methods",如何强制 TestNG 为每个方法创建新的测试类实例的主要内容,如果未能解决你的问题,请参考以下文章

一次中断所有 lerna --parallel 任务

Parallel.for 循环执行

oracle 并行模式(parallel)

Parallel.Foreach 给出错误“索引超出了数组的范围”

Parallel.ForEach 和 async-await [重复]

如何仅在横向模式下限制 j2me 应用程序