如何重定向Teamcity从文件而不是标准输出读取?

时间:2015-01-16 09:05:00

标签: file redirect teamcity stdout tap

我正在尝试将一个Matlab单元测试套件添加到团队城市。 matlab测试使用TAPPlugin,它将TAP输出输出到文件。标准输出的记录太多,无法成功使用。

我已将TAP插件添加到Teamcity,当标准输出为TAP时,该插件可正常工作。现在,如何让TeamCity从文件中读取而不是标准输出,以便在Teamcity中即时更新测试结果?

我想我可以将std输出到日志文件,然后只重定向文件的输出?是否有更好的方法,可能使用Teamcity的服务消息?

3 个答案:

答案 0 :(得分:0)

我所做的就是在文件和TeamCity输出中编写。您可以动态地执行,也可以在写入文件结束时将其转储到stdout上。

答案 1 :(得分:0)

我在MATLAB方面看到了一些选项(我可能也无法与TeamCity的apis说话):

  1. 将MATLAB的TAPPlugin重定向到某个文件,然后作为后续构建步骤将该文件打印到stdout。也许这样你至少可以将MATLAB TAP Stream保存在TeamCity日志的一个连续块中。
  2. 使用MATLAB's XML plugin生成JUnit样式输出。然后从MATLAB运行中创建相应的xml文件,然后在TeamCity中添加构建功能(不是构建步骤,它是构建配置中的不同页面)以处理JUnit样式XML。您需要的构建功能是XML报告处理。
  3. JUnit和TAP格式之间存在优缺点,但如果您的详细TeamCity日志导致TAP输出出现问题,则TeamCity中的JUnit支持独立于构建日志,这对您来说可能是一个很大的优势

答案 2 :(得分:0)

我就是这样做的,它运作得很好:

我的MATLAB测试文件(runTestSuiteTeamCity.m):

close all;
clear all; %#ok

import matlab.unittest.TestRunner
import matlab.unittest.TestSuite.*
import matlab.unittest.plugins.TAPPlugin
import matlab.unittest.plugins.ToFile

filename = 'TapDump.tap';

if exist(filename, 'file')
    delete(filename);
end

plugin = TAPPlugin.producingOriginalFormat(ToFile(filename));

suite = matlab.unittest.TestSuite.fromPackage('Test');
runner = TestRunner.withTextOutput;
runner.addPlugin(plugin);
results = runner.run(suite);
disp(results);
disp(fileread(filename))

exit;

在TeamCity上,我使用命令行构建步骤和以下自定义脚本:

set mllogfile="c:\temp\test_log.txt"
matlab -wait -r "runTestSuiteTeamCity" -logfile %%mllogfile%%
set mlerror=%%errorlevel%%
type %%mllogfile%%
exit %%mlerror%%