Поиск общего времени по нескольким файлам текстового журнала - PullRequest
1 голос
/ 20 февраля 2012

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

Я хочу получить совокупность времени, чтобы выяснить, сколько времени потребовалось для запуска всех сценариев (~ 200 сценариев, ~ 8000 тестовых случаев). Проблема в том, что иногда сценарий прерывается, не выполняя ни одного случая, при этом инфраструктура по-прежнему записывает время в файл журнала. Я хочу сделать что-то вроде:

Pick specific files with the same script name (as a single script can be run multiple times and has a log file for each of these runs in its name)
    Read the Log file for a single script
        If FAIL value = (total test cases) then skip the log file
        If ABORT value = (total test cases) then skip the log file
        If PASS value = (total test cases -1) then record the Start and End times to the output file
    Goto the next script in the same name set
Goto the next set of script files 

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

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

Сведения о файле:

Имя файла журнала:

TestScriptA_20120201.LOG
TestScriptA_20120202.LOG
TestScriptA_20120203.LOG
TestScriptB_20120201.LOG
TestScriptB_20120202.LOG
TestScriptC_20120202.LOG
TestScriptD_20120203.LOG

Содержимое файла:

Report File:        TestScriptA_20120203.LOG
Date Created:       14-02-2012
Time Started:       09:21:03
Test Database:      staging
Processor:          proc_stage
Test Login:         ABC
Test Date :         14-02-2012


Test #1                          Status : Pass
Purpose  = First Test
DataFile = master1.tda
StepName = TS1 - Test Step 1


Test #2                          Status : Pass
Purpose  = First Test
DataFile = master2.tda
StepName = TS1 - Test Step 2




Test Step Results:     First Test

Total Tests:                         2
Tests run:                           2
Aborted Tests:                       0
Passed Tests:                        2
Failed Tests:                        0


Script finished at 09:26:45 on 14-02-2012
Execution Time : 00:05:42
-------------------------------  End Of Report -----------------------------

1 Ответ

3 голосов
/ 20 февраля 2012

Я предположил, что файлы сценариев имеют расширение .BAT, поэтому этот пакетный файл не может находиться в одном каталоге с файлами сценариев и журналов, но должен выполняться на нем. Возможно, вам нужно добавить команду CD в начале ...

@echo off
setlocal EnableDelayedExpansion
rem Initialize total time
set totalTime=0
set total=0
rem For each script file...
for %%s in (*.bat) do (
   rem Initialize aggregate time for this script
   set "aggregateTime[%%~Ns]=0"
   set "%%~Ns=0"
   rem For each log file created by this script file...
   for %%l in ("%%~Ns*.log") do (
      rem Get Passed Tests
      for /F "tokens=3" %%p in ('findstr /C:"Passed Tests:" %%l') do set passed=%%p
      rem If Passed Tests is greater than zero...
      if !passed! gtr 0 (
         rem Get Start and End times
         for /F "tokens=3" %%s in ('findstr /C:"Time Started:" %%l') do set start=%%s
         for /F "tokens=4" %%e in ('findstr /C:"Script finished" %%l') do set end=%%e
         rem Record Start and End times to output file
         echo Log file: %%l, Start time: !start!, End time: !end!
         rem Get Elapsed time
         rem BEWARE! Result in log file have a space in "Execution Time :" text
         rem If it is deleted, change 4 by 3 in the line below
         for /F "tokens=4" %%e in ('findstr /C:"Execution Time" %%l') do set elapsed=%%e
         rem Convert elapsed time to seconds
         for /F "tokens=1-3 delims=:" %%a in ("!elapsed!") do (
            set "elapsed=((1%%a %% 100)*60+(1%%b %% 100))*60+(1%%c %% 100)"
         )
         rem Add elapsed time to aggregates
         set /A "aggregateTime[%%~Ns]+=elapsed"
         set /A "%%~Ns+=1"
         set /A totalTime+=elapsed
         set /A total+=1
      )      
   )
   echo --------------------------------------------------
   echo/
)
echo/
echo --------------------------------------------------
echo Aggregate and average times for each script (in seconds):
for /F "tokens=2,3 delims=[]=" %%a in ('set aggregateTime[') do (
   set /A "average=%%b/%%a"
   echo %%a  !aggregateTime[%%a]!  !average!
)
echo/
echo Aggregate and average total times (in seconds):
set /A average=totalTime/total
echo !totalTime!  !average!

Это первая версия. Некоторые детали могут быть исправлены или скорректированы, например, преобразование совокупного и среднего времени в формат ЧЧ: ММ: СС.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...