寻找自动化测试kshell应用程序的方法

时间:2009-06-29 14:46:21

标签: shell awk automated-tests

我继承了一个shell脚本应用程序,它是kshell脚本,awk和java程序的组合。我已经为java部分编写了JUnit测试。

有没有一种方法可以为kshell脚本和awk程序做类似的事情?

我曾考虑使用JUnit和System.exec()来调用脚本,但似乎应该有更好的方法。

3 个答案:

答案 0 :(得分:3)

我找到shUnit2并尝试了。

使用试用shUnit

的结果进行更新

shUnit按预期工作。脚本文件是使用定义的测试函数编写的,然后调用shUnit。

示例:

#!/bin/sh
testFileCreated()
{
  TESTFILE=/tmp/testfile.txt
  # some code that creates the $TESTFILE
  assertTrue 'Test file missing' "[ -s '${TESTFILE}' ]"
}
# load shunit2
. /path/to/shUnit/shunit2-2.1.5/src/shell/shunit2

结果

Ran 1 test.

OK

如果文件不存在,'OK'将替换为'FAILED'。

答案 1 :(得分:0)

您可能想尝试Expect。它专为自动化交互式程序而设计。当然,Expect是在TCL之上编写的,TCL是一种令人讨厌的脚本语言。所以有Python(Pexpect)的接口,也许还有其他程序友好的语言。但是TCL / Expect有很多文档仍然有用。

答案 2 :(得分:0)

这不是您问题的直接答案,但您可以考虑使用简单的Makefile来运行具有不同参数的bash脚本。

例如,写下这样的东西:

cat >Makefile

test_all: test1 test2 test3

test1:
    script1 -parameter1 -parameter2

test2: $(addprefix test2file_, $TESTFILES)
test2file_%:
    script2 -filename $*

test3:
    grep|awk|gawk|sed....

通过调用'make test_all',您将自动执行所有脚本,并且语法不是很难学习 - 您只需要定义规则名称(test1,test_all ...)以及与之关联的命令。