VcTester是一款针对Visual C/C++工程中C代码的白盒测试工具,它不仅提供在线测试(包括在线脚本驱动、在线脚本桩、在线测试改进),还提供功能强大的集成开发环境(IDE,Integrated Development Environment),集辑辑、调试、测试与一体,该IDE还支持将各式各样的外部命令嵌进来,籍此集成第三方调测辅助工具。其中,VC的build、rebuild、clean等构建命令是VcTester日常编程中经常用到的,把这些命令集成到VcTester的IDE环境,对提高工作效率大有帮助。
本文描述如何在VcTester中集成VC的构建功能,以及,如何编写批处理文件实现被测工程的自动构建与自动启动测试,这一步是借助VcTester打造每日构建平台所必须的。本文描述的集成过程同时适用于VcTester的共享版与商用版。
自动构建集成的原理
Visual Studio软件,无论VC6、VC7还是VC8,都提供了命令行集成功能,在VC6中,调用msdev程序,使用命令行参数指定待编译的工程名及工程配置名,即可实现build、rebuild与clean操作。同样类似的,在VC7与VC8中,调用devenv程序也能实现命令行集成功能。
比如,在VC6中实现build编译操作可运行如下命令:
msdev c:\VcTester21\sample\demo\demo.dsp /MAKE "demo
- Win32 Debug"
VC6中实现rebuild重新编译操作运行命令:
msdev c:\VcTester21\sample\demo\demo.dsp /MAKE "demo
- Win32 Debug" /REBUILD
VC6中实现clean清除操作运行命令:
msdev c:\VcTester21\sample\demo\demo.dsp /MAKE "demo
- Win32 Debug" /CLEAN
在VC7与VC8中用命令行实现这3类操作是类似的,主要差别是传给msdev或devenv的参数格式不尽相同。另外,需要注意的是:在调用msdev或devenv之前,都应调用vcvars32.bat,这个批处理文件在VC各版本的bin目录下,它主要用来设置编译所需的环境变量及路径配置。
为方便集成,我们把相关DOS命令集中在一个批处理文件中,传入不同参数来区别build、rebuild或clean操作。比如在VC6中,我们编写批处理文件VcBuild6.bat,定义它的调用格式为:
call VcBuild6.bat "dsp FileName" "ProjectName
– ConfigName" [/build | /rebuild | /clean]
批处理中的封装比较简单,在VcBuild6.bat中实际起作用的就如下两条语句:
call vcvars32.bat
msdev %1 /MAKE %2 %3
针对VC7与VC8,我们也按同样方法炮制,编写批处理文件VcBuild7.bat与VcBuild8.bat,这3个批处理文件可在VcTester安装目录找到,大家不妨打开看看。
集成步骤
VcTester工具提供了两种集成方式,其一是按上述原理手工集成,其二是由辅助工具SetupVcBuild.exe按上述原理自动生成一个批处理文件,并将相关命令安装到IDE环境(即修改CseWin.exe的配置文件)。
手工集成过程包括两步:第一步修改批处理文件中的“call vcvars32.bat”,比如将VcBuild6.bat中该语句改成:
call "C:\Program Files\Microsoft Visual Studio\VC98\Bin\vcvasr32.bat"
如此改动的目的是让该DOS命令能找到vcvars32.bat文件。第二步是将build、rebuild、clean命令集成到IDE环境。比如集成如下3个VC6构建命令:
cmd.exe /c call "c:\VcTester21\VcBuild6.bat"
"c:\VcTester21\sample\demo\
demo.dsp" "demo - Win32 Debug" /build
cmd.exe /c call "c:\VcTester21\VcBuild6.bat"
"c:\VcTester21\sample\demo\
demo.dsp" "demo - Win32 Debug" /rebuild
cmd.exe /c call "c:\VcTester21\VcBuild6.bat"
"c:\VcTester21\sample\demo\
demo.dsp" "demo - Win32 Debug" /clean
这里我们以VcTester
V2.1版本中集成c:\VcTester21\sample\demo\demo.dsp工程为例,针对不同VcTester或VC版本及不同的被测工程,大家可以类推。
如果由辅助工具SetupVcBuild.exe进行集成,操作过程就非常简单了,不必手工指定vcvars32.bat所在路径,辅助工具自动帮你找出来,在IDE界面的添加外部工具的过程也省了,辅助工具会自动配置。运行SetupVcBuild.exe后显示的配置界面如下:
以上步骤更详细的过程请参考《VcTester商用版使用手册》中“环境配置与构建集成”一节。补充一点,由于build是经常使用的操作,建议在IDE的option对话框中UserTool页,为该命令指定一个快捷热键,比如Ctrl+F9,有热键后操作效率可提高不少。
编写自动build及自动启动测试的批处理文件
理解上述集成原理后,我们可以编写支持每日构建的批处理文件了,一个“每日构建”实施过程大致如下:
1.从版本机VSS中获取最新代码
2.编译包含最新代码的VC工程,生成可执行文件
3.启动新生成的被测程序,启动测试。
由于VSS提供命令行操作接口(调用ss.exe),从版本机获取最新代码的操作可以定义到批处理文件中,另外,支持自动测试的VC工程,应该用宏开关控制被测程序是否一经启动就自动实施测试,请部分内容请参考《VcTester共享版使用手册》中“配置VcTester代理”一节,要将ctAddSearchDir与ctSetRootTestCase两项配置设正确。
比如我们编写这样的批处理文件是DailyTest.bat,内容如下:
rem First step: check
out source code
...
rem Second step: rebuild project
call "C:\Program Files\Microsoft Visual Studio\VC98\Bin\vcvasr32.bat"
msdev c:\VcTester21\sample\demo\demo.dsp /MAKE "demo
- Win32 Debug" /REBUILD
rem Third step: Start program and log print message
c:\VcTester21\sample\demo\debug\demo.exe
这个例子中我们还没给出从VSS取源码的命令,完整过程请大家参考《使用VcTester构造持续集成及每日构建平台》一文。
定义这个批处理文件后,按如下命令启动,即开始“每日构建”测试,相应的打印信息被定向到一个log文件:
call DailyTest.bat
> log.txt
把这个命令添加到Windows平台的“任务计划”,可指定在每个工作日的固定时间(比如晚上10点)自动启动测试。