我需要同时运行几个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钩子(特别是@driver)期间相互踩到。关闭,得到以下错误:
after钩子发生错误NoMethodError: undefined method quit' for nil:NilClass发生在C:/Automated_Testing/Indie/w_molap_1。Rb:31:inblock(2级)in '
我的问题是:我可以做一些不同的事情-也许在钩子设置之前的驱动程序中,允许我同时运行这些文件而不会相互踩到?
我认为你需要研究的是为parallel_test
使用Ruby Gem。另外,您应该从test::Unit::TestCase扩展您的测试类,这样您就可以利用定义setup/teardown方法的优势。此外,每个测试方法应该被分离到单独的测试类中,以便parallel_test可以在单独的线程中运行每个测试方法。
同时,我会在开始时保持简单,在你掌握基本的多线程之前不要使用RSpec(作为BDD框架)。