【问题标题】:How do I run multiple behave+python tests simultaneously without errors?如何在没有错误的情况下同时运行多个行为+python 测试?
【发布时间】:2019-02-21 09:52:13
【问题描述】:

我有一个 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 个文件无效。

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

【问题讨论】:

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


    【解决方案1】:

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

    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"
    

    我只是新建线程并直接调用behavior executor,你不需要单独调用behave.exe进程5次,只要一次。所有功能都以并行方式同时执行。

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

    【讨论】:

    • 你能解释一下“os.chdir(testenv.PARALLEACTIONS_PATH)”这一行吗@PeterZosiak
    • 嗨@ISHAR,此步骤是可选的,只是更改工作目录以避免功能完整路径出现问题。
    • 嗨@PeterZosiak,感谢您的帮助。我收到“RuntimeError:创建新内容类型时出错。请确保在尝试单独迁移应用程序之前迁移内容类型。”我相信这是由于夹具同时更新。关于如何处理这一问题的任何建议?
    猜你喜欢
    • 2011-07-27
    • 2023-01-09
    • 1970-01-01
    • 2014-07-29
    • 2010-12-06
    • 1970-01-01
    • 2021-03-25
    • 1970-01-01
    • 2023-04-04
    相关资源
    最近更新 更多