先理解几个概念
在《使用VcTester实施持续集成的组织管理模式》一文中,我们讲述了VcTester平台下的持续集成操作包括调试方式与发布方式两种工作形态。调试方式是指日常代码与脚本的编写与调测,这部分是开发的主体,发布方式则是正式的、阶段性的工作。如下图:
项目组或产品组成员围绕着版本服务器展开工作,服务器既承担日常版本管理,如开发过程中源文件Check in、Check out等,也承担阶段性的版本基线化管理、自动构建形成版本等,研发人员围绕版本服务器也开展日常编码与调试,及阶段性的回归测试等工作。我们区分日常工作与阶段性工作,是因为两者的组织形式有很大差异,如下图,
从图中可以看出日常调测、冒烟测试、回归测试之间的差别,他们都针对产品源码与测试脚本展开工作,日常调测的过程较为随意,通过手工编译来构建版本,也通常面对随意的、尚在变化中的测试脚本。日常调测形成的脚本经过整理,最后成为规范的测试集,这个测试集直接用于回归测试,回归测试是阶段性开展的工作,它选用的版本应由构建服务器自动生成(从版本机自动取最新源码并自动构建)。冒烟测试介于日常调测与回归测试之间,通常冒烟测试与每日构建配合应用,以每天为单位开展自动测试,冒烟测试是一种初验性质的测试,运行一些基础用例就够了,多数情况下,冒烟测试的用例是回归测试所用用例的一个子集。
版本树组织
持续集成针对编码与白盒测试,其版本目录树组织与编码、调测行为相关,一般而言,持续集成的每次功能迭代,应有如下三项输出:产品源码、回归测试脚本(简称回归脚本)、冒烟测试脚本(简称冒烟脚本),其中冒烟脚本应该是回归脚本的子集,但并不强制一定这样。
相应的,我们的版本目录树的根部应有3个分支,比如:source、SmokeTest、testcase,分别为产品源码、冒烟测试集、回归测试集。其中回归测试集既是日常调测的工作对象,也是回归测试的工作对象,日常调测中不停的修改测试脚本,当阶段工作结束,这些脚本都整理成正式的、完整的测试集,运行该测试集就是回归测试,所以回归测试集是与日常调测的脚本是一个东西,我们之所以称回归测试集是为了区分冒烟测试集。
回归测试与冒烟测试在组织形式上有很大差别,前者是私有的,每位开发人员都拥有自己的一份回归测试工程,而后者是全局共享的,一个产品(或一个项目组)仅维护一份冒烟测试集。所以版本树的SmokeTest目录下,直接存放冒烟测试用例,而testcase目录下应再建子目录,根据测试者身份不同设置不同子目录,这些子目录下再存放各种用例文件,一般情况下,一个开发人员建一个子目录,专职的测试人员也应建立子目录,视用例维护主体不同考虑由多个测试人员共享一个子目录,或独占一个子目录。总之,版本树的回归测试分支是按用例的维护责任划分子目录,同一维护主体在VcTester下意味着同一个测试工程。
我们建立的版本目录是全局的,版本服务器保存目录树应与个人工作电脑维持一致,保证目录结构一致有助于版本维护, VcTester对这种一致性也有要求,下文还有叙述。
由于冒烟测试集与回归测试集有重用关系,SmokeTest目录下的脚本文件通常要从各个测试者自行维护的测试集中共享过来。为清晰起见我们举个例子,假如一个产品有3个人做测试,分别为wayne、george、peter,应在testcase目录下建立以3个子目录(人名用作目录名),然后每人都建立归自己维护的冒烟测试用例文件,比如wayne在自己的用例目录下把冒烟测试用例都保存到smoke_wayne.cse文件,之后在版本机上,将smoke_wayne.cse文件share到SomkeTest目录,由于Visual SourceSafe(VSS)支持文件share操作,被share的文件只是维持一种映射关系,同一文件多处share后,针对该文件本体或映射体的Check in或Check out都针对版本机上同一个文件进行操作。把各个测试者的冒烟测试文件都share到SmokeTest目录后,我们再编写一个启动冒烟测试的入口脚本文件,每次实施冒烟测试时,都从版本机SmokeTest目录先获取最新的用例文件,然后启动测试即可。
冒烟测试与每日构建配合使用,编写一个批处理文件实现被测工程的自动build,参见《如何在VcTester集成自动构建功能》,启动冒烟测试也应编写批处理文件自动完成,接下来我们讲述这个批处理文件怎么编写。
编写冒烟测试批处理文件
冒烟测试与每日构建应在同一个服务器自动完成,既可以与版本机共用一个服务器,也可以独立使用一个服务器。服务于自动构建与冒烟测试的批处理命令通常在一个BAT文件中编写,主要命令包括:从版本机获取被测源码、自动构建版本、从版本机获取测试脚本、启动冒烟测试,下面我们分别介绍这几个命令如何编写。
VSS提供命令行操作接口,通过不同参数指示运行ss.exe可实现版本check in、check out,及取最新版本等功能。比如取最新版本的批处理命令如下:
PATH=%PATH%;D:\Program Files\Microsoft
Visual Studio\Common\VSS\win32
set ssdir=D:\Program Files\Microsoft Visual Studio\Common\VSS
set ssuser=george
set sspwd=GeorgePassword
ss get $/demo -I-Y -R –GLC:/VcTester21/sample/demo
前两个命令用来指示本机VSS安装路径,接下来2个命令用来设定登陆VSS版本库的用户名与口令,最后一个命令用来获取新最版本,将版本机“$/demo”目录下所有文件更新到本机的“C:/VcTester21/sample/demo”目录。参数-I-Y指示遇Yes或No对话提示时选择Yes,参数-R指示递归提取各级子目录,参数-GL用来指示本地的目标路径。上述批处理命令既可以用来获取最新产品源码,也可以获取冒烟测试集。
获取版本后自动构建可调用msdev命令行工具,详情请参考《如何在VcTester集成自动构建功能》。需要注意的是,每日构建的版本应采用rebuild方式,而不是增量式build,因为rebuild保证中间文件(OBJ等文件)在本次编译中重新生成的,可避免版本不一致情况出现。
当最新被测程序生成,而且冒烟测试集也从版本机取得后,运行被测程序就启动自动测试了,采用VcTester提供的测试框架,在SampleMain.c文件中指定测试的入口脚本文件,即启用本端自执行的运行模式,测试用例自动被运行。
日常调测中的持续集成操作
前面讲述冒烟测试中工程构建及版本机操作的相关命令,以批处理方式执行这些命令,但如果在日常调测中,这些命令应集成到VcTester来,以手工方式去执行,至于如何集成我们类推即可。
如何将版本构建集成到VcTester中已在《如何在VcTester集成自动构建功能》一文叙述,向版本机Check in 一个文件运行如下命令:
ss checkin $/demo/DoTest.c –GLC:/VcTester21/sample/demo
本例将“C:/VcTester21/sample/demo/DoTest.c”文件Check
in到版本机“$/demo”目录。如果是check
out,命令相应修改如下:
ss checkout $/demo/DoTest.c –GLC:/VcTester21/sample/demo
VcTester提供如下环境变量辅助外部工具集成:
环境变量 |
含义 |
%CseCurrRevDir% |
IDE界面下当前文件相对于当前工程(*.cseprj)的相对路径名 |
%CseCurrFile% |
IDE界面下当前文件的全路径文件名 |
%CseCurrFileDir% |
IDE界面下当前文件的路径名 |
%CseCurrFileName% |
IDE界面下当前文件的文件名(不含路径) |
参考文献:
1. ezTester(China),Wayne Chan,《第4代白盒测试方法介绍(理论篇)》
2. ezTester(China),Wayne Chan,《第4代白盒测试方法介绍(VcTester实践篇)》
3. ezTester(China),《VcTester用户手册》
4. ezTester(China),《VcTester持续集成框架的应用价值》
5. ezTester(China),《使用VcTester实施持续集成的组织管理模式》
6. ezTester(China),《如何在VcTester集成自动构建功能》