Buildbot解析Python单元测试结果

8

我有一个测试套件,以Python Unit Test格式输出测试结果:http://docs.python.org/library/unittest.html

是否存在一个现有的Buildbot模块/插件可以解析这个表单?

例如:

DigitalReadWrite_02                                         ... ok
DigitalReadWrite_03                                         ... ok
DigitalReadWrite_04                                         ... ok
PWMoutput_02  (PWM=128 50% LOW 49% HIGH)                    ... ok
PWMoutput_03  (PWM=128 50% LOW 49% HIGH)                    ... ok
PWMoutput_04  (PWM=128 50% LOW 49% HIGH)                    ... ok
--------------------------
Ran 6 tests in 1.652s

OK

我写了一个自定义解析器,但它只覆盖了基本情况。是否值得花费精力使其支持所有Python Unit测试格式的完整性。


这是一个测试运行器(如nosepy.test)的工作,它提供可解析的输出,比如XUnit XML格式。 - jfs
1个回答

3
不需要开发解析器,runner.py模块中的类可以提供等效的信息。考虑扩展两个类TextTestRunnerTextTestResult,添加自定义逻辑(Python 2.7)。你列出的输出是由TextTestResult生成的。或者你只能扩展TextTestResult并更改类属性TextTestRunner.resultclass将其设置为新扩展类名称。从TextTestResult中提取数据并将其放入一些字典列表中的数据大于或等于你的解析器能够提取的数据。由于unittest框架具有灵活的设计,因此允许使用这种技巧。希望这有所帮助。如果您仍然想要追求文本解析方法,则可能需要列举并描述您想要覆盖/支持的“所有Python单元测试格式类型”。如果你有幸以上下文无关文法的形式描述这样的描述,那么也许你就能开发一个解析器,将它们作为一种语言的形式来覆盖“那些”情况。请注意:如果文本解析不被简单的正则表达式覆盖,并且有可能你正在尝试解析一些不规则的(上下文敏感的)语言-最有可能你会发现这极其困难。

对于那些没有访问runner的人还是知道这个信息会很好。 - trinth
正则表达式和面向对象编程之间的选择只是一种便利。顺便说一下,如果您说您无法访问或控制Runner类,即无法组织测试环境,则解析文本对于文本报告可能是不错的选择。但是,如果确实如此,我会非常警惕... 如果您没有正确控制测试工作流程==它可能带给您的实际效益不太大。 - Yauhen Yakimovich
就实际情况而言,我同意你的观点。但是如果有人对此感兴趣,想把这个问题作为练习或娱乐,他们可能想要得到原始问题的答案。 - trinth
我认为你不可能比正则表达式解析做得更好。使用像ANTLR这样的工具需要解析具有上下文无关语法的形式化语言。这似乎有些过度了。根据我的经验,如果没有能够在处理文本之前定义输入可以是什么或不能是什么,只通过处理文本(使用正则表达式将其解析出来)来学习到的唯一技能就是浪费时间。如果你很幸运,你会得到一些结果。然后这个结果会鼓励你继续花更多的时间 - 最终你会得到非常复杂的代码。不,我不建议将这作为练习。 - Yauhen Yakimovich

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接