问题描述
在本地部署的 Azure DevOps Server 构建系统中,我有一个构建流水线(Build Pipeline),其中包含一个 Visual Studio 测试步骤。该步骤被配置为在一个 DLL 中发现和运行 XUnit 单元测试。
以下是步骤的属性:
版本:2.*
选择测试:使用测试程序集
测试文件: **\*test*.dll
!**\*TestAdapter.dll
!**\obj\**
搜索文件夹:$(System.DefaultWorkingDirectory)
选择测试平台:使用版本
测试平台版本:最新
该步骤运行并且成功通过,发现了 18 个测试。然而,它花费了不合理的时间:约 51 秒。运行日志显示,在启动 vstest.console.exe
之前,它在大约 40 秒的时间里似乎什么都没做。请参见完整日志中的以下行:
2019-09-23T07:11:35.7961563Z ========================================================
我的问题 – 为什么 Visual Studio 测试步骤花费如此多时间处于空闲状态?有什么方法可以减少它的闲置时间?
解决方案
为了解决 Visual Studio 测试步骤耗时的问题,你可以尝试以下几种方法。
请注意以下操作可能因版本差异或配置差异而有所不同,请在操作前进行备份。
1. 缩小搜索范围
问题的根本原因是 Visual Studio 步骤扫描用于测试的文件过多,位于 Search folder
下。为了解决这个问题,你可以将搜索文件夹指向一个更具体的 bin 文件夹,从而减少被扫描的文件数量,从而显著缩短步骤的运行时间。
2. 使用并行运行
在测试步骤的属性中,你可以尝试将 Run in parallel
设置为 true
,这将允许测试在并行模式下运行,从而减少总体运行时间。但是请注意,这可能需要适当的硬件资源支持。
3. 优化测试用例
在测试代码中,你可以考虑优化测试用例,以减少每个测试用例的执行时间。可以通过避免冗余的资源加载、使用适当的并行化策略等方法来实现。
4. 使用缓存
如果你的测试数据是固定的,并且测试用例不会频繁变化,你可以考虑使用缓存来存储已执行的测试结果。这将避免重复运行相同的测试用例,从而减少总体执行时间。
5. 升级硬件资源
如果你的硬件资源有限,并且测试用例较多,考虑升级你的硬件资源,如 CPU、内存等,以支持更快的测试执行。
6. 调整测试策略
根据你的具体情况,可能需要调整测试策略。有时,将测试分成不同的组,或者只运行关键的测试用例,可以减少总体执行时间。
综上所述,通过缩小搜索范围、使用并行运行、优化测试用例、使用缓存、升级硬件资源或调整测试策略,你可以减少 Azure DevOps Server 中 Visual Studio 测试步骤的运行时间,提高构建流水线的效率。
请在执行任何操作之前,确保在适当的环境中进行测试,以避免不必要的问题。
希望这些解决方案对你有所帮助!如有进一步的问题,请随时询问。