在testNG中,并行运行,您可以在测试运行中共享状态吗?即在beforeMethod中创建帐户并在测试中获取帐户?

时间:2017-03-28 16:40:52

标签: java testng

我正在尝试并行运行我的测试套件,这需要为每个测试创建帐户。我有一个定义了许多测试的测试类,并且由于testNG不为每次运行使用我的测试类的单独实例,因此我不保证每个测试都有一个单独的,唯一的帐户。我可以使用ThreadLocal变量,但这似乎是一个丑陋的解决方案,不能满足我想要的'TestLocal'要求。我似乎也无法保证我的@BeforeMethod将在与我的@Test相同的线程中运行,这会抛出它。

这个用例看起来很基本,我对它提供的信息缺乏感到惊讶,那么我对这个错误的处理方法是否正确?关于在测试之间共享状态有很多问题,但关于在测试中共享状态的情况并不多。

作为一个简单的例子,我想做类似的事情:

private Account a;

@BeforeMethod
public void setup() {
   a = createAccountExternalCall();
}

@Test
public void test1() {
   a.setField1("Hello");
   assertEquals("Hello", a.getField1())
}

@Test
public void test2() {
   a.setField1("Goodbye");
   assertEquals("GoodBye", a.getField1())
}

并行运行,因为test1中的断言可能在testB的@BeforeMethod中的setup()方法之后运行,或者甚至在test2中完成setField1方法之后,因此无法保证这些测试通过。但是,如果我可以保证每个测试的帐户不同,我可以准确地断言。

0 个答案:

没有答案