我最终在C#中构建了一个xUnit控制台测试运行器,以循环遍历并运行给定文件夹中的所有xUnit测试程序集。
我最终得到的结构是xUnit测试运行器,命名为RunXUnitTests,在测试程序集的上一级文件夹中,包括可执行文件和所需的各种支持dll。例如,NLog日志记录支持和用于发送结果电子邮件的一些电子邮件支持dll位于此RunXUnitTests文件夹中。
在RunXUnitTests测试运行器文件夹的下方,有一个“TestAssemblies”文件夹,所有的xUnit测试程序集dll都放在该文件夹中,以及测试本身所需的任何支持dll。此外,所有的xunit.console.exe运行时文件都在TestAssemblies文件夹中。将所有测试及其依赖项放在同一TestAssemblies文件夹中,与测试运行器分开,这样最不容易混淆。
要运行测试,从控制台,C#测试运行器应用程序将向System.Diagnostics进程执行API提交命令行,其中xunit.console.exe命令作为要运行的进程,而测试程序集和(xml)结果文件则作为命令行参数。
一个典型的命令行,用于操作准备测试(ORT),由测试运行器格式化,并提交给 process.Start() 方法调用(其中进程对象类型为 System.Diagnostics.Process),如下所示:
"C:\RunXUnitTests\TestAssemblies\xunit.console.exe" "C:\RunXUnitTests\TestAssemblies\SharePointBasicFeaturesORT.dll" -xml "C:\Users\Public\Documents\TestResults\SharePointBasicFeaturesORT.xml"
测试运行后,测试运行程序有一些例程来遍历XML结果文件,提取结果,格式化结果摘要电子邮件(以HTML格式),并将电子邮件发送到分发列表。
我应该提到,所有这些都打包成可安装的MSI文件,可以部署到Windows 7/10个人电脑或虚拟机上进行测试运行。我们正在使用它来在预定的每日基础上运行SpecFlow+xUnit“运营准备测试”以测试我们的Web应用程序。我们使用Wix#(“WixSharp”)安装程序在C#中构建我们的安装程序,然后使用Wix安装工具集构建标准的MSI安装程序文件。有关更多信息、源代码和二进制文件,请参见https://github.com/oleg-shilo/wixsharp。一旦你掌握了它,它就非常好用。
是的,这种方法需要做很多工作。如果你的组织已经有其他可以完成这项工作的DevOps类型工具,比如Jenkins、TeamCity、Bamboo、Azure for DevOps等,我不建议使用这种方法。我的组织仍在“进行中”引入这些工具,而在短期内改进测试运行器比获得组织决策、财务承诺和安装配置支持DevOps/CI工具更可行。
如果你没有准备好使用DevOps/CI工具,这种方法使用免费的开源工具(除了MS Visual Studio的付费版本;我不知道社区版是否适用)并且可以作为通向更复杂环境的桥梁。