multithreading - TestNG 并行测试失败

标签 multithreading unit-testing testing maven testng

首先让我列出我的测试结构:

  • BaseTest(Singleton) 包含一个 setUp()运行 @BeforeSuite 的方法.此 setUp() 方法初始化 MyObject,声明为:

protected static ThreadLocal<MyObject> myObject= new ThreadLocal<MyObject>();

  • 所有其他测试都会扩展此 BaseTest。 例如说CustomerTest

    这个CustomerTest有-

    1. 使用 @BeforeClass 进行测试标记 - 它获取 MyObject 的存储实例。
    2. 其他测试会使用MyObject,执行一些操作并做测试
    3. 使用 @AfterClass 进行测试标记 - 确实销毁 MyObject 的实例

因此,理想情况下,此 setUp() 方法应在任何其他测试之前运行。而且它只运行一次

我正在尝试在 TestNG 框架中并行运行测试用例。为此,我在 suite 上设置了并行属性testng.xml 的标签为

<suite name="Suite" parallel="classes" thread-count="5">

现在,在我启动构建后的几秒钟内,构建失败,所有基本测试均失败,其他测试被跳过。

失败的测试是由于java.lang.NullPointerException

我的理解是,虽然 setUp() 方法正在一个线程上运行,但不同线程上的一些其他测试正在尝试访问尚未初始化的 MyObject。失败也是如此。我的理解正确吗?

如果是,可能的解决方案是什么?

我可以做类似的事情吗 - 让正在运行 setUp() 的线程先运行,然后再不让其他线程调用。一旦对 setUp() 的调用完成/返回,则允许其他线程调用。

(注意:我的项目使用Maven)

最佳答案

两件事:

  • NullPointerExceptions 非常简单 追查,那是什么 告诉你?你应该包括 堆栈跟踪和代码。

  • @BeforeSuite 只会运行一次, 但根据你所说的,你 期望它在每次测试之前运行 方法,这意味着你应该使用 @BeforeMethod。

关于multithreading - TestNG 并行测试失败,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/5638213/

相关文章:

multithreading - 如何在 Scala 中执行多个任务?

testing - 是否可以在 testcafe E2E 测试中取消初始化/重新初始化/删除角色?

python - 在 python 中模拟 redis

http - 如何测试 multipart/form-data POST 请求

database - 更新数据库表的方法应该如何进行单元测试?

c# - MVC Web 解决方案上的 Log4Net

c++ - 我如何使用c/c++实时录制和播放我的声音

linux - pthread_join 是如何实现的?

python - 处理大量线程和数据库连接 (Python) 我可以做些什么来节省资源?

javascript - angularjs:指令的访问 Controller