анализ файла нерегулярной деятельности, запрос обратной связи на подходе - PullRequest
0 голосов
/ 15 января 2011

Привет Я хотел бы получить некоторые идеи и отзывы о том, как вы решите задачу анализа этого файла. Мне в основном нужно имя и статус каждого подтеста между «Стартовый тест» и «Законченный тест» Проблема в том, что иногда «Finished» отсутствует, и он запускается прямо из-за сбоя теста.

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

    myfile.log
****Starting test of test1
Message: Total Tests: 5
Log 23w4arg
Log 3958300
Message: PASS : test1SubTest1(): Pass
Log 23w4arg
Log efasf0
Message: PASS : test1SubTest2(): Pass
Log eafsarg
Log 3asf0
Message: FAIL: test1SubTest3(): Pass
Log 23asffg
Log 3fsaf00
Message: PASS : test1SubTest4(): Pass
Log 23fsafg
Log 3ag300
Message: PASS : test1SubTest5(): Pass
Message: Totals: 4 passed, 1 failed, 0 skipped
****Finished testing test1
Log 3ag3aw0
Log 3ag340
****Starting test of test2
Message: Total Tests: 3
Log 23w4arg
Log 3958300
Message: PASS : test2SubTest1(): Pass
Log 23w4arg
Log efasf0
Message: PASS : test2SubTest2(): Pass
Log 3ag340
****Starting test of test3
Log 234rg
Log 394w300
Message: PASS : test3SubTest1(): Pass
Log 23w4gdg
Log esdsf0
Message: PASS : test3SubTest2(): Pass
Log eafjhg
Log 3hj0
Message: FAIL: test3SubTest3(): Pass
Message: Totals: 2 passed, 0 failed, 0 skipped
****Finished testing test3

1 Ответ

2 голосов
/ 15 января 2011
    <?php

$file = "log.txt";
$fh = fopen($file, "r");
$contents = fread($fh, filesize($file));
$lines = explode("\n", $contents);
foreach($lines as $l) {
        $startStr = "****Starting test of ";
        $l = trim($l);
        if(stristr($l, $startStr)) {
                $curTest = str_replace($startStr, "", $l);
                echo "$curTest info:\n";
        }
        if(substr($l, 0, 7)=='Message') {
                if(stristr($l, "Total Tests")) {
                        echo "$l\n";
                }
                else {
                        // Test result
                        $infoArr = explode(":", $l);
                        echo "$infoArr[2] completed with result $infoArr[1]\n";
                }
        }

}

?>


Produces:
test1 info:
Message: Total Tests: 5
 test1SubTest1() completed with result  PASS 
 test1SubTest2() completed with result  PASS 
 test1SubTest3() completed with result  FAIL
 test1SubTest4() completed with result  PASS 
 test1SubTest5() completed with result  PASS 
 4 passed, 1 failed, 0 skipped completed with result  Totals
test2 info:
Message: Total Tests: 3
 test2SubTest1() completed with result  PASS 
 test2SubTest2() completed with result  PASS 
test3 info:
 test3SubTest1() completed with result  PASS 
 test3SubTest2() completed with result  PASS 
 test3SubTest3() completed with result  FAIL
 2 passed, 0 failed, 0 skipped completed with result  Totals

Я бы добавил некоторые проверки на неудачные тесты и прочее, но этого должно быть достаточно, чтобы вы начали.

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