Azure DevOps Server:为什么 Visual Studio 测试步骤运行单元测试如此耗时?

78次阅读
没有评论

问题描述

在本地部署的 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 测试步骤的运行时间,提高构建流水线的效率。

请在执行任何操作之前,确保在适当的环境中进行测试,以避免不必要的问题。

希望这些解决方案对你有所帮助!如有进一步的问题,请随时询问。

正文完