如何为Web应用程序GUI测试分离数据库依赖项

时间:2015-08-20 23:11:52

标签: database web-services testing dependencies automated-tests

使用Selenium API进行WebApplication GUI测试是验证应用程序行为的重要方法(当然只有特定程度)。这里的主要问题是对其他应用程序的依赖性,这些资源也被其他应用程序使用。虽然应用程序(测试中)部署在测试平台上,但其他正在测试的应用程序也在那里部署,并且正在使用这些数据库。这样的结果是测试将无法正常工作,因为应用程序会相互干扰并操纵或删除它们所依赖的其他测试数据!

“企业”系统的体系结构不依赖于Web服务,一个应用程序可以从另一个应用程序域中检索数据。 相反,它们通过数据库链接紧密耦合 ,通过自定义的读取,写入执行权限,使每个应用程序都能够通过JPA和EJB检索所需的数据。

为了克服这个问题,我可以考虑以下几个选项:

  1. 我最喜欢的!对于每个应用程序,都存在一个删除RESTful WebService,它充当数据库和相应WebApplication之间的层,以及 依赖 应用程序的通信通道。

    • Pro: 最近的灵活性,因为在编译时很容易通过测试虚拟替换依赖
    • Con: 许多初始工作,创建Web服务以及替换REST服务的直接数据库访问。以及虚拟实现的维护。
  2. 第二个是通过执行逻辑顺序执行不同Web应用程序的测试执行,该执行逻辑在执行开始之前也替换数据库(数据库设置)。

    • Pro: 省力,因为我只需要提供和维护一个包含常用记录的数据库转储。
    • Con: 无法实现并行化。必须安排测试执行。漫长的等待时间!
  3. 可维护性方面可能是最糟糕的一个,但我也想提到这个选项,因为第二个可能导致长时间空闲。因此,对于每个Web应用程序,都存在一个独特的测试执行环境,它提供所有相关数数据库替换的工作方式与第二种方法的描述相同。

    • Pro: 与第二种方法相同,加上高灵活性和无等待时间(调度),因为每个应用程序都有其专用的测试执行环境。
    • Con: 吞噬了大量资源并导致令人困惑的测试系统环境(可能)需要专门的系统管理员

2 个答案:

答案 0 :(得分:1)

我不太确定这个平台是如何运作的

  

这里的主要问题是对其他应用程序的依赖性,这些资源也被其他应用程序使用。虽然应用程序(测试中)部署在测试平台上,但其他正在测试的应用程序也在那里部署,并且正在使用这些数据库。

但每个应用程序都应该拥有自己的数据库和专用资源。即使你的integration tests依赖于其他SUT,这也不会影响它的内部运作。毕竟它是一个黑盒子。同样适用于UI测试 - 为什么他们应该(明确地)关注SUT数据库中发生的事情?

  

因为应用程序会相互干扰并操纵或删除他们所依赖的其他测试数据!

恕我直言,你需要的是更好的测试夹具策略。 Here are解释说:

  • Fresh fixture

  • 最小夹具

  • 共享夹具

答案 1 :(得分:0)

看起来你已经有了答案。选项#3适用于大型数据库,因为很难“模拟”那么多数据。我一直在为拥有数百万条目的数据库这样做,以确保我们的查询不会影响应用程序性能。

选项#1显然是小型应用程序的最佳选择。它确实需要额外的努力,但在前端和后端之间进行明确的分离是非常有价值的。