快捷搜索:

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

在前面的文章履行测试用例里,已经说清楚明了若何经由过程敕令行来编译和履行测试用例,这样我们才有时机经由过程批处置惩罚的要领来将履行测试用例自动化。而我在文章系统应该有的功能里,也讲到了一个完备的自动化系统应该是能够自动网络测试结果的—终究我们的远景是,测试职员在晚上放工前将用例履行起来,然后在第二天上午就可以直接看测试申报了。

一样平常来说,测试申报必要包孕以下几个信息:

1.测试用例的经由过程率,经由过程率代表产品的稳定程度,当然这是在扫除了测试用例本身的问题引起的测试掉败(Test Failure)获得的经由过程率。前面履行测试用例里提到到的MsTest.exe天生的结果文件.trx文件就已经保存了这个信息,在资本治理器里面双击这个文件,就能看到类似下图的结果:

在上图里面,可能会有细心的读者发明里面只有3个用例,然则红圈里面标出的翰墨却说:“6/6 passed”,这是由于这3个用例傍边稀有据驱动的用例,VSTT把每一行数据都算作一个自力的测试用例。关于数据驱动测试,可以参看我的这篇文章:网站自动化测试系统—数据驱动测试。

2.代码覆盖率信息,代码覆盖率奉告测试团队有哪些产品代码没有被覆盖到,没有覆盖到的产品代码意味着有一些用户场景我们没有斟酌到,或者说测试覆盖面上有一些破绽(Testing Hole)。假如是从VSTT用户界面上履行测试用例的话,VSTT已经自动集成了网络代码覆盖率的功能,做法请参看我的文章软件自动化测试—代码覆盖率。在这篇文章里,我将奉告你若何应用敕令行做到网络代码覆盖率。

至少有两种措施将网络代码覆盖率的功能整合到自动化测试系统傍边,一种是经由过程直接编辑.testrunconfig文件,这也是我们在VSTT用户界面操作时,VSTT 背地里帮我们做的工作,应用.testrunconfig文件的措施请参考文章履行测试用例。

别的一种措施,是更深入的分化,实际上Visual Studio网络代码覆盖率是经由过程一个叫做VsPerfMon.exe的法度榜样来网络的,这个法度榜样位于C:\Program Files\Microsoft Visual Studio 9.0\Team Tools\Performance Tools(假设VSTT安装在C盘)。当你按照软件自动化测试—代码覆盖率里先容的步骤履行自动化测试的时刻,VSTT背地里做了下面几件工作:

1.注入用于统计代码覆盖率的代码(instrument),注入的代码在文章软件自动化测试—代码覆盖率里已经有过解说,这里不再说了。代码注入是经由过程vsinstr.exe来实现的,下面是应用它进行代码注入最简化的敕令(吸收任何.Net法度榜样—即.dll和.exe文件,是否支持原生C++法度榜样我还没有考试测验过):

Vsinstr.exe –coverage image.dll

Vsinstr.exe除了在法度榜样里面注入代码以外,还要改动法度榜样的符号文件(.pdb文件),之以是这样做,是由于法度榜样被注入代码今后,就反面注入前的符号文件匹配了。应用不匹配的符号文件,将会导致后面浏览代码覆盖率结果时,我们没有法子查看具体的代码覆盖信息—即哪些行的代码被覆盖了,哪些代码没有覆盖。符号文件的感化请参考文章Visual Studio调试之符号文件。

假如要给网站 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的那个用户。

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

您可能还会对下面的文章感兴趣: