Warning: file_get_contents(/data/phpspider/zhask/data//catemap/8/selenium/4.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Testing 从串行运行Selenium测试到并行运行时处理测试数据_Testing_Selenium_Phpunit_Parallel Processing - Fatal编程技术网

Testing 从串行运行Selenium测试到并行运行时处理测试数据

Testing 从串行运行Selenium测试到并行运行时处理测试数据,testing,selenium,phpunit,parallel-processing,Testing,Selenium,Phpunit,Parallel Processing,我想开始并行运行现有的Selenium测试,但由于当前测试的编写方式,我很难确定最佳方法 在我的大多数测试中,第一步是让DB进入干净状态,然后用测试其余部分所需的数据填充它。虽然这对于将测试彼此隔离很好,但如果我开始在同一个SUT上并行运行这些Selenium测试,它们最终会删除其他测试的数据 经过大量的挖掘,我还没有找到任何关于如何处理这种情况的指导或最佳实践。我想到了一些想法,但没有一个给我留下特别棒的印象: 重写测试以不覆盖其他测试的数据,即仅添加测试数据,从不删除-我可以看到,由于每个测

我想开始并行运行现有的Selenium测试,但由于当前测试的编写方式,我很难确定最佳方法

在我的大多数测试中,第一步是让DB进入干净状态,然后用测试其余部分所需的数据填充它。虽然这对于将测试彼此隔离很好,但如果我开始在同一个SUT上并行运行这些Selenium测试,它们最终会删除其他测试的数据

经过大量的挖掘,我还没有找到任何关于如何处理这种情况的指导或最佳实践。我想到了一些想法,但没有一个给我留下特别棒的印象:

重写测试以不覆盖其他测试的数据,即仅添加测试数据,从不删除-我可以看到,由于每个测试运行时数据库的可变性,这可能会导致意外失败。从不同的测试顺序到位置不当的失败,任何事情都可能导致其他测试失败。这感觉不对

不要预先填充数据库,而是通过Selenium本身创建所有需要的数据。这将大部分复制真实世界的使用情况,但也比直接将数据加载到数据库中要花费更长的时间。这可能会抵消并行化带来的任何好处,这取决于每个测试用例需要多少测试数据

让每个Selenium节点测试一个不同的SUT副本——这样,每个测试都可以随意处理数据库,因为我们假设没有其他测试同时处理它。缺点是,我需要设置多个数据库,并且在每个测试用例开始时,找出如何协调要初始化的数据库,以及如何向节点和SUT发出信号,说明这个特定的测试用例应该使用这个特定的数据库。不可怕,但如果有更好的方法,我也不想这么做

让每个Selenium节点测试一个不同的SUT副本,但在运行时之前将测试分为不同的套件,每个节点一个套件-这也是可行的,但没有那么灵活,因为随着时间的推移,您希望尽可能多地返回,甚至每个套件的长度

总而言之,这些似乎都不是明确的赢家。选择3似乎是最合理的,但我也怀疑这是否是一个可行的办法。在研究了一点之后,看起来我需要编写一个定制的测试运行程序来帮助并行运行测试,但是关于初始测试数据的部分仍然让我寻找更好的方法

在并行运行Selenium测试时,有没有更好的方法来处理数据库初始化

FWIW是应用程序和测试套件的PHP/PHPUnit格式

使现代化
因为听起来我要寻找的答案非常依赖于项目,所以我至少要尝试提出我自己的解决方案,并报告我的发现。

没有简单的答案,看起来你已经想好了大部分。同样值得考虑的是重写测试以使用单独分区的数据-这可能有效,也可能无效,具体取决于您的域,例如,如果是银行应用程序,每个节点都有一个单独的银行帐户。数据库的预填充可以限制为静态参考数据,也可以为每个单独的“帐户”预填充数据。同样,这取决于对数据执行此操作的容易程度


不过,我倾向于投3票,因为现在数据库设置相对容易编写脚本,而且对于一个小型测试数据套件来说,硬件要求可能不太高。

分区数据是一个选项,但它似乎与选项1有相同的缺陷,也就是说,测试A更有可能会破坏测试B的数据,从而导致误报。目前,我也倾向于选择3。总的来说,我感到惊讶的是,就之前的工作而言,我所能找到的信息太少了,因为这似乎是任何想要并行化涉及数据库的测试的人都需要解决的问题。