使用grep将可执行输出与文本文件进行比较

时间:2016-04-26 04:56:01

标签: shell testing grep

我需要一种自动方法来将我的C ++标准输出与预期的输出进行比较。测试用例文件。

过去我使用了一个shell脚本,它通过传递输入执行我的程序,然后将输出与grep比较为纯文本。现在的问题是我的输出跨越多行并且有更多的测试用例,这使得将预期输出与文本文件进行比较变得更加容易。

我过去使用的测试脚本:     cd /     cd media / psf / Home /开发人员/项目/     使

./a.out < tests/test01.txt | grep 'EXPECTED OUTPUT EXAMPLE' &> /dev/null
if [ $? == 0 ]; then
    echo "ERROR CODE 1.1: OK"
else
    echo "ERROR CODE 1.1: BAD"
fi
echo ""

如何修改此项以与文本文件进行比较,而不是文字字符串?

4 个答案:

答案 0 :(得分:2)

以下是您打算实现的目标示例:

$ cat abcd.c 
#include<stdio.h>

void main()
{
    printf("hello\nworld\n");
}
$ gcc abcd.c 
$ ./a.out 
hello
world
$ cat expected_output 
hello
world
$ diff -q <(./a.out) ./expected_output &> /dev/null 
$ echo $?
0
$ echo "newline" >> ./expected_output 
$ diff -q <(./a.out) ./expected_output &> /dev/null 
$ echo $?
1
$

答案 1 :(得分:1)

至少如果你有Gnu diff (因为它附带Linux),它允许使用特殊文件名-来表示stdin,你可以这样做

./a.out < tests/test01.txt | diff -- - golden_file.txt

查看a.out的输出和golden_file.txt的内容之间的差异。当然,这种方法的变化是可能的。请查看适用于diff的选项,尤其是--brief--report-identical-files--side-by-side

另一种可能性是使用cmp代替diff

答案 2 :(得分:0)

这可能会有所帮助..

find -name'filename'|读取f;做[[“$(grep -o -w -f patterns $ f | sort -u | wc -l)” - eq“$(cat patterns | wc -l)”]]&amp;&amp; echo $ f;完成

答案 3 :(得分:0)

在提供的答案的帮助下,我能够回答我自己的问题。 以下修改后的shell脚本可以实现我的目的:

cd /
cd media/psf/Home/Developer/Project5/
make

echo "Test 01:"
diff <(./a.out < tests/test01.txt) tests/test01.txt.expected &> /dev/null
if [ $? == 0 ]; then
    echo "OK"
else
    echo "BAD"
fi
echo ""