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

如何通过PowerShell同时运行IISExpress与单元测试?

让IIS Express与VSTest在PowerShell中同时运行的解决方案

嘿,这个问题我太熟了——刚接触PowerShell的时候很多人都会踩这个坑:直接调用iisexpress.exe会让脚本阻塞在这一步,直到IIS Express手动关闭,自然没法接着跑单元测试。核心解决思路就是把IIS Express放到后台进程启动,等测试完成后再主动关闭它。

下面是完整的实现步骤:

1. 后台启动IIS Express

用Start-Process命令启动IIS Express,同时记录进程对象,方便后续关闭:

# 替换成你的网站路径和端口
$websitePath = "C:\Your\Website\Root\Path"
$port = 5000

# 启动IIS Express到后台,返回进程对象
$iisProcess = Start-Process -FilePath "C:\Program Files\IIS Express\iisexpress.exe" `
    -ArgumentList "/path:$websitePath /port:$port" `
    -PassThru -NoNewWindow
  • -PassThru:返回IIS Express的进程对象,我们需要它的ID来后续关闭进程
  • -NoNewWindow:可选参数,如果你不想新开一个命令行窗口运行IIS,可以加上

2. 等待站点就绪(可选但推荐)

有时候IIS Express启动站点需要几秒钟时间,直接跑测试可能会因为站点未就绪失败。可以加个短暂延迟:

Start-Sleep -Seconds 3 # 根据你的站点启动速度调整时间

3. 运行VSTest

直接调用vstest.console.exe执行你的测试集,注意替换成你自己的VS版本和测试程序集路径:

# 替换成你的测试程序集路径和VS安装路径
$testAssemblyPath = "C:\Your\Test\Project\bin\Debug\YourTestAssembly.dll"
$vstestPath = "C:\Program Files (x86)\Microsoft Visual Studio\2022\Community\Common7\IDE\Extensions\TestPlatform\vstest.console.exe"

& $vstestPath $testAssemblyPath

4. 关闭IIS Express进程

测试跑完后一定要关闭IIS Express,不然它会一直后台运行。推荐用try/finally块,确保不管测试成功还是失败都能关闭进程:

finally {
    if ($iisProcess -and !$iisProcess.HasExited) {
        Stop-Process -Id $iisProcess.Id -Force
        Write-Host "已关闭IIS Express进程"
    }
}

完整脚本示例

把上面的步骤整合起来,就是一个可以直接用的脚本:

try {
    # 配置参数
    $websitePath = "C:\Your\Website\Root\Path"
    $port = 5000
    $testAssemblyPath = "C:\Your\Test\Project\bin\Debug\YourTestAssembly.dll"
    $vstestPath = "C:\Program Files (x86)\Microsoft Visual Studio\2022\Community\Common7\IDE\Extensions\TestPlatform\vstest.console.exe"

    # 启动IIS Express后台进程
    Write-Host "正在启动IIS Express..."
    $iisProcess = Start-Process -FilePath "C:\Program Files\IIS Express\iisexpress.exe" `
        -ArgumentList "/path:$websitePath /port:$port" `
        -PassThru -NoNewWindow

    # 等待站点就绪
    Start-Sleep -Seconds 3

    # 运行单元测试
    Write-Host "开始执行单元测试..."
    & $vstestPath $testAssemblyPath
}
finally {
    # 确保关闭IIS Express
    if ($iisProcess -and !$iisProcess.HasExited) {
        Stop-Process -Id $iisProcess.Id -Force
        Write-Host "已关闭IIS Express进程"
    }
}

额外提示

  • 如果你的IIS Express路径不是默认的C:\Program Files\IIS Express\iisexpress.exe,记得替换成实际路径
  • VS版本不同,vstest.console.exe的路径也会不一样,比如2019版本的路径可能是C:\Program Files (x86)\Microsoft Visual Studio\2019\Community\Common7\IDE\Extensions\TestPlatform\vstest.console.exe
  • 要是想查看IIS Express的输出,可以去掉-NoNewWindow参数,或者把输出重定向到日志文件

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.05.19 07:13:21