PythonUnitTestResultParser
public
class
PythonUnitTestResultParser
extends MultiLineReceiver
| java.lang.Object | ||
| ↳ | com.android.ddmlib.MultiLineReceiver | |
| ↳ | com.android.tradefed.testtype.PythonUnitTestResultParser | |
解读使用 Python 的 unittest 框架运行的测试的输出,并将其转换为对一系列 ITestInvocationListener 的调用。这些测试的输出遵循以下 EBNF 语法:
TestReport ::= TestResult* Line TimeMetric [FailMessage*] Status. TestResult ::= string \u201c(\u201cstring\u201d)\u201d \u201c\u2026\u201d SingleStatus. FailMessage ::= EqLine \u201cERROR:\u201d string \u201c(\u201cstring\u201d)\u201d Line Traceback Line. SingleStatus ::= \u201cok\u201d | \u201cERROR\u201d。TimeMetric ::= \u201cRan\u201d integer \u201ctests in\u201d float \u201ds\u201d. 状态 ::= \u201cOK\u201d | \u201cFAILED (errors=\u201d int \u201c)\u201d。Traceback ::= string+.
输出示例(通过):test_size (test_rangelib.RangeSetTest) ... ok test_str (test_rangelib.RangeSetTest) ... ok test_subtract (test_rangelib.RangeSetTest) ... ok test_to_string_raw (test_rangelib.RangeSetTest) ... ok test_union (test_rangelib.RangeSetTest) ... ok
---------------------------------------------------------------------- 在 0.002 秒内运行了 5 项测试
好的
示例输出(失败)test_size (test_rangelib.RangeSetTest) ... ERROR
====================================================================== ERROR:test_size(test_rangelib.RangeSetTest) ----------------------------------------------------------------------回溯(最近一次调用):文件“test_rangelib.py”,第 129 行,在 test_rangelib 中引发 ValueError() ValueError ----------------------------------------------------------------------运行了 1 项测试,耗时 0.001 秒 失败(错误=1)
包含多个边缘情况(失败)的输出示例:testError (foo.testFoo) ... ERROR testExpectedFailure (foo.testFoo) ... expected failure testFail (foo.testFoo) ... FAIL testFailWithDocString (foo.testFoo) foo bar ... FAIL testOk (foo.testFoo) ... ok testOkWithDocString (foo.testFoo) foo bar ... ok testSkipped (foo.testFoo) ... skipped 'reason foo' testUnexpectedSuccess (foo.testFoo) ... unexpected success
====================================================================== ERROR: testError (foo.testFoo) ---------------------------------------------------------------------- Traceback (most recent call last): File "foo.py", line 11, in testError self.assertEqual(2+2, 5/0) ZeroDivisionError: integer division or modulo by zero
===================================================================== FAIL: testFail (foo.testFoo) ---------------------------------------------------------------------- Traceback (most recent call last): File "foo.py", line 8, in testFail self.assertEqual(2+2, 5) AssertionError: 4 != 5
===================================================================== FAIL: testFailWithDocString (foo.testFoo) foo bar ---------------------------------------------------------------------- Traceback (most recent call last): File "foo.py", line 31, in testFailWithDocString self.assertEqual(2+2, 5) AssertionError: 4 != 5
---------------------------------------------------------------------- 在 0.001 秒内运行了 8 项测试
失败(失败次数=2,错误次数=1,跳过次数=1,预期失败次数=1,意外成功次数=1)
TODO:考虑重构整个类,目前的处理方式非常混乱。
摘要
公共构造函数 | |
|---|---|
PythonUnitTestResultParser(
创建向指定 |
|
PythonUnitTestResultParser(
创建新的 |
|
公共方法 | |
|---|---|
void
|
finalizeParser()
|
boolean
|
isCancelled()
|
void
|
processNewLines(String[] lines)
处理 Python unittest 输出并报告解析结果。 |
void
|
setFinalizeWhenParsing(boolean shouldFinalize)
|
公共构造函数
PythonUnitTestResultParser
public PythonUnitTestResultParser (listeners, String runName)
创建向指定 ITestInvocationListener 报告的新 PythonUnitTestResultParser。
| 参数 | |
|---|---|
listeners |
|
runName |
String |
PythonUnitTestResultParser
public PythonUnitTestResultParser (listeners, String runName, includeFilters, excludeFilters)
创建新的 PythonUnitTestResultParser,该 PythonUnitTestResultParser 会向给定的 ITestInvocationListener 报告,并具有指定的包含和排除过滤条件。
| 参数 | |
|---|---|
listeners |
|
runName |
String |
includeFilters |
|
excludeFilters |
|
公共方法
finalizeParser
public void finalizeParser ()
isCancelled
public boolean isCancelled ()
| 返回 | |
|---|---|
boolean |
|
processNewLines
public void processNewLines (String[] lines)
处理 Python unittest 输出并报告解析后的结果。
与 MultiLineReceiver 中的基本方法不同,此方法只能调用一次,且必须提供完整输出。
| 参数 | |
|---|---|
lines |
String:包含新行的数组。 |
setFinalizeWhenParsing
public void setFinalizeWhenParsing (boolean shouldFinalize)
| 参数 | |
|---|---|
shouldFinalize |
boolean |