VcTester是一款针与Visual C/C++配套使用的白盒测试工具(包括单元测试、集成测试),它不仅提供在线测试(包括在线脚本驱动、在线脚本桩、在线测试改进),还提供功能强大的集成开发环境(IDE,Integrated Development Environment),集辑辑、调试、测试与一体,该IDE还支持将各式各样的外部命令嵌进来,籍此集成第三方调测辅助工具。其中,VC的build、rebuild、clean等构建命令是VcTester日常编程中经常用到的,把这些命令集成到VcTester的IDE环境,对提高工作效率大有帮助.
本文描述如何在VcTester或VcSmith中集成VC的构建功能,以及,如何编写批处理文件实现被测工程的自动构建与自动启动测试,这一步是借助VcTester打造每日构建平台所必须的。本文描述的集成过程同时适用于VcTester的共享版(即VcSmith)与商用版。
自动构建集成的原理
VcSmith&VcTester提供了良好的外部工具嵌入功能,在主界面运行主菜单“View | Option...”,在弹出Option对话框的User Tool页,可以增加、删除、修改客户化定制工具的功能,如下图:
我们先看一个简单的扩展命令是如何定义的,在上图界面点Add按钮,弹出一个对话框,我们如下图配置各栏目:
这个外部命令的显示名称为“Edit current source”,它调用Notepad.exe打开当前工程的当前源文件,其中%CseCurrFile%是本集成平台提供的环境变量,当调用该外部命令时,环境变量%CseCurrFile%会替换成当前IDE正在使用的源文件全路径文件名,VcSmith识别环境变量是不区别大小写的。
上例之所以把CseCurrFile环境变量用双引号括起来,是因为文件名可能带空格,双引号括起来表示把引号内字串整体当作一个命令参数。
环境变量可以在外部命令(Command)、命令参数(Argument)、工作路径(Work dir)、图标文件(Image file)这4个栏目使用,当用户定制Dos shell命令(即调用cmd.exe)时,还可以在Command与Argument使用DOS的环境变量,比如我们在Command输入“cmd.exe”,在Argument输入“/c "echo %path% && pause"”,这里“&&”是多个shell命令的连接符,该命令定制后运行,可以正确打印DOS的path环境变量。
集成步骤
VC提供了命令行形式的build命令,VC6使用msdev,VC7与VC8使用devenv,比如在VC6中,实现build操作可运行如下命令:
msdev c:/VcSmith22/sample/TestBed6/TestBed6.dsp /MAKE "TestBed6 - Win32 Debug" /build
使用msdev或devenv可实现VC6、VC7、VC8、VC9工程的build、clean、rebuild等操作,详细请查阅微软MSDN文档。
在运行msdev或devenv之前,还须设置当前VC的环境配置,调用VC安装路径bin目录下的vcvars32.bat。把这一步与上一步连接起来,命令格式为(以VC6为例):
cmd.exe /c "call "%Vc6Env%" && msdev "%CseProjDir%/TestBed6.dsp" /MAKE "TestBed6 - Win32 Debug" /build"
其中环境变量%Vc6Env%指示全路径的vcvars32.bat,%CseProjDir%指示当前工程所在目录。同样,clean操作命令:
cmd.exe /c "call "%Vc6Env%" && msdev "%CseProjDir%/TestBed6.dsp" /MAKE "TestBed6 - Win32 Debug" /clean"
BuildAll操作:
cmd.exe /c "call "%Vc6Env%" && msdev "%CseProjDir%/TestBed6.dsp" /MAKE "TestBed6 - Win32 Debug" /rebuild"
类似的,在VC7、VC8、VC9中也可以实现被测工程的build、clean、rebuild等操作,这里不再详细举例。
上面build命令中“%Vc6Env%”是用来指示vcvars32.bat位置的环境变量,由VcSmith安装程序设置到CseWin的配置文件中,大家可以从CseWin.ini文件的environment段找到该项配置。
参考文献:
1. ezTester,《VcSmith用户使用手册》
=========== END ===============================
本专题相关的文章:
第4代白盒测试方法实践之“VcTester持续集成框架的应用价值”
第4代白盒测试方法实践之“使用VcTester实施持续集成的组织管理模式”
第4代白盒测试方法实践之“如何在VcTester集成自动构建功能”
第4代白盒测试方法实践之“使用VcTester构造持续集成及每日构建平台”
第4代白盒测试方法实践之“内存泄露检查工具VLD如何与VcTester配合使用”
第4代白盒测试方法实践之“如何将Pclint嵌入到VcTester中使用”