You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

如何在Visual Studio测试控制器中自动删除测试后的Deployment文件夹

自动删除Test Controller上的Deployment文件夹(VS 2013 Update 5)

针对你用MTM通过代理机运行Coded UI测试后,需要自动删除控制器机上AppData\Local\VSTQT\QTController\<run_number_folder>里的Deployment文件夹的需求,这里有几个实用的方案,按实现复杂度从低到高排序:

方案1:测试后执行自定义脚本(最推荐)

MTM的测试设置支持在测试运行完成后执行清理脚本,这是最直接的方式:

  1. 编写清理脚本
    你可以选择PowerShell或批处理脚本,以下是两种示例:

    • PowerShell脚本(更灵活):
      # 定位QTController的根目录
      $qtControllerRoot = Join-Path $env:LOCALAPPDATA "VSTQT\QTController"
      # 按修改时间倒序获取所有运行文件夹(最新的在最前面)
      $runFolders = Get-ChildItem -Path $qtControllerRoot -Directory | Sort-Object LastWriteTime -Descending
      
      foreach ($folder in $runFolders) {
          $deploymentPath = Join-Path $folder.FullName "Deployment"
          if (Test-Path $deploymentPath) {
              # 强制递归删除Deployment文件夹
              Remove-Item -Path $deploymentPath -Recurse -Force -ErrorAction SilentlyContinue
              Write-Host "Successfully deleted Deployment folder: $deploymentPath"
          }
      }
      
    • 批处理脚本(兼容性好):
      @echo off
      set "QT_CONTROLLER_PATH=%LOCALAPPDATA%\VSTQT\QTController"
      # 按修改时间倒序遍历所有运行文件夹
      for /f "delims=" %%d in ('dir /ad /o-d /b "%QT_CONTROLLER_PATH%"') do (
          set "RUN_FOLDER=%QT_CONTROLLER_PATH%\%%d"
          if exist "%RUN_FOLDER%\Deployment" (
              # 静默删除Deployment文件夹
              rmdir /s /q "%RUN_FOLDER%\Deployment"
              echo Deleted Deployment folder: %RUN_FOLDER%\Deployment
          )
      )
      

    把脚本保存到控制器机的某个固定路径,比如C:\TestScripts\CleanupDeployment.ps1。

  2. 配置MTM测试设置

    • 打开你的测试计划对应的测试设置(Test Settings)
    • 切换到Setup and Cleanup标签页
    • 在Cleanup scripts区域,点击Add按钮,选择你刚才保存的脚本
    • 确保脚本的执行时机设置为After test run(测试运行结束后)
  3. 权限检查
    注意Test Controller的服务账号(默认是Network Service)需要拥有%LOCALAPPDATA%\VSTQT\QTController目录的修改/删除权限。你可以右键该目录 → 属性 → 安全 → 添加服务账号,赋予对应的权限。

方案2:创建Test Controller自定义监听插件

如果脚本方式满足不了你的需求(比如需要更精细的控制),可以编写一个Test Controller的扩展插件:

  1. 编写监听代码
    创建一个C#类库项目,引用Microsoft.VisualStudio.TestTools.Execution.dll(位于C:\Program Files (x86)\Microsoft Visual Studio 12.0\Common7\IDE\PrivateAssemblies),然后实现TestRunListener:

    using Microsoft.VisualStudio.TestTools.Execution;
    using System.IO;
    using System.Linq;
    
    public class DeploymentCleanupListener : TestRunListener
    {
        public override void TestRunCompleted(TestRunCompletedEventArgs e)
        {
            base.TestRunCompleted(e);
            var qtControllerPath = Path.Combine(
                System.Environment.GetFolderPath(System.Environment.SpecialFolder.LocalApplicationData),
                "VSTQT", "QTController");
    
            // 获取所有运行文件夹,按修改时间倒序处理
            var runFolders = new DirectoryInfo(qtControllerPath).GetDirectories()
                .OrderByDescending(dir => dir.LastWriteTime);
    
            foreach (var runFolder in runFolders)
            {
                var deploymentDir = Path.Combine(runFolder.FullName, "Deployment");
                if (Directory.Exists(deploymentDir))
                {
                    Directory.Delete(deploymentDir, true);
                }
            }
        }
    }
    
  2. 部署插件

    • 编译项目生成DLL文件
    • 将DLL复制到Test Controller的插件目录:C:\Program Files (x86)\Microsoft Visual Studio 12.0\Common7\IDE\PrivateAssemblies
    • 重启Visual Studio Test Controller服务,使插件生效

方案3:Windows定时任务(被动清理)

如果前两种方式都不适用,你可以设置Windows定时任务定期清理:

  1. 创建定时任务
    • 打开控制器机的「任务计划程序」
    • 创建基本任务,设置触发条件(比如每天凌晨2点,或者每隔1小时)
    • 选择「启动程序」,指向你的清理脚本(比如PowerShell,参数为-ExecutionPolicy Bypass -File "C:\TestScripts\CleanupDeployment.ps1")
    • 确保任务使用的账号有足够权限删除文件夹

这个方案是被动清理,不会在测试结束后立即执行,但适合不需要实时清理的场景。

内容的提问来源于stack exchange,提问作者Pankaj Devrani

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.05.21 06:33:07