Rails:如何使用 Minitest 为并行测试准备测试数据库
Rails: How to prepare test-DBs for parallelized tests with Minitest
我正在为一个应用程序进行测试,现在刚刚超过 50 个测试,这意味着并行测试开始了。有了它,我目前收到错误消息告诉我 ActiveRecord::ConnectionNotEstablished: Access denied for user 'user'@'localhost' to database 'test_DB-0'
、'test_DB-1'
, 'test_DB-2'
等等。那是因为我在 database.yml.
中只指定了一个测试数据库
我在 rails guides 中读到,显然我必须在 test_helper.rb
中使用之前和之后的操作
ENV["RAILS_ENV"] ||= "test"
require_relative "../config/environment"
require "rails/test_help"
require "minitest/autorun"
require "minitest/reporters"
Minitest::Reporters.use!
class ActiveSupport::TestCase
parallelize_setup do |worker|
# setup databases
end
parallelize_teardown do |worker|
# setup databases
end
# Run tests in parallel with specified workers
parallelize(workers: :number_of_processors)
# Setup all fixtures in test/fixtures/*.yml for all tests in alphabetical order.
fixtures :all
# Add more helper methods to be used by all tests here...
end
但是我该怎么做,我可以将旧测试数据库的数据保留在 database.yml 中吗?我可以通过在操作前后使用这些来绕过手动创建数据库吗?
提前致谢!
编辑
我的database.yml的测试部分是:
test:
adapter: mysql2
database: <%= ENV["testDB"] %>
username: <%= ENV["testDB-username"] %>
password: <%= ENV["testDB-password"] %>
host: localhost
encoding: utf8
collation: utf8_unicode_ci
localhost 上的testDB-username 可以访问testDB,但没有全局root 权限。
感谢 edariedl 的提示,我能够设置并行测试。我必须向 dev-sql 用户授予全局权限。这与我通常的设置不同,我只向 dev-database.
授予权限
向我的 dev-sql 用户授予全局权限后:
mysql > GRANT ALL PRIVILEGES ON *.* TO user@localhost;
mysql > FLUSH PRIVILEGES;
Minitest 完成剩下的工作并分叉测试。它创建 n 个数据库,其中 n 是系统的 cpu-cores 数量。
在我的例子中,这种并行化似乎比线程测试更可靠、更快。
我正在为一个应用程序进行测试,现在刚刚超过 50 个测试,这意味着并行测试开始了。有了它,我目前收到错误消息告诉我 ActiveRecord::ConnectionNotEstablished: Access denied for user 'user'@'localhost' to database 'test_DB-0'
、'test_DB-1'
, 'test_DB-2'
等等。那是因为我在 database.yml.
我在 rails guides 中读到,显然我必须在 test_helper.rb
ENV["RAILS_ENV"] ||= "test"
require_relative "../config/environment"
require "rails/test_help"
require "minitest/autorun"
require "minitest/reporters"
Minitest::Reporters.use!
class ActiveSupport::TestCase
parallelize_setup do |worker|
# setup databases
end
parallelize_teardown do |worker|
# setup databases
end
# Run tests in parallel with specified workers
parallelize(workers: :number_of_processors)
# Setup all fixtures in test/fixtures/*.yml for all tests in alphabetical order.
fixtures :all
# Add more helper methods to be used by all tests here...
end
但是我该怎么做,我可以将旧测试数据库的数据保留在 database.yml 中吗?我可以通过在操作前后使用这些来绕过手动创建数据库吗?
提前致谢!
编辑
我的database.yml的测试部分是:
test:
adapter: mysql2
database: <%= ENV["testDB"] %>
username: <%= ENV["testDB-username"] %>
password: <%= ENV["testDB-password"] %>
host: localhost
encoding: utf8
collation: utf8_unicode_ci
localhost 上的testDB-username 可以访问testDB,但没有全局root 权限。
感谢 edariedl 的提示,我能够设置并行测试。我必须向 dev-sql 用户授予全局权限。这与我通常的设置不同,我只向 dev-database.
授予权限向我的 dev-sql 用户授予全局权限后:
mysql > GRANT ALL PRIVILEGES ON *.* TO user@localhost;
mysql > FLUSH PRIVILEGES;
Minitest 完成剩下的工作并分叉测试。它创建 n 个数据库,其中 n 是系统的 cpu-cores 数量。
在我的例子中,这种并行化似乎比线程测试更可靠、更快。