如果运行模式为 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 为每个方法创建新的测试类实例的主要内容,如果未能解决你的问题,请参考以下文章
Parallel.Foreach 给出错误“索引超出了数组的范围”