класс ActiveSupport::TestCase
Константы
- Assertion
Общедоступные методы класса
# File activesupport/lib/active_support/test_case.rb, line 74
def parallelize(workers: :number_of_processors, with: :processes)
workers = Concurrent.physical_processor_count if workers == :number_of_processors
workers = ENV["PARALLEL_WORKERS"].to_i if ENV["PARALLEL_WORKERS"]
return if workers <= 1
executor = case with
when :processes
Testing::Parallelization.new(workers)
when :threads
Minitest::Parallel::Executor.new(workers)
else
raise ArgumentError, "#{with} is not a supported parallelization executor."
end
self.lock_threads = false if defined?(self.lock_threads) && with == :threads
Minitest.parallel_executor = executor
parallelize_me!
end Параллелизует набор тестов.
Принимает аргумент workers, который управляет тем, сколько раз процесс будет разветвлён. Для каждого процесса будет создана новая база данных, дополненная номером рабочего процесса.
test-database-0 test-database-1
Если ENV["PARALLEL_WORKERS"] установлено, аргумент workers будет проигнорирован, и вместо него будет использовано значение переменной окружения. Это полезно для CI-среды или других сред, где вам может потребоваться больше рабочих процессов, чем для локального тестирования.
Если количество рабочих процессов установлено в 1 или меньше, тесты не будут параллелизованы.
Если workers установлено в :number_of_processors, количество рабочих процессов будет установлено в фактическое количество ядер на вашем компьютере.
По умолчанию метод параллелизации выполняется путём разветвления процессов. Если вы хотите использовать потоки вместо этого, вы можете передать with: :threads в метод parallelize. Обратите внимание, что параллелизация с использованием потоков не создаёт несколько баз данных и в настоящее время не будет работать с системными тестами.
parallelize(workers: :number_of_processors, with: :threads)
Параллелизация с использованием потоков напрямую использует параллельный планировщик minitest. Параллелизация с использованием процессов использует сервер Ruby DRb.
# File activesupport/lib/active_support/test_case.rb, line 109
def parallelize_setup(&block)
ActiveSupport::Testing::Parallelization.after_fork_hook do |worker|
yield worker
end
end Установка хука для параллельного тестирования. Это можно использовать, если у вас несколько баз данных или любое другое поведение, которое необходимо выполнить после разветвления процесса, но до запуска тестов.
Примечание: эта функция недоступна при параллелизации с использованием потоков.
В вашем test_helper.rb добавьте следующее:
class ActiveSupport::TestCase
parallelize_setup do
# create databases
end
end
# File activesupport/lib/active_support/test_case.rb, line 128
def parallelize_teardown(&block)
ActiveSupport::Testing::Parallelization.run_cleanup_hook do |worker|
yield worker
end
end Сброс хука для параллельного тестирования. Это можно использовать для удаления баз данных, если ваше приложение использует несколько баз данных для записи/чтения, или для других действий по очистке перед завершением тестов. Это выполняется до закрытия разветвлённого процесса.
Примечание: эта функция недоступна при параллелизации с использованием потоков.
В вашем test_helper.rb добавьте следующее:
class ActiveSupport::TestCase
parallelize_teardown do
# drop databases
end
end
# File activesupport/lib/active_support/test_case.rb, line 41 def test_order ActiveSupport.test_order ||= :random end
Возвращает порядок, в котором выполняются тестовые случаи.
ActiveSupport::TestCase.test_order # => :random
Возможные значения: :random, :parallel, :alpha, :sorted. По умолчанию :random.
# File activesupport/lib/active_support/test_case.rb, line 31 def test_order=(new_order) ActiveSupport.test_order = new_order end
Устанавливает порядок, в котором выполняются тестовые случаи.
ActiveSupport::TestCase.test_order = :random # => :random
Допустимые значения:
-
:random(для выполнения тестов в случайном порядке) -
:parallel(для выполнения тестов параллельно) -
:sorted(для выполнения тестов в алфавитном порядке по имени метода) -
:alpha(эквивалентно:sorted)
© 2004–2019 David Heinemeier Hansson
Licensed under the MIT License.