测试自动化:如何避免有限测试资源的冲突?

时间:2014-04-29 02:17:16

标签: java testing

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

我已经考虑过以下几种方法,似乎都没有让人满意:
1)使用静态Map< String device,String isAddedAlready>添加一些类。它存储所有设备及其状态 - 仅适用于一个测试仪 2)为每个测试人员分配一些专有设备 - 使有限的资源更受限制,如果有更多的测试人员而不是可用设备怎么办?   - - - - - - - - - - - -
这种情况是这样的:测试者A和测试者B都有一个测试方法(Java代码),它添加一个设备,修改设备的名称,然后删除设备。如果A和B同时使用相同的IP,这在测试和测试人员数量增加时是不可避免的,那么一次测试就会失败。
既然A和B都不知道其他测试人员在他/她的测试方法中会使用哪种IP,那么建立一个查询和锁定和释放服务(一个注册中心,一个资源中心?)是明智的。
该应用程序将数据存储在数据库(oracle,mysql或postgresql)中 此外,我们可能同时运行多个应用程序,这使情况更加复杂。

2 个答案:

答案 0 :(得分:1)

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

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

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

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

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

之前锁定文件名

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

答案 1 :(得分:1)

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

我们很少需要锁定JVM的访问权限。当我们这样做时,我们需要它在数据库上,所以我们使用数据库层来锁定。

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