java为TestNG中的并行测试初始化和清理pertest数据
在将一些测试从JUnit迁移到TestNG时,我面临一个问题,因为这些测试框架处理其测试类实例的方式不同
JUnit为每个测试方法创建一个新的测试类实例。因此,我看到的一个常见模式是:
public class MyTest {
private Stream inputData;
@Before
public void setUp() {
// Set up some data in (non-static) instance fields
// This data is isolated per test
inputData = createInputDataStream();
}
@Test
public void testStuff() {
// Use the data from the instance fields
doStuff(inputData);
}
@After
public void tearDown() {
// Clean up the data from the instance fields
closeInputDataStream(inputData);
}
}
相反,TestNG对所有测试方法使用测试类的单个实例。所以上面的模式不起作用!因为数据存储在实例字段中,所以这些值不再是孤立的。如果启用并行执行,这可能会导致在测试中期覆盖数据
那么,我如何使用TestNG实现这一点呢?有没有一种方法可以存储与每个@BeforeMethod
-@Test
-@AfterMethod
元组隔离的数据
我可以在@Test
本身内部完成所有3个步骤,但这需要在每个测试中添加笨拙的try...finally
块。我也尝试过使用ITestContext
,但它似乎在整个测试运行中都是共享的
# 1 楼答案
是的,使用TestNG,您比使用JUnit和DataProvider处理线程的本地变量具有更大的能力,每个测试类实例: