Warning: file_get_contents(/data/phpspider/zhask/data//catemap/0/installation/2.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
Installation 如何在Cumber E2E测试运行后高效地清理环境_Installation_Cucumber_Environment_E2e - Fatal编程技术网

Installation 如何在Cumber E2E测试运行后高效地清理环境

Installation 如何在Cumber E2E测试运行后高效地清理环境,installation,cucumber,environment,e2e,Installation,Cucumber,Environment,E2e,我遇到的问题与E2E测试有关,E2E测试将为新的应用程序构建一直运行(甚至可能在CircleCi上每隔几个小时运行一次)。我有(将来还会有更多)包含大量设置的功能(每个场景都需要相同的设置才能运行)。例如,在场景运行之前(功能中的许多场景),需要一些用户、内容、配置等。在场景运行之后,最好的做法可能是删除/删除所有用户、内容等(或者至少在功能的所有场景运行之后)。我正在努力理解什么是最佳实践 如果我添加了一个后台,那么它将在每个场景之前运行,但随后我将从后台删除所有数据(我可以在最后一个场景步骤

我遇到的问题与E2E测试有关,E2E测试将为新的应用程序构建一直运行(甚至可能在CircleCi上每隔几个小时运行一次)。我有(将来还会有更多)包含大量设置的功能(每个场景都需要相同的设置才能运行)。例如,在场景运行之前(功能中的许多场景),需要一些用户、内容、配置等。在场景运行之后,最好的做法可能是删除/删除所有用户、内容等(或者至少在功能的所有场景运行之后)。我正在努力理解什么是最佳实践

如果我添加了一个后台,那么它将在每个场景之前运行,但随后我将从后台删除所有数据(我可以在最后一个场景步骤中添加一个清理功能,但如果我错了,这看起来很糟糕)。我可以添加钩子,在每个场景之后进行清理,并继续为新特性添加更多钩子(可能对场景使用标记来区分它们应该运行的对象)

有很多选择,但确实感觉效率很低。。。这些测试将在实时环境中运行(不是快速的集成或单元测试,而是E2E)。通常情况下,设置/后台运行所需的时间比一个场景要长得多,然后针对每个微小的场景反复运行。例如,必须在后台运行一组端点来创建用户、一些内容,在许多情况下(当我们还没有端点时)我将不得不通过UI编写一个自动旅程,以添加某些内容或更改特定设置,然后以相同的方式添加结束删除所有内容,并通过UI将设置更改为功能运行之前的状态。它感觉如此缓慢和低效

我唯一想到的另一件事(但不可能适用于所有情况)。就是创建一个巨大的hooks脚本,我将在整个套件运行之前添加所有必要的“东西”,在整个套件运行之后,我清理整个堆栈/实例数据库(或重置为某个预设的数据库快照),使其状态与整个套件运行之前相同

请帮助我了解在这种情况下的最佳做法是什么


一般来说,Cuking的想法是在每个场景之后重置数据库。这是通过以下方式实现的:

  • 在事务中运行场景(然后回滚)
  • 在每个场景之后清空数据库
你要做什么取决于你用的是哪种口味的cuke

您提到的低效率可以通过多种方式缓解,而不会影响在每个场景之后都应该重置数据库的想法。基本上,你可以把Cukes看作是建立状态(Givens)做某事(When)和验证(Thens)。仅当用户必须使用UI时

因此,使用Givens,您可以通过以下任一方式设置状态:

  • 使用工厂或设备直接写入数据库
  • 调用服务(与UI控制器使用的服务相同)来创建内容
第二个更受欢迎

由于大部分工作是在UI之外完成的,这意味着您可以获得快速的CUK,从而快速完成复杂的设置

这真的是一种反刍的方式。在不使用UI的情况下在Givens中设置所有内容(适当时使用后台),然后登录,然后在使用UI时执行您的操作,并在UI中使用您的用户名验证结果

使用这种方法,我当前的项目有大约450个场景,在我的MacMini上运行大约5分钟,其中包括

  • 几个使用浏览器逐步执行UI向导的场景(超慢)
  • 许多场景具有多个实体的复杂设置
您必须围绕标准实践来提高套件的效率和速度,这种想法很常见,而且几乎总是错误的

实际上,你可以比我走得快(尽管这需要做很多工作)