在关于单元测试的博文中介绍了UnitTest,实际开发过程中我们会写很多的UnitTest,当我们对我们的代码进行了重构或者fix了Bug之后,我们需要知道我的UnitTest还能否通过,这时候如果我们手动一个一个运行UnitTest,效率会比较低,有的同学会说,我可以选择运行全部的UnitTest,纵然这样做没错,但一般来说,UnitTest运行起来就效率不高,而且最重要的是如果一个人的UnitTest还好,如果希望运行多个Server上的UnitTest并且收集结果就不是那么方便了。
还好在实际过程中,我们的UnitTest是由开发人员编写,开发人员自己会去Run UnitTest,对于自动化测试来说,我们会使用QTP的类库去调ALM来Run case,这时候使用PowerShell来Run case的优势就立马显现出来了,一个稍微复杂的功能,一个TestSet run 下来基本一个小时,而且需要手动查看结果。这样的过程显然不是我们想要的,对于自动化来说,就是点击开始按钮,等结果就行了。
还有一点的是,在Rolling Upgrade过程中,我们需要跑多遍SmokeTest 及一些环境设置,我们要在部署之前Check 环境是否可用,一旦不可用我们需要停止Rolling或者采取相应措施,一个Rolling Upgrade的时间基本是超过100分钟,这个过程依靠手动来做是费时费力而且容易出错的。
无论是直接Run UnitTest 还是通过TestCase来连接ALM Run Case,都是通过MSTest来做的。MSTest是VS自带的组件,使用前需要设置环境变量。
SetEnvironmentVariables.ps1
$MsTestPath = "C:\Program Files (x86)\Microsoft Visual Studio 12.0\Common7\IDE"
[environment]::SetEnvironmentvariable("Path",$MsTestPath,"User")
这样就可以使用MSTest了。
此处运行的是上章节讲UnitTest的时候写的单元测试,这个dll是测试工程编译的dll,当然,工程引用的Moq等dll需要一并拷贝到运行目录下。
我们可以看到测试工程中的5个测试方法均通过了UnitTest,这里我们得到了一个测试结果的trx文件,这个文件是一个xml文件,保存着测试的相关信息。
通过这个文件我们可以看到执行了多少个测试,PASS了多少个,fail了多少个等等信息。
上述MSTest用法只是最基本的用法,通常我们会指定运行哪个Test和测试结果的输出路径。示例如下:
我们只运行了其中一个测试方法,并且保存结果到指定的目录。