《Effective Debugging:软件和系统调试的66个有效方法》——第12条:将复杂的测试场景自动化...
本节书摘来自华章计算机《Effective Debugging:软件和系统调试的66个有效方法》一书中的第2章,第12节,作者[希]迪欧米迪斯·斯宾奈里斯(Diomidis Spinellis),爱飞翔 译,更多章节内容可以访问云栖社区“华章计算机”公众号查看。
第12条:将复杂的测试场景自动化
我们可以用脚本对复杂的测试场景进行自动化。自动化的方式有很多种。如果是要对处理流程与文件进行编排,那么可以考虑Unix shell所提供的大量实用工具(参见第22条)。此外,通过能够获取URL的curl命令,以及能够解析JSON数据的jq命令,我们还可以用shell来测试Web服务。对于牵涉API访问及状态维护等事宜的复杂场景来说,我们可以求助于功能更为丰富的脚本语言,如Python、Ruby或Perl,另外,还有很多系统会内置它们自己的脚本语言,如Apache HTTP Server、Wireshark(一款网络包分析器)以及VLC(一款媒体播放器)都支持Lua编程语言。
如果软件本身不支持脚本语言,但你能够对它进行修改,那么可以考虑将该软件与脚本语言结合起来,通过相关的API来把软件程序中的函数披露给脚本语言。现在看一个简单的例子(这是笔者特意构造出来的)。假设我们用C语言实现了一个数学函数库,并且需要对其进行测试,那么可以采用程序清单2.1这样的C语言代码来加载并运行名为debug.lua的Lua程序。这段C语言代码会把sin、cos及tan函数导出给Lua程序,以供其进行测试。
在Debian Linux系统中,可以通过sudo apt-get install lua5.2-dev命令来安装Lua,并通过cc myprog.c-llua5.2-lm来编译上述C语言程序。(其他操作系统上面的安装方法,请参阅Lua的文档。)然后,笔者编写下面这个简短的Lua程序,并通过正弦函数的定义来验证数学函数库中的函数所达到的精确程度。
运行C语言程序之后,该程序会加载Lua代码,并产生下面这样的输出:
在现实工作中,本例所举的C语言程序相当于你正在开发的大型应用程序,而受测的三角函数,则相当于应用程序里面有待检查的那些函数,你可以通过Lua程序为其打造相应的测试用例。
要点
- 通过脚本语言来自动执行复杂的测试用例。