当前位置: 首页 > 知识库问答 >
问题:

testng:running parallel=methods,同时在方法之间共享一个实例变量

翟丰茂
2023-03-14

搜索了很多关于testng行为的生动答案,直到现在才找到。。。

如果我运行我的测试/套件并行="方法"和我的一个测试有3个方法(@测试方法),其中3个共享相同的实例对象/实例变量(不是静态的!)。testng完全分离了方法,所以每个方法都可以看到共享方法的实例变量?我的意思是,testng将为每个方法创建一个单独的类实例并运行?

共有2个答案

卫成和
2023-03-14

这是一个关于TestNG(而不是JUnit)的问题,答案是:不——这不是线程安全的;类成员的实例在并行测试之间共享。

我做了一个小测试:

public class MyTest {
    private Integer lol = 0;

    @Test
    public void go () throws Exception {
        System.out.println("go: " + lol);
        lol++;
        System.out.println("go: " + lol);
    }

    @Test
    public void go2 () {
        System.out.println("go2: " + lol);
        lol++;
        System.out.println("go2: " + lol);
    }

    @Test
    public void go3 () {
        System.out.println("go3: " + lol);
        lol++;
        System.out.println("go3: " + lol);
    }
}

输出:

go3: 0
go: 0
go2: 0
go3: 1
go: 2
go2: 3

:(

江恩
2023-03-14

我假设您使用的是JUnit,我假设“实例变量(非静态!)”您只是指“测试夹具类成员”(或者您甚至指“测试用例局部变量”)。

然后答案是“不——它们不会共享同一变量的同一实例”。JUnit runner将为每个测试用例和每个测试夹具创建不同的类实例。每个实例将并发运行,但类成员将是独立的。

 类似资料:
  • 问题内容: 我想像这样在多个线程之间共享一个变量: 我想在主线程和帮助线程之间共享,这是我创建的两个不同的Java类。有什么办法吗?谢谢! 问题答案: 二者并可以参照包含该变量的类。 然后,可以使该变量为 volatile ,这意味着 对该变量的更改在两个线程中立即可见。 有关更多信息,请参见本文。 易变变量 共享已同步的可见性功能,但不共享原子性功能。这意味着线程将自动 查看volatile变量

  • 我需要将xml转换为jpa实体。我已经使用jaxb获取了我的DTO,并使用mapstruct将dto转换为实体。但是,我需要从数据中提取一些数据,并将其设置为实体上的列表。我的映射器如下所示 我不知道如何在提取MetaData方法中访问我的实体特别。

  • 问题内容: 我有两个线程。可以调用修改变量的类的update方法。另一个调用读取该变量的类的update方法。只有一个线程写入,一个(或多个)线程读取该变量。由于我是多线程技术的新手,我需要在并发方面做什么? 谢谢, 问题答案: 如果有且仅有一个写线程,你可以逃脱使得它。否则,请查看答案。 仅在只有一个写线程的情况下才起作用,因为只有一个写线程,因此它始终具有的正确值。

  • 背景:我正在并行运行自动化测试。使用pom.xml中的分叉,多个浏览器在相同数量的线程中启动,即1个浏览器是1个线程。 中的下面插件创建了与线程(fork)计数相等数量的。 所有这些类都同时并行执行。因此,似乎每当我创建或时,每个线程都会创建自己的这些,因此跨多个线程共享变量的概念是不起作用的。 我只想让一个线程访问“准备测试数据”函数,并将<code>标志 我正在按照教程https://www.

  • 问题内容: 我一周前开始用python进行编码,这是我的错误,我很快就开始使用oops,类和对象进行编码。我以为我的C ++水平会有所帮助…。 令我惊讶的是,var和list都是一个全局变量,似乎在所有实例中都共享....我以为在所有实例中它都不同.....我花了半天的时间才弄清楚那....一点意义都没有,一个变量只能由一个类对象访问,而是在所有实例之间共享....只是好奇,它背后有原因吗???

  • 我有大约60个套接字和20个线程,我想确保每个线程每次都在不同的套接字上工作,所以我根本不想在两个线程之间共享同一个套接字。 在我的类中,我有一个后台线程,它每60秒运行一次并调用方法。在方法中,我迭代我拥有的所有套接字,然后通过调用类的方法开始逐个ping它们,并根据响应将它们标记为活的或死的。在方法中,我总是需要迭代所有套接字并ping它们以检查它们是活的还是死的。 现在,所有读取器线程将并发