Testing 如何验证由msbuild创建的部署包?(最好使用mstest或nunit)

Testing 如何验证由msbuild创建的部署包?(最好使用mstest或nunit),testing,continuous-integration,build-automation,automated-tests,Testing,Continuous Integration,Build Automation,Automated Tests,我们的msbuild过程为部署创建了各种zip包(主要是网站,但也有其他东西)。我们经常会遇到各种各样的问题,这些问题会不断地出现——包括不应该出现的文件、丢失的资源。这迫切需要自动化验证。测试的标准很简单 foosite包的验证: 资源文件已存在 没有测试结果文件、obj文件或其他构建工件 等等 理想情况下,我可以使用nunit或mstest,这是大家都熟悉的。Msbuild知道包在哪里。我们有很多包,可能在不同的分支上并发构建。因此,包的位置和包的名称是不确定的,所以测试不知道包在哪里

我们的msbuild过程为部署创建了各种zip包(主要是网站,但也有其他东西)。我们经常会遇到各种各样的问题,这些问题会不断地出现——包括不应该出现的文件、丢失的资源。这迫切需要自动化验证。测试的标准很简单

foosite包的验证:

  • 资源文件已存在
  • 没有测试结果文件、obj文件或其他构建工件
  • 等等
理想情况下,我可以使用nunit或mstest,这是大家都熟悉的。Msbuild知道包在哪里。我们有很多包,可能在不同的分支上并发构建。因此,包的位置和包的名称是不确定的,所以测试不知道包在哪里

向mstest或nunit提供msbuild信息的最简单方法是什么?答案可能是一个答案,但是,这个问题得到的是架构建议而不是答案。我知道这不是一个单元测试,但是测试框架很方便。我可以创建一个exe来验证构建-但是为什么要在项目中添加几个小时呢


或者,对于自动验证构建包,您有更好的建议吗?(MSI、ZIP,无论什么)?

我最终做的是拥有一堆自定义的MS构建任务,这些任务在虚拟服务器上启动虚拟机,将MSI复制到机器上,以静默方式部署它,然后根据它进行验证。我曾经启动MSI。然后,它可以使用MSTest来运行您的测试位


这对您来说可能有些过头了,但是使用VM可以让您从头开始,并且不受dev box上任何以前安装的影响。

如果您想要快速失败,比如单元测试,那么我建议您针对您的包创建单元测试。这样的测试将解压.ZIP包,并对内容运行一些断言

您甚至可以对包使用一些TDD技术。例如,如果由于某个特定文件丢失而导致部署失败,则编写一个因该文件丢失而失败的单元测试;更改生成以使文件存在;然后确保单元测试成功

但总的来说,部署问题要比这更广泛,我也赞同他们的建议。部署到一个或多个虚拟机中,然后在部署的环境中运行自动化测试。这些测试不仅测试简单的事情,比如安装过程中是否返回了错误;他们还会检查IIS虚拟目录是否设置正确、属性和内容是否正确,以及网站是否基本运行

我将使用几个不同的虚拟机来测试不同的部署场景:一个用于干净的部署;一个用于从版本-1升级,等等。可能对每个环境运行相同或类似的IVT测试


即使您不能一次完成这一切,本练习中涉及的思考过程也会导致对部署环境的更正式定义。当您有机会在实际测试中体现这一正式定义时,这将非常有用。

好主意,我们也会这样做。然而,我正在寻找软件包坏的早期警告:我希望构建快速失败。我们部署了每个构建,但目前是人工QA发现它出错了。在我们的例子中,您所描述的将由我们的构建验证测试完成(需要添加的优秀案例)。需要部署复杂环境的BVT速度很慢-它们每天运行构建,需要手持。主构建需要快速可靠(构建、包、单元和其他快速测试)