gol*_*enk 3 phpunit batch-file
我是批处理脚本的新手,但是,之前我做过一些bash脚本.我的批处理文件将运行另一个程序(即phpunit),该程序将输出一些东西到命令提示符.我将如何让批处理脚本拦截已经输出的东西并根据它做出决定.例如,phpunit通常会打印一个'.' 对于每个成功运行的测试,每个测试失败的"F".如何让批处理脚本捕获此输出并根据它是否看到'.'来执行不同的操作.还是'F'?
我首先回答你的实际问题,但这些建议可能对你想要解决的潜在问题有用:
在你的特定情况下,我会用PHP而不是BASH来做,因为它可能最终需要一些复杂的解析.但是让我们看看如何在BASH中做一些简单的事情.挑战是输出可能如下所示:
PHPUnit 3.4.5 by Sebastian Bergmann.
......................................
Time: 10 seconds, Memory: 9.00Mb
OK (38 tests, 660 assertions)
Run Code Online (Sandbox Code Playgroud)
或者看起来像这样:
PHPUnit 3.4.5 by Sebastian Bergmann.
............................................................ 60 / 380
............................................................ 120 / 380
...............................................S............ 180 / 380
.......S.................................................... 240 / 380
............................................................ 300 / 380
............................................................ 360 / 380
....................
Time: 01:44, Memory: 14.50Mb
OK, but incomplete or skipped tests!
Tests: 380, Assertions: 6546, Skipped: 2.
Run Code Online (Sandbox Code Playgroud)
或者看起来像这样:
PHPUnit 3.4.5 by Sebastian Bergmann.
..IF
Time: 0 seconds, Memory: 8.00Mb
There was 1 failure:
1) MyTest::testTemp
Failed asserting that <boolean:false> is true.
/path/to/myTest.php:68
FAILURES!
Tests: 4, Assertions: 5, Failures: 1, Incomplete: 1.
Run Code Online (Sandbox Code Playgroud)
我猜你的应用程序就像是一个小时的cron工作,可以运行你所有的测试并确保没有任何破坏.所以我只想使用正则表达式来寻找"FAILURES"这个词:
#!/bin/bash
RESULT=`phpunit tests/myTest.php`
if [[ $RESULT =~ FAILURES ]]
then
echo "Excuse me, Sir, but we have a problem in the unit tests...";echo "$RESULT"
fi
Run Code Online (Sandbox Code Playgroud)
我正在使用反引号来捕获输出.一些BASH专家会告诉你使用$().无论哪种方式在这里工作:
....
RESULT=$(phpunit tests/myTest.php)
...
Run Code Online (Sandbox Code Playgroud)