【问题标题】:Test automation : how to avoid conflicts on limited test resources?测试自动化:如何避免有限测试资源的冲突?
【发布时间】:2014-04-29 02:17:16
【问题描述】:

假设我们有一个网络应用程序,它管理某个域中的某种设备。
每个设备只能添加一次,显然 - 有限的测试资源。
有几个自动化测试人员同时在这个应用程序上工作。两名测试人员可能会添加相同的设备,在这种情况下,一名测试人员会在他/她的自动化测试中出现异常。
如何避免这种资源有限的冲突?

我想出了以下几种方法,似乎没有一个令人满意:
1) 添加一些带有静态 Map 的类,该类存储所有设备及其状态——仅适用于一个测试人员。
2) 为每个测试人员分配一些专有设备——使有限的资源更加有限,如果测试人员多于可用设备怎么办?
-  -  -  -  -  -  -  -  -  -  -  - 
矛盾的情况是这样的:测试人员A和测试人员B都有一个测试方法(Java代码),添加设备,修改设备名称,然后删除设备。如果 A 和 B 同时使用相同的 IP,随着测试和测试人员数量的增加,这是不可避免的,一个测试会失败。
由于 A 和 B 都不知道其他测试人员将在他/她的测试方法中使用哪个 IP,因此设置一个查询锁定和释放服务(注册中心,资源中心?)是明智的。
该应用程序将数据存储在数据库(oracle、mysql 或 postgresql)中。
此外,我们有可能同时运行多个应用程序,这使情况更加复杂。

【问题讨论】:

    标签: java testing


    【解决方案1】:

    如果只有一个资源,使用互斥锁,创建并行进程..

    如果是多个资源,但你仍然想分配它们,使用多个信号量。在有人使用资源之前,他们需要锁定信号量并使用它。一旦他们使用了它,他们就可以放弃对信号量的锁定,而其他一些线程将使用该信号量。

    此外,在上述两种情况下,如果测试人员无法添加设备,最好将资源封装在单例/资源池中。这样,测试人员就可以从资源池中“请求”一个资源,而不是每次都创建一个新资源。它还节省了“初始化”这些资源所花费的时间

    如果您的资源是外部资源,例如跨环境共享,您可以使用多种机制。主要是在您使用对象时锁定文件系统中的文件或锁定数据库中的行。

    对于 unix,您可以使用 lockfil 锁定文件,该文件将放置在一个公共目录中。进程在开始使用文件之前会锁定文件名

    如果您将数据存储在数据库中,您还可以通过存储过程或行级锁定来实现锁定,以确保一次只有一个外部应用程序可以使用资源

    【讨论】:

    • 谢谢,Biswajit_86。我认为您的建议仅适用于一个 JVM 实例。但是我们有几个测试人员,所以会有几个独立的 JVM 实例。真正的问题是:如何控制不同JVM实例之间的冲突?
    • @user2432405 我编辑了我的原始答案以反映您的情况
    • @Biswajit-86 :是否有任何可用的 java api 来完成这项工作(我更喜欢将数据存储在数据库中)?如果我从一开始就这样做,将需要大量的编码工作。
    • @Biswajit-86 :我是 Java 新手,对我来说有点复杂。
    • @user2432405 :这有点长。我会用另一个答案回复
    【解决方案2】:

    即使我在从 java api 处理这种显式场景方面也没有经验。如果您只想使用 java api 处理锁,请阅读此 SO 链接 How can I lock a file using java (if possible)。我从未使用过 nio 包,但我相信这个论坛上有很多人使用过它。

    我们很少需要锁定跨 JVM 的访问。当我们这样做时,我们需要在数据库上使用它,因此我们使用数据库层来获取锁。

    但是,您的具体要求也将在其中发挥作用。您的测试人员如何运行此测试?是手动/自动的,是测试的一部分还是整个测试,您需要锁定什么资源(资源文件、数据文件等),您的底层服务器端在什么操作系统上运行?

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 2013-02-03
      • 2014-03-10
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2014-07-18
      相关资源
      最近更新 更多