在将一些测试从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呢?有没有一种方法可以存储与每个@beforethod
-@Test
-@AfterMethod
元组隔离的数据?
我可以在@Test
内部执行所有3个步骤,但这需要添加笨拙的try...最后
块到每个测试。我还尝试使用ITestContext
,但它似乎在整个测试运行中是共享的。
是的,使用TestNG,您可以比使用JUnit和DataProvider处理线程的本地变量拥有更大的能力,每个测试类实例:
public class MyTest {
private Stream inputData;
@BeforeMethod
public void setUp(Object[] args) {
inputData = (Data)args[0];
inputData = normalizeDataBeforeTest(inputData);
}
@Test(dataProvider="testArgs")
public void testStuff(Data inputDatax, Object a, Object b) {
doSomethingWith(a);
doSomethingWith(b);
doStuff(this.inputData);
}
@AfterMethod
public void tearDown() {
// Clean up the data from the instance fields
closeInputDataStream(inputData);
}
....
@DataProvider
public static Object[][] testArgs() {
// generate data here, 1 row per test thread
Object[][] testData;
for loop {
// add row of data to testData
// {{dataItem, obja, objb}, {dataItem, obja, objb}} etc.
}
return testData;
}
}
首先,对不起我的英语,它不是那么完美:) 所以我面临以下问题:我试图使用Selenium Grid和TestNg在不同的浏览器中运行并行测试,并在@BeforeTest方法中传递参数。我的问题是,当每个测试初始化时,他们似乎会使用最后一个测试的参数。所以在这个例子中,当我运行测试时,它将打开两个Chrome,而不是一个火狐和一个Chrome。(browser.getDriver()方法返回远程We
我试图用TestNG并行运行一个示例测试项目。但它是在一个线程中顺序执行的。我漏掉什么了吗? 谢了。
问题内容: 首先,对不起我的英语,它不是那么完美:) 因此,我面临以下问题:我正在尝试使用Selenium Grid和TestNg在不同的浏览器中运行并行测试,并在@BeforeTest方法中传递参数。我的问题是,在初始化每个测试时,似乎它们将使用最后一个测试的参数。因此,在此示例中,当我运行测试时,它将打开两个Chrome,而不是一个Firefox和一个Chrome。 (browser.getD
类TestParallel.FirstTestClass线程ID:22名称:TestNG 类TestParallel.SecondTestClass线程ID:23名称:TestNG 类TestParallel.TestSetup线程ID:23名称:TestNG java.lang.NullPoInterException位于TestParallel.TestSetup.OnTestFailure(
我正在使用testNg硒网格进行测试会话,我对整个东西非常满意 关键是测试的数量正在增长,现在它们至少需要 3 小时才能执行(在 30 个浏览器上进行 -100 次测试) 我计划进行 -150 次测试,所以,正如您可以想象的那样,我必须找到一个解决方案并并行启动它们 我试图玩一下这个,但没有现在很幸运,我现在看到的是两个浏览器启动,但只有一个通过测试。另一个只是等待:-)测试的结构如下,基本上 1