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(/com.android.tradefed.result.ddmlib.InstrumentationProtoResultParser.InstrumentationProtoResultParserState#NOT_STARTED) 开头。当看到第一个测试用例状态时,它会移至 ERROR(InstrumentationProtoResultParserState.RUNNING/com.android.tradefed.result.ddmlib.InstrumentationProtoResultParser.InstrumentationProtoResultParserState#RUNNING InstrumentationProtoResultParserState.RUNNING)。如果所有测试都已完成,则状态会更改为 ERROR(/com.android.tradefed.result.ddmlib.InstrumentationProtoResultParser.InstrumentationProtoResultParserState#FINISHED);如果通过调用 cancel() 请求了该状态,则状态会更改为 ERROR(/com.android.tradefed.result.ddmlib.InstrumentationProtoResultParser.InstrumentationProtoResultParserState#CANCELLED)

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

摘要

公共构造函数

InstrumentationProtoResultParser(String runName, 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, 
                 listeners)

构造 InstrumentationProtoResultParser

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

listeners :在测试执行时获知测试结果

公共方法

addOutput

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

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

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

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

length intdata 中要处理的新数据的字节数。

取消

public void cancel ()

请求取消测试运行。

flush

public void flush ()

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

handleTestRunFailed

public void handleTestRunFailed (String errorMsg)

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

参数
errorMsg String

isCancelled

public boolean isCancelled ()

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

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