我最近开始使用Pester在PowerShell中编写测试,并且在运行基本测试时没有问题,但是我正在寻求构建一些更复杂的测试,并且我在努力处理所需的变量。测试。
我正在编写测试以验证某些云基础架构,因此在运行部署之后,它会通过并验证其是否已正确部署以及一切都在应有的位置。因此,我们需要验证大量变量,VM名称,网络名称,子网配置等。
在正常的PowerShell脚本中,这些变量将存储在脚本外部并作为参数输入,但这似乎与Pester或BDD的设计不符,我应该在测试中对这些变量进行硬编码吗?这似乎不是很直观,特别是如果我可能想在其他环境中重复使用这些测试时。我确实尝试过将它们存储在外部JSON文件中,并将其读入测试中,但是即使如此,我仍然需要在脚本中对JSON文件的路径进行硬编码。还是我做错了什么,有更好的方法?
最佳答案
我不知道我是否可以针对此类事情与最佳实践进行交流,但归根结底,Pester脚本只是Powershell脚本,因此在测试中和测试的任何地方进行Powershell都无害(尽管请注意,构造有自己的范围)。
我可能会在脚本顶部使用一个param块,并按照以下建议通过invoke-pester的-script参数传递变量:http://wahlnetwork.com/2016/07/28/using-the-script-param-to-pass-parameters-into-pester-tests/
最终,对虫害测试(尤其是对基础架构验证)的“最佳实践”定义得很松散/根本不存在。
举例来说,我在Active Directory测试脚本中使用了一个param块(部分)针对存储的配置文件进行了测试,就像您描述的那样:
https://github.com/markwragg/Test-ActiveDirectory/blob/master/ActiveDirectory.tests.ps1