2008-09-25 2 views
2

У меня есть следующие макет для моего тестового набора:автоматизации тестов с использованием пакетных файлов:

TestSuite1.cmd:

  1. Запустить мою программу
  2. Проверьте свой обратный результат
  3. Если обратный результат не 0, преобразовать ошибку в текстовый вывод и прервать скрипт. Если это удастся, запишите успех.

В моем одном файле .cmd я вызываю свою программу примерно 10 раз с разными вводами.

Проблема заключается в том, что программа, которую я запускаю 10 раз, занимает несколько часов, чтобы запускать каждый раз.

Есть ли способ для меня, чтобы распараллелить все эти 10 забегов моей программы в то же время каким-то образом проверить обратный результат и обеспечение надлежащего выходного файла и в то же время с помощью одного CMD-файл и один выходной файл ?

ответ

4

Предполагая, что они не будут мешать друг другу, написав те же файлы, и т.д.:

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-файлом и (в конечном итоге) одним выходным файлом.

+0

Что делать, если test1 занимает больше времени, чем test2? – 2008-09-25 12:16:09

+0

Это будет запускаться все три, но основная программа будет отвечать за сбор отдельных выходов - файлы флагов используются для указания основной программе, что подпрограмма завершена. – paxdiablo 2008-09-25 12:22:35

+0

Сроки не будут иметь значения в этой версии - он будет ждать, пока все параллельные подпрограммы не закончатся, прежде чем основная программа будет сопоставлять выходные файлы. Весь процесс займет столько же времени, сколько и самая длинная подпрограмма (с небольшим добавлением для сортировки). – paxdiablo 2008-09-25 12:23:47

0

попробуйте выполнить команду начало, оно запускает новую командную строку и вы можете отправлять любые команды, которые вы хотите запустить.

Я хотел бы использовать это, чтобы порождать командные файлы, которые запускаются тесты, а затем присоединяет к output.txt, используя >> как таковой:

testthingie.cmd >> output.txt 
+0

но это не решает мою проблему, я все же хочу проверить и записать вывод в один выходной файл. – 2008-09-25 12:04:37

1

Запуск вещи параллельно в пакетных файлах может быть сделано с помощью " start 'исполняемый файл/команда.

1

Окна:

создать пакетный файл, который по существу называет:

start TestSuite1.cmd [TestParams1] 
start TestSuite1.cmd [TestParams2] 

и так далее, что, по существу, разветвлением новые командные строки,

, которая будет работать, если приложение может обрабатывать одновременно работающих пользователей (даже если это тот же пользователь), и ваш TestSuite1.cmd способен обрабатывать параметры.

0

Необходимо запустить сценарий с различными параметрами на разных машинах, потому что независимо от того, что программа занимает так много времени для задачи (время ввода-вывода, процессорное время), будет еще короче, если несколько экземпляров вашей программы работают на один раз.

Только исключение: время запуска является причиной того, что программа засыпает.

Смежные вопросы