TeamCity构建后启动UI测试:无法找到.exe文件的解决方案咨询
作为经常处理TeamCity构建配置的开发者,我来帮你理清这个路径问题——核心原因是本地开发环境的相对路径和TeamCity构建代理的工作目录不匹配,所以直接用@"ViewBrowser/bin/Debug/ViewBrowser.exe"肯定找不到文件。下面给你几个靠谱的解决方案:
1. 使用TeamCity内置参数拼接绝对路径
TeamCity提供了很多内置参数来获取构建相关的目录,你可以把这些参数嵌入到测试代码的路径中(或者通过TeamCity的构建参数传递给测试):
如果你的第一个构建步骤是在项目根目录下编译,那么构建代理的工作目录就是项目根目录,对应的参数是
%system.teamcity.build.workingDir%。你可以把代码里的路径改成:string exePath = Path.Combine(Environment.GetEnvironmentVariable("system.teamcity.build.workingDir"), @"ViewBrowser/bin/Debug/ViewBrowser.exe"); appCapabilities.SetCapability("app", exePath);注意要引用
System.IO命名空间来使用Path.Combine,这样能自动处理不同系统的路径分隔符。如果你的编译输出目录被自定义过(比如指定到了
%build.output.path%),就用这个参数来拼接路径。
2. 调整测试步骤的工作目录
在TeamCity的第二个构建步骤(UI测试)的配置里,找到工作目录选项,把它设置为第一个构建步骤生成ViewBrowser.exe的父目录(比如%system.teamcity.build.workingDir%/ViewBrowser/bin/Debug)。这样测试代码里原来的相对路径@"ViewBrowser.exe"就能直接找到文件了,不需要修改代码。
3. 借助构建产物(Artifacts)传递文件
更稳妥的方式是在第一个构建步骤中,把生成的ViewBrowser.exe标记为构建产物(Artifacts),然后在测试步骤中从Artifacts目录读取:
- 第一个构建步骤的Artifacts设置里,添加规则:
ViewBrowser/bin/Debug/ViewBrowser.exe => .,这样文件会被复制到TeamCity的Artifacts目录。 - 测试代码里的路径改成:
这种方式不受工作目录变化的影响,稳定性更高。string exePath = Path.Combine(Environment.GetEnvironmentVariable("system.teamcity.build.artifactDir"), "ViewBrowser.exe"); appCapabilities.SetCapability("app", exePath);
调试小技巧
如果你不确定文件到底在哪个目录,可以在测试步骤前加一个命令行构建步骤,执行dir %system.teamcity.build.workingDir% /s(Windows)或者ls -R %system.teamcity.build.workingDir%(Linux/macOS),这样就能看到构建代理上的目录结构,快速定位文件位置。
内容的提问来源于stack exchange,提问作者A191919

