class ActiveSupport::TestCase
Константы
- Assertion
Открытые методы класса
# File activesupport/lib/active_support/test_case.rb, line 79 def parallelize(workers: :number_of_processors, with: :processes, threshold: ActiveSupport.test_parallelization_threshold) workers = Concurrent.physical_processor_count if workers == :number_of_processors workers = ENV["PARALLEL_WORKERS"].to_i if ENV["PARALLEL_WORKERS"] return if workers <= 1 Minitest.parallel_executor = ActiveSupport::Testing::ParallelizeExecutor.new(size: workers, with: with, threshold: threshold) 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.
Поскольку параллелизация создает накладные расходы, она включается только тогда, когда количество тестов для запуска превышает параметр threshold. Значение по умолчанию равно 50, и его можно настроить через config.active_support.test_parallelization_threshold.
# File activesupport/lib/active_support/test_case.rb, line 101 def parallelize_setup(&block) ActiveSupport::Testing::Parallelization.after_fork_hook(&block) end
Зацепка настройки для параллельного тестирования. Это может быть использовано, если у вас есть несколько баз данных или любое поведение, которое должно быть выполнено после разветвления процесса, но до запуска тестов.
Примечание: эта функция недоступна при параллелизации с использованием потоков.
В вашем test_helper.rb добавьте следующее:
class ActiveSupport::TestCase
parallelize_setup do
# create databases
end
end
# File activesupport/lib/active_support/test_case.rb, line 118 def parallelize_teardown(&block) ActiveSupport::Testing::Parallelization.run_cleanup_hook(&block) end
Зацепка очистки для параллельного тестирования. Это может быть использовано для удаления баз данных, если ваше приложение использует несколько баз данных записи/чтения, или для других действий по очистке перед завершением тестов. Это выполняется перед закрытием разветвленного процесса.
Примечание: эта функция недоступна при параллелизации с использованием потоков.
В вашем test_helper.rb добавьте следующее:
class ActiveSupport::TestCase
parallelize_teardown do
# drop databases
end
end
# File activesupport/lib/active_support/test_case.rb, line 42 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 32 def test_order=(new_order) ActiveSupport.test_order = new_order end
Устанавливает порядок, в котором выполняются тестовые случаи.
ActiveSupport::TestCase.test_order = :random # => :random
Допустимые значения:
-
:random(для запуска тестов в случайном порядке) -
:parallel(для запуска тестов параллельно) -
:sorted(для запуска тестов в алфавитном порядке по имени метода) -
:alpha(эквивалентно:sorted)
© 2004–2021 David Heinemeier Hansson
Licensed under the MIT License.