InstrumentationProtoResultParser

public class InstrumentationProtoResultParser
extends Object implements IInstrumentationResultParser

java.lang.Object
   ↳ com.android.tradefed.result.ddmlib.InstrumentationProtoResultParser


解析来自 shell 的插桩测试运行的“protoStd 输出模式”结果,并将结果告知 ITestRunListener。

带有“-m”选项的 am instrument 命令会以二进制 protobuf 格式增量输出测试作业状态。输出 protobuf 消息为 InstrumentationData.Session,其中包含两个字段:1) InstrumentationData.TestStatus 的重复字段,2) InstrumentationData.SessionStatus。am instrument 命令会在每次测试作业之前/之后输出测试状态消息。addOutput(byte, int, int) 使用 data 实参(即 TestStatus 的序列化字节)进行调用。当所有测试完成后,该命令最终会输出 SessionStatus

如需查看完整的 protobuf 定义,请参阅 https://cs.android.com/android/platform/superproject/+/master:frameworks/base/cmds/am/proto/instrumentation_data.proto。

InstrumentationProtoResultParser 是一个状态机,状态在 ERROR(InstrumentationProtoResultParserState/com.android.tradefed.result.ddmlib.InstrumentationProtoResultParser.InstrumentationProtoResultParserState InstrumentationProtoResultParserState) 中定义。状态以 ERROR(InstrumentationProtoResultParserState.NOT_STARTED/com.android.tradefed.result.ddmlib.InstrumentationProtoResultParser.InstrumentationProtoResultParserState#NOT_STARTED InstrumentationProtoResultParserState.NOT_STARTED) 开头。当看到第一个测试用例状态时,它会移至 ERROR(InstrumentationProtoResultParserState.RUNNING/com.android.tradefed.result.ddmlib.InstrumentationProtoResultParser.InstrumentationProtoResultParserState#RUNNING InstrumentationProtoResultParserState.RUNNING)。如果所有测试都已完成,则状态会更改为 ERROR(InstrumentationProtoResultParserState.FINISHED/com.android.tradefed.result.ddmlib.InstrumentationProtoResultParser.InstrumentationProtoResultParserState#FINISHED InstrumentationProtoResultParserState.FINISHED);如果通过调用 cancel() 请求了该状态,则状态会更改为 ERROR(InstrumentationProtoResultParserState.CANCELLED/com.android.tradefed.result.ddmlib.InstrumentationProtoResultParser.InstrumentationProtoResultParserState#CANCELLED InstrumentationProtoResultParserState.CANCELLED)

每次有新的测试状态可用时,都会通知已注册的监听器。

摘要

公共构造函数

InstrumentationProtoResultParser(String runName, Collection<ITestRunListener> listeners)

构造 InstrumentationProtoResultParser

公共方法

void addOutput(byte[] data, int offset, int length)

每当有新数据可用时,系统都会调用此方法。

void cancel()

请求取消测试运行。

void flush()

在进程执行结束时调用(除非进程被取消)。

void handleTestRunFailed(String errorMsg)

当“am instrument”命令因异常而崩溃时,系统会调用此方法。

boolean isCancelled()

用于停止执行远程 shell 命令的取消方法。

公共构造函数

InstrumentationProtoResultParser

public InstrumentationProtoResultParser (String runName, 
                Collection<ITestRunListener> listeners)

构造 InstrumentationProtoResultParser

参数
runName String:要提供给 ITestRunListener.testRunStarted 的测试运行名称

listeners Collection:在测试执行时收到测试结果通知

公共方法

addOutput

public void addOutput (byte[] data, 
                int offset, 
                int length)

每当有新数据可用时,系统都会调用此方法。

参数
data byteInstrumentationData.Session 消息的序列化数据。如果 data 是不完整的块,则会将其添加到内部缓冲区,并在下一次 addOutput(byte, int, int) 调用中进行处理。

offset int:存储在 data 中的新数据的偏移量

length int:待处理的 data 中新数据的字节数。

取消

public void cancel ()

请求取消测试运行。

flush

public void flush ()

在进程执行结束时调用(除非进程已取消)。这允许接收方终止并刷新尚未处理的任何数据。

handleTestRunFailed

public void handleTestRunFailed (String errorMsg)

当“am instrument”命令因异常而崩溃时,系统会调用此方法。如果测试作业期间发生崩溃,应先通知所有已注册的监听器 ITestRunListener.testRunFailed,然后再通知 ITestRunListener.testRunEnded

参数
errorMsg String

isCancelled

public boolean isCancelled ()

用于停止执行远程 shell 命令的取消方法。

返回
boolean 如果为 true,则取消命令的执行。