Multithreading TestNG并行测试失败
首先让我介绍一下我的测试结构:Multithreading TestNG并行测试失败,multithreading,unit-testing,testing,maven,testng,Multithreading,Unit Testing,Testing,Maven,Testng,首先让我介绍一下我的测试结构: 有一个BaseTest(Singleton)包含一个setUp()方法,它运行@BeforeSuite。此setUp()方法初始化MyObject,该对象声明为: protected static ThreadLocal myObject=new ThreadLocal() 所有其他测试都扩展了此BaseTest。 e、 g.说客户测试 这个顾客有- 带有@BeforeClass标记的测试-它获取MyObject的存储实例 其他测试将使用MyObject,执
- 有一个BaseTest(Singleton)包含一个
方法,它运行setUp()
。此setUp()方法初始化MyObject,该对象声明为:@BeforeSuite
protected static ThreadLocal myObject=new ThreadLocal()代码>
- 所有其他测试都扩展了此BaseTest。
e、 g.说客户测试
这个顾客有-
- 带有
@BeforeClass
标记的测试-它获取MyObject的存储实例李>
- 其他测试将使用MyObject,执行一些操作并执行测试
- 带有
@AfterClass
标记的测试-不会破坏MyObject的实例
因此,理想情况下,这个setUp()方法应该在任何其他测试之前运行。而且它只运行一次
我试图在TestNG框架中并行运行测试用例。为了实现这一点,我将testng.xml的suite
标记上的parallel属性设置为
现在,在我启动构建后的几秒钟内,构建失败,所有基本测试都失败,其他测试被跳过
测试失败是由于java.lang.NullPointerException
我的理解是,当setUp()方法在线程上运行时,不同线程上的一些其他测试正在尝试访问尚未初始化的MyObject。失败也是如此。我的理解正确吗
如果是,可能的解决方案是什么
我可以这样做吗?让线程先在运行setUp()的地方运行,然后再让其他线程调用。一旦对setUp()的调用完成/返回,则允许其他线程调用
(注意:我的项目使用Maven)两件事:
- NullPointerException非常简单
要追查,那是什么
告诉你?你应该包括
堆栈跟踪和代码
- @BeforeSuite将只运行一次,
但是根据你说的,你
希望它在每次测试之前运行
方法,这意味着您应该使用
@之前的方法
两件事:
- NullPointerException非常简单
要追查,那是什么
告诉你?你应该包括
堆栈跟踪和代码
- @BeforeSuite将只运行一次,
但是根据你说的,你
希望它在每次测试之前运行
方法,这意味着您应该使用
@之前的方法
我以前遇到过这个问题。我能够克服这个问题的唯一方法是删除setup方法上的
BeforeSuite
标记。然后,类之前的每个类将询问它是否已初始化,如果已初始化,请继续,否则,它将调用setup。当然,您还必须将所有这些方法同步到同一个对象。
这是我找到的解决这个问题的唯一方法。我以前遇到过这个问题。我能够克服这个问题的唯一方法是删除setup方法上的BeforeSuite
标记。然后,类之前的每个类将询问它是否已初始化,如果已初始化,请继续,否则,它将调用setup。当然,您还必须将所有这些方法同步到同一个对象。
这是我找到的解决这个问题的唯一方法。1)关于NullPointerException,我跟踪了它们,它们正引导我得出相同的结论。他们没有得到MyObject的实例2)否。它应该只运行一次。更新了问题以确保不再出现混淆。1)关于NullPointerExceptions,我进行了跟踪,他们正引导我得出相同的结论。他们没有得到MyObject的实例2)否。它应该只运行一次。更新问题以确保不再出现混淆。