我们正在Bamboo构建中运行自动化单元测试,但即使我们的日志表明所有测试都已正确传递,它们有时也会失败。我做了一些谷歌搜索,目前我没有在哪里。有没有人知道为什么VSTest.Console.Exe返回0以外的值?
非常感谢!
以下是日志的最后几行:
build 26-May-2016 14:11:25 Passed ReInitializeConnection
build 26-May-2016 14:11:25 Passed UserIdentifier_CRUD
build 26-May-2016 14:11:25 Results File: D:\build-dir\AVENTURA-T2-COREUNITTESTS\TestResults\bamboo_svc_BUILDP02 2016-05-26 14_10_58.trx
build 26-May-2016 14:11:25
build 26-May-2016 14:11:25 Total tests: 159. Passed: 159. Failed: 0. Skipped: 0.
build 26-May-2016 14:11:25 Test Run Successful.
build 26-May-2016 14:11:25 Test execution time: 27.3562 Seconds
simple 26-May-2016 14:11:32 Failing task since return code of [C:\Program Files\Bamboo\temp\AVENTURA-T2-COREUNITTESTS-345-ScriptBuildTask-2971562088758505573.bat] was 255 while expected 0
simple 26-May-2016 14:11:32 Finished task 'Run vstest.console.exe' with result: Failed
答案 0 :(得分:0)
这不是我想要的解决方案,但如果返回代码不是0且所有测试都通过,它确实会使我的构建失败。在我们的测试命令结束时,我添加:
if %ERRORLEVEL% NEQ 0 (
echo Failure Reason Given is %errorlevel%
exit /b 0
)
所有这一切都可以捕获vstest.console.exe发出的错误,并返回0而不是255的返回代码。如果有人想出这个,我会非常欣赏知道为什么返回代码不是0。
答案 1 :(得分:0)
正如对该问题的评论所示,我也反对我公司的测试自动化问题。
在我们的例子中,vstest
在测试失败时返回1,但偶尔会返回255.如果返回255,则不会生成测试TRX输出。
在我们的情况下,我们正在运行产生子进程的集成测试。子进程具有附加的输出处理程序,可写入测试上下文。测试开始该过程,然后使用WaitForExit(int milliseconds)
方法等待它完成。
然后,进程输出上的输出处理程序在另一个线程中执行,但是引用测试上下文来写出它们的输出。
这可能会以两种方式引发问题:
在MSDN的WaitForExit(int milliseconds)
文档中,它声明:
当标准输出重定向到异步事件处理程序时,此方法返回时可能无法完成输出处理。要确保已完成异步事件处理,请在从此重载接收到true后调用WaitForExit()重载,该重载不带参数。
这意味着输出处理程序可能在测试完成后写入上下文。
当超时到期时,该过程继续在后台运行,因此也可以写入测试上下文。
我们案例的解决方案有三个:
WaitForExit(int)
后,要么终止进程(超时),要么再次调用WaitForExit()
(非超时)。 Process
对象(使用using
)。您的案例的细节可能与我们的不同,但寻找线程测试,其中(a)线程可能在测试完成后执行,(b)写入测试输出。