Powershell 在哪里放置Pester变量?

Powershell 在哪里放置Pester变量?,powershell,testing,bdd,pester,Powershell,Testing,Bdd,Pester,我最近开始使用Pester在PowerShell中编写测试,我在运行基本测试方面没有问题,但是我正在寻找一些更复杂的测试,我正在努力解决如何处理测试所需的变量 我正在编写测试来验证一些云基础设施,所以在我们运行部署之后,它会进行测试,并验证它是否已正确部署,以及所有内容是否正确。因此,我们需要验证大量变量,如VM名称、网络名称、子网配置等 在正常的PowerShell脚本中,这些变量将存储在脚本外部并作为参数输入,但这似乎不适合Pester或BDD的设计,我应该在测试中硬编码这些变量吗?这似乎不

我最近开始使用Pester在PowerShell中编写测试,我在运行基本测试方面没有问题,但是我正在寻找一些更复杂的测试,我正在努力解决如何处理测试所需的变量

我正在编写测试来验证一些云基础设施,所以在我们运行部署之后,它会进行测试,并验证它是否已正确部署,以及所有内容是否正确。因此,我们需要验证大量变量,如VM名称、网络名称、子网配置等


在正常的PowerShell脚本中,这些变量将存储在脚本外部并作为参数输入,但这似乎不适合Pester或BDD的设计,我应该在测试中硬编码这些变量吗?这似乎不是很直观,特别是如果我想在其他环境中重复使用这些测试。我曾尝试将它们存储在一个外部JSON文件中,并将其读入测试,但即使如此,我仍需要在脚本中硬编码JSON文件的路径。还是我做得都不对,还有更好的方法?

我不知道我是否可以就这类事情向最佳实践提出建议,但归根结底,Pester脚本只是一个Powershell脚本,所以在测试中或测试周围的任何地方使用Powershell都没有坏处(尽管要注意,有些构造有自己的作用域)

根据以下建议,我可能会在脚本顶部使用一个param块,并通过invoke pester的-script参数传入变量:

归根结底,pester测试(特别是基础架构验证)的“最佳实践”定义非常松散/根本不存在

例如,我在Active Directory测试脚本中使用了一个param块,该块(部分)针对存储的配置文件进行测试,正如您所描述的:


谢谢,这个例子非常有用。我至少没有完全走错方向,我同意。我只想指出,尽管没有最佳实践,但最好保持简单。在OVF世界中,逻辑和测试常常是混合的。我建议构建一组函数,允许您执行动态操作(比如加载config.json),并使用严格的测试实践来测试这些函数。然后,您可以使用这些函数并从中构建一个>验证<套件。该套件仍将使用Pester作为其运行程序,但不会是测试。测试测试您的代码,您的代码组成验证套件。套件验证多个环境。@SamCogan仅供参考,我在twitter上向pester团队发送了这个问题,上面的回答是他们的。@nohwnd好的,谢谢,所以我的验证套件仍然使用pester语法等等,测试验证没有什么特别之处,除了我没有测试代码这一事实,对吗?是的,验证没有什么特别之处,只是它们没有遵循测试中通常遵循的规则。您还可以借此机会编写一组比通用Pester语言更适合您的任务的函数。(您需要保留描述上下文,但您可以拥有自己的断言,这些断言使用特定于您的任务的语言:Assert ServiceRunning abc vs.Get Service abc | select-expand status |应为“running”等)。或者它在nano服务器{…测试nano服务器}上在FullWindows{…测试windows…}上“验证某些内容”。等等