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) ---------------------------------------------------------------------- Traceback (most recent call last): File "test_rangelib.py", line 129, in test_rangelib raise ValueError() ValueError ---------------------------------------------------------------------- Ran 1 test in 0.001s FAILED (errors=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

====================================================================== 失败:testFail (foo.testFoo) ---------------------------------------------------------------------- 轨迹回溯 (最近的调用在最后):文件“foo.py”第 8 行,在 testFail 中 self.assertEqual(2+2, 5) AssertionError: 4 != 5

====================================================================== 失败: testFailWithDocString (foo.testFoo) foo bar ---------------------------------------------------------------------- 轨迹回溯(最近的调用在最后):文件“foo.py”第 31 行,在 testFailWithDocString 中 self.assertEqual(2+2, 5) AssertionError: 4 != 5

---------------------------------------------------------------------- 在 0.001 秒内运行了 8 项测试

失败(失败次数=2、错误次数=1、跳过次数=1、预期失败次数=1、意外成功次数=1)

TODO:考虑重构整个类,目前的处理方式非常混乱。

摘要

公共构造函数

PythonUnitTestResultParser( listeners, String runName)

创建一个向指定 ITestInvocationListener 报告的新 PythonUnitTestResultParser

PythonUnitTestResultParser( listeners, String runName, includeFilters, excludeFilters)

创建一个新的 PythonUnitTestResultParser,用于向指定的 ITestInvocationListener 报告,并使用指定的包含和排除过滤条件。

公共方法

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,用于向指定的 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