天天看点

网站测试自动化系统—收集测试结果

一般来说,测试报告需要包含以下几个信息:

Vsinstr.exe –coverage image.dll

如果要给网站 bin文件夹里面所有的程序执行代码注入操作的话,可以使用下面这个简单的命令来完成:

for %f in (*.dll) do vsinstr.exe –nowarn –coverage “%f”

for命令的用法,请查看Windows帮助文件里面的批处理一章;%f使用引号括起来是避免%f代码的文件路径包含空格的情况;-nowarn这个参数告诉vsinstr不要输出警告信息了,因为懒得看, :)

2.         代码注入完成以后,启动vsperfmon.exe。在整个执行测试用例的过程中,vsperfmon.exe会在后台持续运行,收集代码覆盖率信息。你可能会奇怪,这个程序的名字怎么叫做perfmon?而不是使用什么covermon之类的名字,这是因为vsperfmon.exe本来就是用来做性能测试的,只不过是兼职收集代码覆盖率罢了。

启动vsperfmon.exe的命令很简单:

vsperfmon.exe /START:COVERAGE /OUTPUT:result.coverage /CS

上面的参数解释一下:

参数

说明

/START:COVERAGE

告诉vsperfmon进行代码覆盖率的收集。

/OUTPUT

保存结果的文件路径,可以是绝对路径或者相对路径,最好将后缀名设置为.coverage,这样你可以直接通过资源管理器里面双击在Visual studio中打开这个文件。

/CS

CS是CrossSession的简写。

Session的意思有必要解释一下,Windows 从Windows 2000以后是一个多用户,多任务的操作系统(不知道NT是不是)。而Windows 95/98/Me不是多用户多任务操作系统,它们只是单用户多任务操作系统。多用户的意思是多个用户可以同时登录同一台主机(通过远程登录系统,mstsc.exe),操作系统会在这多个同时进行独立操作的用户当中执行有效的进程分离。虽然你可以在Windows 95/98/Me设置多个用户,但是这多个用户不能同时登录同一台机器,必须要等另外一个用户注销(LogOff)才能登录这台机器。

每个用户登录到Windows操作系统时,Windows以Session(会话)的概念来描述它,一个用户可以有多个Session,例如这个用户可以从物理上直接登录主机,这个Session叫做Console Session;这个用户同时也可以通过远程登录来操作这台主机,这又是另外一个Session。

之所以要在这里花很大的篇幅去描述Session,是因为如果我们在IIS里面启动网站时,IIS的应用程序池(Application Pool)需要你指定一个用户用于访问数据库、文件系统等资源,这个会话(Session)不会使用控制台会话(Console Session),因此一般来说,即使IIS的应用程序池使用的用户与当前执行测试用例的用户是同一个用户,也是在使用不同的会话。

在Windows Vista和Windows Server 2008以后,大部分Windows服务(当然也包括IIS提供的W3C服务)都是在第0会话(Session 0)当中运行,目的是为了更好地将Windows服务与其他进程分隔开来。而第一个登录Windows Vista或Windows Server 2008的用户的会话标识号是1,而不象以前那样是0了。如下图所示:

在Vista之前,Windows服务(比如运行Asp.Net网站的IIS的W3C服务)和普通用户的进程(比如vsperfmon.exe)是运行在同一个会话里,两个进程之间交流消息只要用SendMessage或者PostMessage这个API就可以了。

但是在Vista之后,由于服务进程和普通用户进程不是在同一个会话里,所以就需要用命名管道(Named Pipeline)等IPC机制来执行交互了。/CS选项就是告诉vsperfmon.exe关注在其他会话里执行的进程的代码覆盖率信息。

3.         当所有的测试用例都执行完毕以后,VSTT关闭被测试的进程。因为在收集代码覆盖率信息时,vsperfmon是和被统计的进程直接进行交互的;在保存覆盖率信息时,它需要等被收集的进程关闭以后,才能执行保存操作。如果测试时,你的网站是运行在IIS里的,你需要使用下面的命令关闭IIS:

iisreset /stop

(启动iis的命令时iisreset /start)

如果你没有安装IIS,但是你会发现在VSTS直接按下F5运行网站时,网站照样能运行,那是因为VSTS自带了一个支持Asp.Net的Web服务器WebDev.WebServer.EXE。这个程序保存在文件夹C:\Program Files\Common Files\microsoft shared\DevServer\9.0(假设你的系统盘是C,并且安装的是VSTS 2008版本)里面。

当你在VSTS里面运行网站的时候,Visual Studio采用下面的命令启动网站:

Webdev.webserver /path:<网站的物理路径> /port:<网站的端口> /vpath:/

如果是使用webdev.webserver运行网站的话,在命令行关闭这个程序的命令是(实际上是干掉这个程序):

taskkill /im WebDev.WebServer.EXE

4.          VSTT执行下面的命令关闭vsperfmon.exe,vsperfmon.exe将搜集到的代码覆盖率保存到指定的文件当中。

vsperfmon.exe /shutdown

备注:vsperfmon.exe默认情况下只能收集同一个用户运行的进程的代码覆盖率信息,如果你是将asp.net网站放在iis里面进行测试,默认情况下,运行这个网站的应用程序池(application pool)的用户是NetworkService,这种情况下,要么用vsperfmon.exe的/USER选项指定NetworkService这个用户。要么将应用程序池的用户改成执行vsperfmon.exe的那个用户。

基本上一个测试自动化系统讲的差不多了,下一篇讲如何复用现有的自动化测试代码自动生成测试用例。

未完待续……

本文转自 donjuan 博客园博客,原文链接: http://www.cnblogs.com/killmyday/archive/2010/04/06/1705494.html  ,如需转载请自行联系原作者

继续阅读