Автоматизация тестирования с использованием пакетных файлов:

StackOverflow https://stackoverflow.com/questions/132857

  •  02-07-2019
  •  | 
  •  

Вопрос

У меня есть следующий макет для моего набора тестов:

TestSuite1.cmd:

  1. Запустите мою программу
  2. Проверьте возвращаемый результат
  3. Если возвращаемый результат не равен 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
Лицензировано под: CC-BY-SA с атрибуция
Не связан с StackOverflow
scroll top