Vstest.console.exe在Bamboo中以代码255退出

时间:2016-05-26 20:24:10

标签: c++ visual-studio-2013 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-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

2 个答案:

答案 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)方法等待它完成。

然后,进程输出上的输出处理程序在另一个线程中执行,但是引用测试上下文来写出它们的输出。

这可能会以两种方式引发问题:

  1. MSDNWaitForExit(int milliseconds)文档中,它声明:

      

    当标准输出重定向到异步事件处理程序时,此方法返回时可能无法完成输出处理。要确保已完成异步事件处理,请在从此重载接收到true后调用WaitForExit()重载,该重载不带参数。

    这意味着输出处理程序可能在测试完成后写入上下文。

  2. 当超时到期时,该过程继续在后台运行,因此也可以写入测试上下文。

  3. 我们案例的解决方案有三个:

    1. 调用WaitForExit(int)后,要么终止进程(超时),要么再次调用WaitForExit()(非超时)。
    2. 从流程对象
    3. 取消注册输出事件处理程序
    4. 正确处理Process对象(使用using)。
    5. 您的案例的细节可能与我们的不同,但寻找线程测试,其中(a)线程可能在测试完成后执行,(b)写入测试输出。