我已经继承了使用Selenium 2(Webdriver)和Junit的功能测试套件。我们为Java Web应用程序编写了大约500个测试。运行完整套件需要花费几个小时,因此我们仅在CI服务器上将其运行一整夜。我想通过并行运行测试来加快测试套件的速度,我研究了各种并行执行解决方案,包括使用Selenium Grid。
我们当前如何处理数据
我们的测试套件当前在每个测试类之间删除和还原数据库,我们这样做是为了了解状态并避免测试之间的数据冲突。但是,如果我们要并行运行多个测试,那么除非在多个测试之间进行协调,否则数据库可能会导致错误(我不想在执行另一个测试的同时删除数据库)。 >
一些可能的解决方案:
以下是一些想法:
创建测试组(例如:可以同时运行的测试与必须同时运行的测试按顺序运行)
让每个测试删除它创建的数据(并非总是可能)
使用不同的用户运行每个测试以最大程度地减少数据冲突(创建500个用户非常耗时)
部署多个我们的Web应用程序实例,每个实例都有其自己的数据库(每个测试都必须知道其在哪个实例上运行并删除正确的数据库)
编辑:这些人接触到此问题http ://youtu.be/oX-0Mt5zju0?t = 9m10s
#1 楼
您的清单很不错,涵盖了所有通常的基础。另一种可能性:
围绕单个数据段实施某种“关键区域”机制在测试之间共享,并且不同的测试要求具有不同的值。
当然会产生自己的问题。它导致一个测试阻塞,而等待另一个测试完成数据。如果测试将数据保留足够长的时间,则其他测试可能会在等待时超时(如果您的测试超时,或者您正在诸如Sauce Labs之类的某些服务上运行,可能会中止空闲的浏览器会话)。
因此,仅在数据冲突很少且持续时间短的情况下使用此技巧。
较长的运行时也可能会受益于另一个想法:仅将UI用于测试的那些部分需要用户界面。在UI上跳到一些更快的机制来进行设置和拆卸,甚至可以进行断言(如果您不断言关于如何通过UI显示信息的事)。