我们有一些测试在某些文件上执行 powershell 脚本,以确保脚本正确处理文件。
这是一个例子:
[TestMethod]
[DeploymentItem(@"BuildScripts\CheckForFxCop.ps1")]
[DeploymentItem(@"TestData\TestWithIncorrectFxCop\TestWithIncorrectFxCop.csprojext", "TestWithIncorrectFxCop")]
public void WhenFxCopHasWrongValueFails()
{
string projectFileToTest = Path.Combine(Directory.GetCurrentDirectory(), "TestWithIncorrectFxCop", "TestWithIncorrectFxCop.csprojext");
string scriptFileToExecute = Path.Combine(Directory.GetCurrentDirectory(), "CheckForFxCop.ps1");
ProcessStartInfo startInfo = new ProcessStartInfo
{
FileName = "powershell.exe",
RedirectStandardOutput = true,
RedirectStandardError = true,
UseShellExecute = false,
CreateNoWindow = false
};
startInfo.Arguments = string.Format(@"& '{0}' '{1}' csprojext", scriptFileToExecute, projectFileToTest);
var process = new Process { StartInfo = startInfo };
process.Start();
... assert some stuff...
}
这些测试已经在构建服务器上运行了 9 个月。
我们最近在一台服务器上安装了 powershell 3,这使得所有这些测试都失败了:
System.ComponentModel.Win32Exception: The system cannot find the file specified
扔process.Start()
在线上。
我们暂时停止了在该服务器上运行的测试,只使用了未安装 powershell 3.0 的服务器。
我们最近在其他构建服务器上安装了 AzureSDK 2.1,现在我们在所有服务器上都遇到了同样的问题。
如果我们以构建代理用户身份登录构建机器并手动启动 powershell 并运行测试正在运行的命令,它似乎成功了。
有谁知道现在可能导致这些测试失败的原因是什么?或者对我们如何诊断问题有任何想法?