如何同时运行多个行为+ python测试而没有错误?

时间:2018-09-17 12:56:34

标签: linux selenium jenkins selenium-chromedriver python-behave

我有一个使用行为进行行为测试的python Web应用程序。我有5个* .feature文件,在本地和我们的Jenkins构建服务器上运行它们时,每个文件都需要花费几分钟才能运行。我想并行运行这五个文件,而不是顺序运行,以节省时间。我可以在本地执行此操作,但不能在构建服务器上执行此操作。详细信息如下:

在Windows上本地运行:

  • 我可以使用以下命令在单独的命令窗口中运行所有5个文件:
    • behave.exe --include "file_01.feature"
    • behave.exe --include "file_02.feature"
    • behave.exe --include "file_03.feature"
    • behave.exe --include "file_04.feature"
    • behave.exe --include "file_05.feature"
  • 我还可以运行一个python脚本,该脚本使用同一命令将5个单独的进程分离。
  • 这两项工作都没问题

构建服务器在Linux上运行:

  • 当我尝试使用类似的命令运行所有五个文件时,某些行为情况会给我错误。错误是这三个错误之一:

    • 消息:未知错误:无法确定已断开连接的加载状态:无法接收来自渲染器的消息
    • 消息:chrome无法访问
    • 消息:没有这样的会话
  • 每次测试运行时,抛出这些错误的行为场景似乎都会改变。

  • 奇怪的是,如果我将5个* .feature文件重新排列为3个,它将起作用。但是,这不是理想的解决方案。我们的应用程序正在增长。随着功能的增长,我们将拥有更多的功能文件。

我怀疑正在运行的行为测试中的chrome驱动程序之间存在一些共享资源,但是我不确定。我无法解释为什么这在本地对我有效,但不适用于我的构建服务器。我也无法解释为什么3个文件有效,但5个无效。

有人试图同时运行多个行为测试时看到过这样的错误吗?还是您知道我应该寻找什么?我的项目足够大,很难将我的问题的最小示例放在一起。这就是为什么我没有发布任何代码的原因。我只是想知道我应该寻找什么,因为我很茫然。

1 个答案:

答案 0 :(得分:0)

这就是我并行运行多个功能的方式。

from behave.__main__ import main as behave_main

@step(u'run in parallel "{feature}" "{scenario}"')
def step_impl(context, feature, scenario):
    t = threading.Thread(
        name='run test parallel',
        target=parallel_executor,
        args=[context, feature, scenario])
        #args=[context, 'parallel_actions.feature', 'Make Cab-Cab communication'])
    t.start()


def parallel_executor(context, feature_name, scenario):
    os.chdir(testenv.PARALLEACTIONS_PATH)
    behave_main('-i "{}" -n "{}" --no-capture --no-skipped'.format(feature_name, scenario))

功能

Feature: testing parallel
  Scenario: parallel run
    When run in parallel "parallel_actions-1.feature" "Make Cab-Cab communication"
    And run in parallel "parallel_actions-1.feature" "Another Scenario"
    And run in parallel "another_parallel.feature" "Another Scenario 2"

我只是创建一个新线程并直接调用行为执行器,所以您不需要分别调用行为.exe进程5次,而只需一次。所有功能都可以并行执行。

我无法回答您的消息错误,但是您可以尝试另一种方法(更多行为方式)以并行方式运行行为功能。