[英]Why are the tests failing while using threadPoolSize>1 in TestNG?
[英]TestNG parallel tests failing
首先让我介绍一下测试的结构:
@BeforeSuite
的setUp()
方法。 此setUp()方法将MyObject初始化为: protected static ThreadLocal<MyObject> myObject= new ThreadLocal<MyObject>();
所有其他测试都扩展了此BaseTest 。 例如说客户测试
此CustomerTest具有-
@BeforeClass
标记的测试-它获取MyObject的存储实例。 @AfterClass
标记的测试-确实会销毁MyObject的实例 因此,理想情况下,此setUp()方法应在任何其他测试之前运行。 而且它只运行一次 。
我正在尝试在TestNG框架中并行运行测试用例。 为此,我在testng.xml的suite
标签上将parallel属性设置为
<suite name="Suite" parallel="classes" thread-count="5">
现在,在我启动构建后的几秒钟内,构建失败,所有基本测试均失败,其他测试则被跳过。
测试失败是由于java.lang.NullPointerException
我的理解是,在线程上运行setUp()方法时,在不同线程上进行的其他一些测试正在尝试访问尚未初始化的MyObject。 失败也是。 我的理解正确吗?
如果是,那么可能的解决方案是什么?
我可以做些什么-让线程先在其中运行setUp()的情况下运行,然后再让其他线程不要调用。 一旦对setUp()的调用完成/返回,则允许其他线程调用。
( 注:我的项目使用Maven)
两件事情:
NullPointerException非常容易追踪,那告诉你什么? 您应该包括堆栈跟踪和代码。
@BeforeSuite只会运行一次,但是根据您的意思,您希望它在每个测试方法之前运行,这意味着您应该使用@BeforeMethod。
我以前遇到过这个问题。 我能够解决此问题的唯一方法是删除设置方法上的BeforeSuite
标记。 然后,每个类BeforeClass
都会询问它是否已初始化,如果已初始化,请继续进行,否则,它将调用setup。 当然,您还必须将所有这些方法synchronize
到同一对象。 这是我发现解决此问题的唯一方法。
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.