Автоматизация тестирования с использованием пакетных файлов:
-
02-07-2019 - |
Вопрос
У меня есть следующий макет для моего набора тестов:
TestSuite1.cmd:
- Запустите мою программу
- Проверьте возвращаемый результат
- Если возвращаемый результат не равен 0, преобразуйте ошибку в текстовый вывод и прервите выполнение сценария.Если это удалось, запишите успех.
В моем единственном файле .cmd я вызываю свою программу примерно 10 раз с разными входными данными.
Проблема в том, что программа, которую я запускаю 10 раз, каждый раз выполняется по несколько часов.
Есть ли способ распараллелить все эти 10 запусков моей программы, при этом каким-то образом проверяя возвращаемый результат и предоставляя правильный выходной файл и при этом используя одинокий .cmd и в один выходной файл?
Решение
Предполагая, что они не будут мешать друг другу, записывая в одни и те же файлы и т. д.:
test1.cmd
:: intercept sub-calls.
if "%1"=="test2" then goto :test2
:: start sub-calls.
start test1.cmd test2 1
start test1.cmd test2 2
start test1.cmd test2 3
:: wait for sub-calls to complete.
:loop1
if not exist test2_1.flg goto :loop1
:loop2
if not exist test2_2.flg goto :loop2
:loop3
if not exist test2_3.flg goto :loop3
:: output results sequentially
type test2_1.out >test1.out
del /s test2_1.out
del /s test2_1.flg
type test2_2.out >test1.out
del /s test2_2.out
del /s test2_2.flg
type test2_3.out >test1.out
del /s test2_3.out
del /s test2_3.flg
goto :eof
:test2
:: Generate one output file
echo %1 >test2_%1.out
ping -n 31 127.0.0.1 >nul: 2>nul:
:: generate flag file to indicate finished
echo x >test2_%1.flg
Это запустит три параллельных процесса, каждый из которых повторяет свой порядковый номер, а затем подождет 30 секунд.
Все с одним файлом cmd и (в конечном итоге) одним выходным файлом.
Другие советы
Параллельный запуск в пакетных файлах можно выполнить с помощью исполняемого файла/команды «start».
Окна:
вы создаете пакетный файл, который по сути вызывает:
start TestSuite1.cmd [TestParams1]
start TestSuite1.cmd [TestParams2]
и так далее, что по сути означает создание новых командных строк,
это будет работать, если приложение может обрабатывать одновременных пользователей (даже если это один и тот же пользователь), а ваш TestSuite1.cmd может обрабатывать параметры.
Вам нужно будет запустить скрипт с разными параметрами на разных машинах потому что все, что заставляет программу выполнять задачу так долго (IO, процессорное время), будет еще короче, когда несколько экземпляров вашей программы запускаются одновременно.
Только исключение:время выполнения вызвано тем, что программа переводит себя в спящий режим.
попробуйте команду начинать, он запускает новую командную строку, и вы можете отправлять любые команды, которые хотите запустить.
Я бы использовал это для создания пакетных файлов, которые запускают тесты, а затем добавляют их к выходному файлу.txt, используя >> как таковой:
testthingie.cmd >> output.txt