Есть ли способ запустить сбойный набор тестов параллельно?

#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 Мне удалось решить вашу проблему и / или прояснить ваш вопрос?