我有一个批处理文件,用于使用mstest执行一系列测试运行。
mstest /testmetadata:matrix.vsmdi /testlist:"Build Server" /runconfig:TestRunConfig_Matrix.testrunconfig /resultsfile:BuildServer.trx > %outPath%
mstest /testmetadata:matrix.vsmdi /testlist:"Build Server API" /runconfig:TestRunConfig_Matrix.testrunconfig /resultsfile:BuildServer_API.trx >> %outPath%
mstest /testmetadata:matrix.vsmdi /testlist:"Build Server Scheduler" /runconfig:TestRunConfig_Matrix.testrunconfig /resultsfile:BuildServer_Scheduler.trx >> %outPath%
第一行正确输出到新的日志文件%outPath%。我希望第2行和第3行附加到此日志文件。
然而,奇怪的是我发现第一行正确地创建了一个新的日志文件,但第二行覆盖了它,但第三行正确地附加到第二行的输出。因此,我永远无法看到第一行的输出!
我是否会失去理智,或者对此有合理的解释?
答案 0 :(得分:0)
在所有可能性中,你确实失去了理智。这是IT业务中的一个事实 - 通常是因为老板的IT Luddite造成的。
至于你的问题,我建议由于mstest
是一个可执行文件,你的程序将并行运行三个命令,而不是顺序运行。因此,写入文件的数据可能取决于进程终止的顺序。
理论上的解决方案是强制顺序调用这三个进程,
start /w "" mstest /testmetadata:matrix.vsmdi /testlist:"Build Server" /runconfig:TestRunConfig_Matrix.testrunconfig /resultsfile:BuildServer.trx > %outPath%
(即每行加start /w ""
)这应该只在当前终止时开始以下过程。
空兔子的耳朵很重要。这是创建的窗口的标题 - 它可以是您选择的任何字符串,但必须存在并且是第一个,否则厄运将会发生。好吧,不是完全没有厄运,但是批处理会选择行中第一个引用的字符串作为窗口标题,并可能将其作为参数忽略,从而导致意外结果。
重定向和start
不能很好地一起玩。
我试试
CALL mstest /testmetadata:matrix.vsmdi /testlist:"Build Server" /runconfig:TestRunConfig_Matrix.testrunconfig /resultsfile:BuildServer.trx > %outPath%
哪个应该解决问题。
如果这不起作用,可以尝试创建一个简单的批处理文件:
@echo off&setlocal
mstest /testmetadata:%~1 /testlist:"%~2" /runconfig:%~4 /resultsfile:%~5 > %~6
exit
并使用start
调用它:
start /w "" simplebatch matrix.vsmdi "Build Server" TestRunConfig_Matrix.testrunconfig BuildServer.trx %outPath%
(以及其他两个实例的类似行)