Vstest.console.exe以Bamboo中的代码255退出
Vstest.console.exe exits with code 255 in Bamboo
我们在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-dirAVENTURA-T2-COREUNITTESTSTestResultsbamboo_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 FilesBambootempAVENTURA-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,并且所有测试都通过了,它确实可以防止我的构建失败。在我们测试命令的末尾,我添加了:
if %ERRORLEVEL% NEQ 0 (
echo Failure Reason Given is %errorlevel%
exit /b 0
)
所有这些都会捕获vstest.console.exe中的错误,并抛出一个0而不是255的返回代码。如果有人能弄清楚这一点,我会非常感激知道为什么返回代码不是0。
正如对该问题的评论所示,我在公司的测试自动化中也遇到了这个问题。
在我们的例子中,当测试失败时,vstest
会返回1,但偶尔会返回255。在255返回的情况下,将不会生成测试TRX输出。
在我们的情况下,我们正在运行生成子进程的集成测试。子进程附加了可写入测试上下文的输出处理程序。测试启动该过程,然后使用WaitForExit(int milliseconds)
方法等待它完成。
进程输出上的输出处理程序随后在不同的线程中执行,但有一个对测试上下文的引用来编写它们的输出。
这可能会在两个方面造成问题:
-
在MSDN上的
WaitForExit(int milliseconds)
文档中,它指出:当标准输出被重定向到异步事件处理程序时,当此方法返回时,输出处理可能尚未完成。为了确保异步事件处理已经完成,请调用WaitForExit()重载,该重载在从该重载接收到true后不接受任何参数。
这意味着输出处理程序可能在测试完成后写入上下文。
-
超时到期后,进程将继续在后台运行,因此也可以写入测试上下文。
在我们的案例中,修复有三个方面:
- 调用
WaitForExit(int)
之后,要么终止进程(超时),要么再次调用WaitForExit()
(非超时) - 取消注册进程对象的输出事件处理程序
- 正确处理
Process
对象(使用using
)
您的情况可能与我们的不同,但请寻找线程测试,其中(a)线程可能在测试完成后执行,(b)写入测试输出。
- 创建LinkedList退出,返回代码为-11(SIGSEGV)
- pclose() 不会给我进程退出代码
- C++逗号分隔的输入数组代码过早退出
- Netbeans 10:错误:链接器命令失败,退出代码为 1(使用 -v 查看调用)
- 链接器命令失败,macOS 上的退出代码为 1(使用 -v 查看调用)
- 为什么我的 c++ 代码在使用堆栈时以退出代码 11 结尾?
- 使用常量字符*时退出代码 139
- 你好世界在 APUE 第 7 章退出,代码为 0
- 程序显示以退出代码 0; 结束
- VSCode C++终端进程已终止,退出代码为:1
- Qt5 [make -snap] 无法正确编译:进程"/usr/bin/snap"代码 1 退出
- 错误MSB3073以代码 8 退出
- 在GDB中:在启动程序中以代码1退出.在GDB之外运行良好
- 如何修复使用代码 2 退出"CL.exe"
- Visual Studio 中 Opencv 的介绍性示例程序以代码 -1 退出.不放心
- 我怎样才能删除它?(进程 4652) 以代码 0 退出
- QtCreator:进程 jom.exe 以代码 3 退出
- 错误 MSB6006:"cmd.exe"使用代码退出
- OpenGL程序在Visual Studio 2015中以代码1退出
- 进程qmake.exe以代码2退出-第一次使用Qt和Qt Creator