#lua #lua-busted
#lua #lua-сбойный
Вопрос:
Набор тестов для моего проекта Lua разделен на несколько файлов внутри spec/
каталога. Есть ли способ попросить busted запускать эти тесты параллельно? Если я вызываю busted
без каких-либо аргументов, он запускает все тесты последовательно.
Ответ №1:
Одна вещь, которая, кажется, работает, — это использовать GNU Parallel для одновременного запуска нескольких тестовых сценариев.
parallel busted -o utfTerminal ::: spec/*_spec.lua
-o utfTerminal
Нужно сказать busted, чтобы он использовал знакомый вывод «зеленые круги» вместо упрощенного текстового вывода, который он использует при перенаправлении его стандартного вывода.
Ответ №2:
Я мало что понимаю в сбойной библиотеке, но, по-видимому, то, что вы хотите, — это работать с несколькими потоками
Потоки — это в основном процесс, в котором код выполняется построчно до конца. Когда мы создаем больше потоков для кода, несколько циклов, функций и т.д… в этом новом потоке они выполняются одновременно с исходным кодом, не вмешиваясь в процесс, то есть параллельно выполняется более одной вещи.
К сожалению, Lua не содержит способа выполнения нескольких потоков, максимум, что ему приходится работать с потоками, — это сопрограммы. Однако существуют библиотеки, такие как lua-llthreads, которые выполняют эту задачу, попробуйте и посмотрите, что вы думаете. Объединив его со своим кодом с помощью Busted, вы сможете выполнять параллельные задачи
Комментарии:
1. Я полагаю, было бы проще запускать его как отдельные процессы вместо потоков. Однако я не знаю, как это сделать, не испортив стандартный вывод, поскольку каждый процесс работает одновременно.
2.@hugomg вы можете попробовать создать новый сценарий Lua и запускать каждый из них отдельно в разных сценариях с
os.execute()
помощью, например: вы разделяете каждый из них наscript1.lua
,script2.lua
иscript3.lua
, затем вы создаете так называемыйexecute.lua
и выполняете:os.execute("lua script1.lua")
os.execute("lua script2.lua")
os.execute("lua script3.lua")
вы также можете использоватьio.popen()
, но обычно это служит для сбора некоторой отдачи от cmd.3. @hugomg Мне удалось решить вашу проблему и / или прояснить ваш вопрос?