开发人员区

使用MATLAB先进的软件开发

打开YAML频道!

诊断。他们是一个有效的测试框架的秘密酱,我们当然会认真对待我们的工作,提供诊断,这些诊断没有太热或有点太冷,但是Juuuuusssst的正确信息,特别是在遇到失败时。这是如此重要的原因是因为良好的诊断可以节省人类时间,这通常比计算机时间更珍贵。

实际上,这是CI系统如此有价值的原因之一。他们带走了构建,限定和部署软件所需的人类时间,并将作业委托给机器,而不是损害您的生产力。但是,当发生故障时,您将依赖于未能诊断,以便在发生的情况下给您一些提示。

让我向你展示一个例子。我去了下载了dig文件兑换提交突出显示。注意,此提交现已被取代所取代梦幻般的图形功能包含在R2015B及更高版本中,但如果您尚未在该版本上,您肯定可以查看它。但是,我在内的一个原因包括,因为它包含一个很好的测试套件,我们可以从您的CI系统运行。

还没有与CI系统设置?看看一些这些其他帖子让你去。如果您尚未阅读它们,则从该类别页面上从自下而上。

无论如何,让我们继续詹金斯并展示诊断目前如何出现这些数字记录测试。这是我要求Matlab在Jenkins项目中运行的脚本:

进口matlab.unittest.testrunner.;进口matlab.unittest.plugins.tapplugin.;进口matlab.unittest.plugins.tofile.;尝试套房= testsuite('单元测试');runner = testrunner.withtextoutput('冗长',3);%添加点击插件tapfile = fullfile(getenv('工作区'),'testresults.tap');runner.addplugin(tapplugin.produteoriginalformat(tofile(tapfile)));结果= runner.run(套件)抓住E DISP(GetReport(e,'延伸'));出口(1);结尾出口;

它经过吗?好吧,当我们在Jenkins的jenkins上发表这项工作时,这里是我们得到的:

好吧。不错,但看起来我们有失败。我们知道为什么失败了吗?还没有。为此,我们需要钻入“点击测试结果”而不是这一点“扩展龙头测试结果”Jenkins Tap插件。

在这里,我们最终通过单击它并进入此页面挖掘故障测试,显示诊断:

哇。好吧,我们花了几次点击,但我们制作了它。我们可以很快看到该测试在错误的错误消息ID中验证。看着这两个ID,你可以采取一个非常好的猜测,这可能不是软件中的真正问题,但是由于可能只是在MATLAB版本中更改了id的琐碎的测试更新。没问题。快点找到,快速修复。

但是,我认为我们可以提高我们在这里的方式。对于一个,需要太多点击次数。此外,当Jenkins插件显示诊断值时,似乎有一些空白格式丢失。在这种情况下,可能更容易直接查看点击文件输出:

1..51不正常1  -  DigraphaPitest / Digraph#================================================================================ ##验证失败的digraphapitest / digraph中失败。## -------------------#框架诊断:#--------------------#urmenError失败。# - >函数扔了错误的例外。##实际异常:#'ATLAB:ToomanyInputs'#预期例外:#'AMATLAB:MAXRHS ##实际错误报告:#使用digraph#错误#太多输入参数。###错误在DigraphaPItest> @()digraph('foo')(第14行)#testcase.verifyError(@()digraph('foo'),'matlab:maxrhs');#评估功能:#@()digraph('foo')## --------------------------------------#在h:\ documents \ matlab \ unittest \ digraphapitest.m(digraphapitest.digraph)在14#================================================================================#OK 2  -  Digraphapitest / Isempty_ ok 3  -  Digraphapitest / Adequigord OK 5  -  Digraphapitest / Removerex OK 6  -  Digraphapitest / Hasvertex OK 7  -  Digraphapitest / Asertvertex OK 8  -  Digraphapitest/addEdge ok 9 - digraphAPITest/removeEdge ok 10 - digraphAPITest/hasEdge ok 11 - digraphAPITest/findall ok 12 - digraphAPITest/hasCycle ok 13 - digraphAPITest/isComplete ok 14 - digraphAPITest/shortestPath ok 15 - digraphAPITest/subgraph ok 16 - digraphAPITest/minimalEdges ok 17 - digraphAPITest/transitiveClosure ok 18 - digraphAPITest/union ok 19 - digraphAPITest/intersect ok 20 - digraphAPITest/sort ok 21 - digraphAPITest/copy_ ok 22 - digraphAPITest/reset ok 23 - digraphAPITest/spy ok 24 - digraphFunctionalityTest/Vertex ok 25 - digraphFunctionalityTest/Edge ok 26 - digraphFunctionalityTest/unionBasic ok 27 - digraphFunctionalityTest/unionAdvanced ok 28 - digraphFunctionalityTest/intersectBasic ok 29 - digraphFunctionalityTest/intersectAdvanced ok 30 - digraphFunctionalityTest/hasPath ok 31 - digraphFunctionalityTest/sort ok 32 - digraphFunctionalityTest/shortestPathBasic ok 33 - digraphFunctionalityTest/shortestPathAdvanced ok 34 - digraphFunctionalityTest/hasCycle ok 35 - digraphFunctionalityTest/CycleDoesNotTriggerInfiniteLoop ok 36 - digraphFunctionalityTest/findall ok 37 - digraphFunctionalityTest/subgraph ok 38 - digraphFunctionalityTest/isEquivalent ok 39 - digraphFunctionalityTest/copy_ ok 40 - digraphFunctionalityTest/isComplete ok 41 - digraphFunctionalityTest/isempty_ ok 42 - digraphFunctionalityTest/transitiveClosureBasic ok 43 - digraphFunctionalityTest/transitiveClosureAdvanced ok 44 - digraphFunctionalityTest/transitiveClosureCycleAndComplete ok 45 - digraphFunctionalityTest/minimalEdgesBasic ok 46 - digraphFunctionalityTest/minimalEdgesAdvanced ok 47 - digraphFunctionalityTest/minimalEdgesCycleAndComplete ok 48 - digraphFunctionalityTest/trivialgraph ok 49 - digraphFunctionalityTest/isEquivalentSubclass ok 50 - digraphFunctionalityTest/subclassesArePreserved ok 51 - digraphFunctionalityTest/spy

良好的R2016B有一种更好的方法。您是否想知道为什么Matlab Tapplugin是使用如下呼叫创建的?

进口matlab.unittest.plugins.tapplugin.;插件= tapplugin.prododeoriginalformat.
插件= taporiginalommatplugin具有属性:IncludePassingDiagnostics:0冗长:TESTEUDLOGGEDDIAGNOSTICS:0

原始格式的交易是多少?还有其他格式吗?好吧,快速历史依靠,点按格式由Perl社区多年来发展,但正式规范真的开始在可能被称为第12版(以及我们所谓的原始格式,因为这版本是第一个记录的规格)。从那时起,还有一个版本13格式。实际上,有一群人参与讨论的讨论,尚未讨论一个版本14,但尚未进行正式规范。如果您有兴趣,如果您想加入我确保任何此类格式考虑到Matlab社区的需求,那么确实会参与其中。有一个GitHub项目A.松弛的频道讨论您可以参加的格式。

无论如何,新闻是R2016B包括生产版本13点击格式的选项!

插件= tapplugin.produtingversion13.
插件= TapVersion13Plugin具有属性:IncludePassingDiagnostics:0详细信息:COTERUDLOGGEDDIAGNOSTICS:0

这种格式的最大外带是这样一个事实,即诊断可以在TAP流中包含在Yaml(ISH)块中。你可能会或可能不知道,但是:

yaml.

一种不是

markup.

L.愤怒

我们都知道程序员如何爱递归首字母缩略词(例如,GNU.XNA)。这对我们意味着什么?更好的诊断经验。让我们在詹金斯工作中看到同样的测试失败,而是使用Tap协议的版本13。

进口matlab.unittest.testrunner.;进口matlab.unittest.plugins.tapplugin.;进口matlab.unittest.plugins.tofile.;尝试套房= testsuite('单元测试');runner = testrunner.withtextoutput('冗长',3);%添加点击插件tapfile = fullfile(getenv('工作区'),'testresults.tap');runner.addplugin(tapplugin.produtingversion13(tofile(tapfile)));结果= runner.run(套件)抓住E DISP(GetReport(e,'延伸'));出口(1);结尾出口;

使用此生成以下Tap流

点击版本13 1..51不正常1  -  Digraphapitest / digraph ---事件:事件名称:'VerificationFailed'范围:'DigraphaPitest / Digraph'框架诊断:|urmenError失败。- >函数抛出了错误的例外。实际例外:'matlab:toomanyinputs'的预期例外:'matlab:maxrhs'实际错误报告:使用digraph时出错太多输入参数。digraphapitest> @()digraph('foo')(第14行)testcase.verifyError(@()digraph('foo'),'matlab:maxrhs');评估功能:@()digraph('foo')堆栈:|在H:\文件\ MATLAB \单元测试\ digraphAPITest.m(digraphAPITest.digraph)在14 ...确定2  -  digraphAPITest / isempty_ OK 3  -  digraphAPITest / isEquivalent OK 4  -  digraphAPITest / addVertex OK 5  -  digraphAPITest / removeVertex OK 6  -DigraphaPitest / Hasvertex OK 7  -  DigraphaPitest / Asservertex OK 9  -  DigraphaPitest / RemoveDedge OK 10  -  Digraphapitest / Hasdedge Ok 11  -  Digraphapitest / FindAll OK 12  -  DigraphaPitest / Hascycle OK 13  -  Digraphapitest / isComplete OK 14  -  DigraphaPitest /ShortestPath OK 15  -  Digraphapitest / Subgrapher OK 17  -  DigraphaPitest / Transitivlosure OK 18  -  Digraphapitest / Union OK 19  -  Digraphapitest / Intersect OK 20  -  Digraphapitest / Sort OK 21  -  Digraphapitest / Copy_ OK 22  -  DigraphaPItest / Reset OK23  -  Digraphapitest / Spy OK 24  -  DigraphF功能正常/顶点OK 25  -  Digraphf功能正常/ EDGE OK 26  -  Digraphf功能正常/ Unionbasic OK 27  -  DigraphF功能QUINTIONALT / UNIONADDADGE OK 28  -  DigraphF功能QUINCLETITYTEST / INTersectbasic ok 29  -  Digraphf功能正常数ok 30  -  Digraphf功能正常数/排序ok 32  -  DigraphF功能QUINTIONTEST / ShortestPathBasic OK 33  -  DigraphF功能Quantialtest / ShortestPathAdvanced OK 34  -  DigraphF功能QuantialTest / Hascycle OK 35  -  DigraphF功能Quantialty / CycledoOSNNottriggerInfiniteloop OK 36  -  DigraphFunctionalityLoop OK 36  -  DigraphF功能QuantialTest / FindAll OK 37 - digraphFunctionalityTest/subgraph ok 38 - digraphFunctionalityTest/isEquivalent ok 39 - digraphFunctionalityTest/copy_ ok 40 - digraphFunctionalityTest/isComplete ok 41 - digraphFunctionalityTest/isempty_ ok 42 - digraphFunctionalityTest/transitiveClosureBasic ok 43 - digraphFunctionalityTest/transitiveClosureAdvanced ok 44 - digraphFunctionalityTest/transitiveClosureCycleAndComplete ok 45 - digraphFunctionalityTest/minimalEdgesBasic ok 46 - digraphFunctionalityTest/minimalEdgesAdvanced ok 47 - digraphFunctionalityTest/minimalEdgesCycleAndComplete ok 48 - digraphFunctionalityTest/trivialgraph ok 49 - digraphFunctionalityTest/isEquivalentSubclass ok 50 - digraphFunctionalityTest/subclassesArePreserved ok 51 - digraphFunctionalityTest/spy

非常好,我们在业务中与原始格式大致相同的故障诊断。然而,大胜利是,现在诊断符合结构化格式,其他工具(如Jenkins)可以用更多的味道代表它们。这是现在的“点击扩展测试结果”页面看起来像詹金斯:

现在我们可以在单个测试结果页面上看到所有的故障诊断,更清晰度和结构。相当甜蜜。

您是否看到自己从Tap格式的版本中获得的更具结构化的诊断?你有没有故事告诉好的诊断在哪里节省了一堆调试时间吗?一定要告诉!




发布与MATLAB®R2016B

|
  • 打印
  • 发电子邮件

注释

要发表评论,请点击这里登录您的MathWorks帐户或创建新的。