【问题标题】:How do I run multiple ruby files simultaneously without them stepping on each other?如何同时运行多个 ruby​​ 文件而不互相踩踏?
【发布时间】:2015-06-09 05:27:19
【问题描述】:

我需要同时运行几个 rb 文件。每个文件的设置都是一样的(下面的简化示例)

文件 #1(总共有 6 个,每个测试大约 10 个)

require_relative './spec_helper'
require_relative './tests'

    config.before(:each) do
        @driver = Selenium::WebDriver.for :firefox
        @base_url = get_url
    end  

    config.after(:each) do
        @driver.close
    end  

RSpec.describe 'File 1' do

  it 'test 1' do
       login
       verify element present
       logout
  end

  it 'test 2' do
       login
       verify element present
       logout
  end

   it 'test 3' do
       login
       verify element present
       logout
   end

end

所有文件单独运行都很好 - 但是当同时运行时,它们最终会在 after hook 特别是@driver.close 期间相互踩踏,我收到以下错误:

在后挂钩 NoMethodError: undefined method quit' for nil:NilClass 中发生错误 发生在 C:/Automated_Testing/Indie/w_molap_1.rb:31:inblock (2 levels) in '

我的问题是:我可以做些什么不同的事情 - 也许在挂钩设置之前的驱动程序中,这将允许我同时运行这些文件而不会互相踩踏?

【问题讨论】:

  • 如何同时运行它们?执行方法可能会影响您的选择。
  • @Jesper - 我采用两种方法之一 - 每组十个测试都是它自己的 .rb 文件,我可以将它们全部突出显示并点击“输入”,它们都开始运行。或者我更喜欢的方式是,我使用批处理文件同时调用每个 rb 文件 - 它等待它们全部完成它们通过电子邮件向我发送控制台输出的日志。

标签: ruby rspec


【解决方案1】:

我认为您需要研究的是使用 parallel_test 的 Ruby Gem。此外,您应该从 Test::Unit::TestCase 扩展您的测试类,以便您可以利用定义 setup/teardown 方法。另外,每个测试方法都应该被分成单独的测试类,以便parallel_test可以在单独的线程中运行每个测试方法。

另外,我会在开始时保持简单,在你弄清楚基本的多线程之前不要使用 RSpec(作为 BDD 框架)。

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2021-10-31
    • 2021-10-25
    • 1970-01-01
    • 2012-10-14
    • 2019-12-26
    • 2015-07-09
    • 1970-01-01
    相关资源
    最近更新 更多