这篇是有关于PowerShell测试框架相关文章,由于测试也是一个不小的话题,从基础的概念了解到测试用例的编写以及框架的使用。所以,我会以一个系列集的方式来谈谈关于PowerShell的脚本测试。
谈到测试这个概念时,不少人都会趋之若鹜,其实在现实项目开发中测试是极为有用的。可以试想下,在项目开发中,程序员日夜赶工写好了一期项目代码,结果到项目要上线前与产品经理沟通后才发现并不满足一些业务的需求又或者发现了很多BUG,可是在开发时业务人员觉得自己已经把需求写的很清晰了都和程序员进行沟通了,可是开发好后功能和期望的还是有不小差距。而在程序员们看来,自己幸幸苦苦完成了开发功能满怀信心去给业务人员和老板展示的时候得到的不是满意结果。为什么会是这样呢?大致原因不外乎其中有一点是因为大家对各自领域的需求和执行方式不一致。测试的出现尤其基于BDD模式的测试就是为了解决这个问题。这里就不具体展开与讨论了(有兴趣可以去扩展阅读了解下有关于BDD的由来和在项目开发中的意义)因为,这不是本文的重点。还有现在很火的DevOps(开发运维一体化)流程里构建持续交付与持续集成环节时必不可少的自动化测试流程更是非常重要。
很多程序语言都自己的测试框架,甚至不止一种。当然PowerShell也不例外,它即便作为脚本语言也有自己的测试框架。Pester是一个基于BDD方式的(Behavior Driven Development,行为驱动开发是一种敏捷软件开发的技术)PowerShell的单元测试框架。它的作者是Scott Muc,它作为一个PowerShell模块包由技术社区的负责维护。使用Pester框架你可以用原生的PowerShell语言来编写相关的测试用例,然后使用Pester框架里的PowerShell命令执行相关测试用例和获得测试用例的信息。Pester可以执行Pester测试文件中的任何命令和脚本,这其中包含了函数,命令,组件和脚本。它和其他很多流行框架一样支持Mock函数和允许Mock测试。
我上面说过Pester以一个模块包的形式由技术社区在维护,那么为了演示如何使用Pester我先要安装Pester测试框架的模块包。在过去安装Pester的方法就是去GitHub上手动下载Pester包然后放到指定的路径下。但如果你有看过我之前所写的PowerShellGet系列文章的话,现在就应该学以致用了,用PowerShellGet内置的cmdlet来搜索安装我们需要的模块包。
先输入Find-Module -Name Pester
查看下是否有想要的包。不用多想,答案是必然肯定的,确认在线资源库里确实存在Pester包后,我这里输入Install-Module -Name Pester -RequiredVersion 4.0.3
指定好对应的版本号开始安装。
必要的东西已经安装好了,现在来正式看一下如何使用Pester,我来举一个最简单例子,你只要观察Pester是如何运行测试用例就行,不必深挖如何编写这个测试用例,以后我会深入去介绍如何编写。
在我的电脑环境里,我创建了一个目录结构.\MySample\GetMyStr,而在GetMyStr文件夹下我有两个文件,分别为Get-MyStr.ps1与Get-MyStr.Tests.ps1
Get-MyStr.ps1文件代码如下
function Get-MyStr
{
Param
(
[String]$name
)
if ($name -in "Anders", "Tom")
{
return "Welcome"
}
}
Get-MyStr.Tests.ps1文件代码如下:
$CurrentLocation = Split-Path -Parent $MyInvocation.MyCommand.Path
. "$CurrentLocation\Get-MyStr.ps1"
Describe "Get-MyStr" {
It "Input the personal name 'Anders'" {
Get-MyStr -name "Anders" | Should BeExactly "Welcome"
}
It "Input the personal name 'Tom'" {
Get-MyStr -name "Tom" | Should BeExactly "Welcome"
}
It "Input the worng personal names" {
Get-MyStr -name "Mary" | Should Not Be "Welcome"
}
}
Get-MyStr.ps1脚本的代码非常简单,我定义了一个My-MyStr函数,该函数只有在用户指定参数值为Anders和Tom的时候会返回Welcome字符信息。而我们的测试用例脚本文件则是同名为Get-MyStr.Tests.ps1(测试用例脚本你可以很快的看一遍,先不用深究如何编写),你一定发现扩展名多了Tests的测试文件,因为只有标明了Tests,Pester会自动识别为测试脚本文件。
那么如何运行测试用例呢?这里就要用到命令Invoke-Pester 附带指定的测试脚本文件路径就可以了,在这里我运行Invoke-Pester "C:\MySample\GetMyStr\Get-MyStr.Tests.ps1"
可以看到,我设置的三个测试条件都通过了,失败为0,输出的信息里还包含了一些运行用例的信息和运行时间等。如果不满足于我们编写的测试条件用例的话,那么输出就会报错,直到我们的程序员去修复这个脚本测试才能顺利通过。
现在你已经对Pester是什么,用来做什么有了一定的了解。或许,对于测试用例的编写和一些关键字使用还比较茫然。没关系,那也是正常的。因为在后面的系列,我才会来深入介绍这其中的关键字和框架的具体使用。