- 资源:Step
<ph type="x-smartling-placeholder">
- </ph>
- JSON 表示法
- TestExecutionStep
<ph type="x-smartling-placeholder">
- </ph>
- JSON 表示法
- 工具执行
<ph type="x-smartling-placeholder">
- </ph>
- JSON 表示法
- ToolExitCode
<ph type="x-smartling-placeholder">
- </ph>
- JSON 表示法
- TestIssue
<ph type="x-smartling-placeholder">
- </ph>
- JSON 表示法
- 不限
<ph type="x-smartling-placeholder">
- </ph>
- JSON 表示法
- 严重级别
- 类型
- 类别
- TestTiming
<ph type="x-smartling-placeholder">
- </ph>
- JSON 表示法
- ToolExecutionStep
<ph type="x-smartling-placeholder">
- </ph>
- JSON 表示法
- 多步
<ph type="x-smartling-placeholder">
- </ph>
- JSON 表示法
- PrimaryStep
<ph type="x-smartling-placeholder">
- </ph>
- JSON 表示法
- 个人结果
<ph type="x-smartling-placeholder">
- </ph>
- JSON 表示法
- 方法
资源:步骤
Step 表示作为 Execution 的一部分执行的单个操作。步骤可以用来表示工具的执行(例如,测试运行程序的执行或编译器的执行)。
步骤可以重叠(例如,如果某些操作是并行完成的,则两个步骤的开始时间可能相同)。
举个例子,假设我们的持续构建正在为每次迭代执行测试运行程序。工作流如下所示:- 用户创建了 ID 为 1 的执行 - 用户为执行 1 创建了 ID 为 100 的 TestExecutionStep - 用户更新 ID 为 100 的 TestExecutionStep 以添加原始 XML 日志 + 服务解析 xml 日志并返回带有更新的 TestResult 的 TestExecutionStep。- 用户将 ID 为 100 的 TestExecutionStep 的状态更新为“COMPLETE”
可以更新步骤,直到状态设置为 COMPLETE,此时它将不可变。
JSON 表示法 |
---|
{ "stepId": string, "creationTime": { object ( |
字段 | |
---|---|
stepId |
此步骤的执行中的唯一标识符。 如果调用方设置或覆盖了此字段,则返回 INVALID_ARGUMENT。
|
creationTime |
步骤的创建时间。
|
completionTime |
步骤状态设为完成的时间。 当状态转换为 COMPLETE 时,系统会自动设置此值。
|
name |
显示在界面中的直观易懂的简短名称。最多 100 个字符。例如:干净 build 创建新步骤时,如果与现有步骤共享其名称和 dimensionValue,系统将返回 PRECONDITION_FAILED。如果两个步骤表示类似的操作,但具有不同的维度值,则它们的名称应相同。例如,如果在两个不同的平台上运行同一组测试,则两个步骤应具有相同的名称。
|
description |
此工具的说明,例如:mvn clean package -DskipTests=true
|
state |
初始状态为 IN_PROGRESS。仅有的合法状态转换为 * IN_PROGRESS ->完成 如果请求无效转换,则返回 PRECONDITION_FAILED。 可以创建状态设置为 COMPLETE 的步骤。状态只能设置为 COMPLETE 一次。如果多次将状态设置为 COMPLETE,则返回 PRECONDITION_FAILED。
|
outcome |
结果的分类,例如划分为“SUCCESS”或“FAILURE”
|
hasImages |
此步骤的任何输出是否是可通过 metadata.list 提取缩略图的图片。
|
labels |
用户提供的与步骤关联的任意键值对。 用户负责管理密钥命名空间,以防密钥发生意外冲突。 如果标签数超过 100,或者任何键或值的长度超过 100 个字符,则返回 INVALID_ARGUMENT。
包含一系列 |
dimensionValue |
如果包含此步骤的执行已设置任何维度定义,则此字段会允许子级指定维度的值。 键必须与执行的 dimension_definition 完全匹配。 例如,如果执行作业有 如果某个步骤不参与矩阵的某个维度,则该维度的值应为空字符串。例如,如果其中一个测试由不支持重试的运行程序执行,则该步骤可能具有 如果该步骤不参与矩阵的任何维度,则可能无法设置 DimensionsValue。 如果执行的维度定义中不存在任何键,则返回 PRECONDITION_FAILED。 如果此执行中的另一步骤已具有相同的名称和维度值,但其他数据字段有所不同(例如步骤字段不同),则系统将返回 PRECONDITION_FAILED。 如果已设置 dimensionValue,并且执行中有任何未指定为键之一的 dimension_definition,则会返回 PRECONDITION_FAILED。
包含一系列 |
runDuration |
此步骤运行所需的时间。 如果未设置,则设为当步骤设为 COMPLETE 状态时 createdTime 和 completionTime 之间的差值。在某些情况下,可以单独设置该值:例如,如果步骤已创建,但其代表的操作在执行前排队等候了几分钟,则不宜将排队时间加入其 runDuration 中。 如果尝试对已设置此字段的步骤设置 runDuration,将返回 PRECONDITION_FAILED。
|
deviceUsageDuration |
使用多少设备资源执行测试。 这是用于结算的设备用量,与 runDuration 不同,例如,对于基础架构故障,您无需为设备用量付费。 如果尝试在已设置此字段的步骤中设置 device_usage,系统将返回 PRECONDITION_FAILED。
|
multiStep |
详细说明使用一组相同的配置运行多个步骤的情况。这些详细信息可用于确定此步骤所属的群组。它还标识了组“主要步骤”以便将所有群组成员编入索引
|
联合字段
|
|
testExecutionStep |
测试运行程序的执行。 |
toolExecutionStep |
工具的执行(用于我们未明确支持的步骤)。 |
TestExecutionStep
表示运行测试的步骤。
它接受 ant-junit xml 文件,这些文件将由服务解析为结构化测试结果。为了附加更多文件,系统会更新 XML 文件路径,但无法删除这些路径。
用户还可以使用 test_result 字段手动添加测试结果。
JSON 表示法 |
---|
{ "testSuiteOverviews": [ { object ( |
字段 | |
---|---|
testSuiteOverviews[] |
测试套件概览内容列表。这可以通过服务器从 xUnit XML 日志中解析,也可以由用户直接上传。只有在测试套件完全解析或上传后,才能调用此引用。 每个步骤允许的最大测试套件概览数为 1,000。
|
toolExecution |
表示测试运行程序的执行。 此工具的退出代码将用于确定测试是否通过。
|
testIssues[] |
测试执行期间发现的问题。 例如,如果被测移动应用在测试期间崩溃,系统会在此处记录错误消息和堆栈轨迹内容,以帮助进行调试。
|
testTiming |
测试作业的时间细分。
|
ToolExecution
执行任意工具。它可能是测试运行程序或复制工件或部署代码的工具。
JSON 表示法 |
---|
{ "commandLineArguments": [ string ], "toolLogs": [ { object ( |
字段 | |
---|---|
commandLineArguments[] |
包含程序名称的完整令牌化命令行(相当于 C 程序中的 argv)。
|
toolLogs[] |
对任何纯文本日志的引用会输出工具执行的内容。 您可以在工具退出之前设置此字段,以便在工具运行时访问日志的实时视图。 每个步骤允许的最大工具日志数为 1000。
|
exitCode |
工具执行退出代码。此字段将在工具退出后设置。
|
toolOutputs[] |
对工具执行输出的任何格式的不透明文件的引用。 每个步骤允许的最大工具输出数为 1000。
|
工具退出代码
从工具执行中退出代码。
JSON 表示法 |
---|
{ "number": integer } |
字段 | |
---|---|
number |
工具执行退出代码。值 0 表示执行成功。
|
TestIssue
在测试执行期间检测到的问题。
JSON 表示法 |
---|
{ "errorMessage": string, "stackTrace": { object ( |
字段 | |
---|---|
errorMessage |
用于描述问题的简短人类可读消息。必填。 |
stackTrace |
已废弃,取而代之的是特定警告中的堆栈轨迹字段。 |
warning |
包含问题更多详情的警告消息。应该是来自 com.google.devtools.toolresults.v1.warnings 的消息 |
severity |
问题的严重程度。必填。 |
type |
问题类型。必填。 |
category |
问题的类别。必填。 |
不限
Any
包含任意序列化协议缓冲区消息,以及一个描述序列化消息类型的网址。
Protobuf 库支持以实用函数或其他生成的任何类型方法的形式打包/解压缩任何值。
示例 1:用 C++ 打包和解压缩消息。
Foo foo = ...;
Any any;
any.PackFrom(foo);
...
if (any.UnpackTo(&foo)) {
...
}
示例 2:在 Java 中打包和解压缩消息。
Foo foo = ...;
Any any = Any.pack(foo);
...
if (any.is(Foo.class)) {
foo = any.unpack(Foo.class);
}
示例 3:在 Python 中打包和解压缩消息。
foo = Foo(...)
any = Any()
any.Pack(foo)
...
if any.Is(Foo.DESCRIPTOR):
any.Unpack(foo)
...
示例 4:在 Go 中打包和解压缩消息
foo := &pb.Foo{...}
any, err := ptypes.MarshalAny(foo)
...
foo := &pb.Foo{}
if err := ptypes.UnmarshalAny(any, foo); err != nil {
...
}
protobuf 库提供的打包方法默认使用“type.googleapis.com/full.type.name”作为类型网址,而解压缩方法仅使用最后一个“/”后面的完全限定类型名称例如“foo.bar.com/x/y.z”将生成的类型名称为“y.z”。
JSON
Any
值的 JSON 表示法使用反序列化嵌入式消息的常规表示法,并带有一个包含网址类型的额外字段 @type
。示例:
package google.profile;
message Person {
string first_name = 1;
string last_name = 2;
}
{
"@type": "type.googleapis.com/google.profile.Person",
"firstName": <string>,
"lastName": <string>
}
如果嵌入的消息类型已知且具有自定义 JSON 表示法,则该表示法将嵌入,并添加一个字段 value
,除了 @type
字段之外,该字段还包含自定义 JSON。示例(对于消息 google.protobuf.Duration
):
{
"@type": "type.googleapis.com/google.protobuf.Duration",
"value": "1.212s"
}
JSON 表示法 |
---|
{ "typeUrl": string, "value": string } |
字段 | |
---|---|
typeUrl |
唯一标识序列化协议缓冲区消息类型的网址/资源名称。此字符串必须包含至少一个“/”字符。网址路径的最后一部分必须表示相应类型的完全限定名称(如 在实践中,团队通常会将预期在“Any”上下文中使用的所有类型预编译到二进制文件中。不过,对于使用
注意:官方 protobuf 版本中目前尚未提供此功能,此功能不用于以 type.googleapis.com 开头的类型网址。
|
value |
必须是上述指定类型的有效序列化协议缓冲区。 使用 base64 编码的字符串。 |
严重程度
问题的严重程度。
枚举 | |
---|---|
unspecifiedSeverity |
默认的未指定严重性。请勿使用。仅用于版本控制。 |
info |
非严重问题,向用户提供有关测试运行的一些信息。 |
suggestion |
非严重问题,向用户提供一些有关如何改进测试体验的提示,例如建议使用游戏循环。 |
warning |
问题可能很严重。 |
severe |
严重问题。 |
类型
问题类型。
枚举 | |
---|---|
unspecifiedType |
默认的未指定类型。请勿使用。仅用于版本控制。 |
fatalException |
问题属于严重异常。 |
nativeCrash |
问题是原生代码崩溃。 |
anr |
问题是 ANR 崩溃。 |
unusedRoboDirective |
问题是未使用的 robo 指令。 |
compatibleWithOrchestrator |
问题是建议使用 Orchestrator。 |
launcherActivityNotFound |
查找启动器 activity 时出现问题 |
startActivityNotFound |
解析用户提供的用于启动 activity 的 intent 时出现问题 |
incompleteRoboScriptExecution |
Robo 脚本未完全执行。 |
completeRoboScriptExecution |
Robo 脚本已完全成功执行。 |
failedToInstall |
APK 安装失败。 |
availableDeepLinks |
被测应用具有深层链接,但未向 Robo 提供任何深层链接。 |
nonSdkApiUsageViolation |
应用访问了非 SDK API。 |
nonSdkApiUsageReport |
应用访问了非 SDK API(新的详细报告) |
encounteredNonAndroidUiWidgetScreen |
Robo 爬虫遇到了至少一个屏幕包含非 Android 界面 widget 的元素。 |
encounteredLoginScreen |
Robo 爬虫遇到了至少一个疑似登录屏幕。 |
performedGoogleLogin |
Robo 已使用 Google 账号登录。 |
iosException |
iOS 应用崩溃并出现异常。 |
iosCrash |
iOS 应用崩溃,无异常(例如已终止)。 |
performedMonkeyActions |
Robo 抓取涉及执行一些 Monkey 操作。 |
usedRoboDirective |
Robo 抓取使用了 Robo 指令。 |
usedRoboIgnoreDirective |
Robo 抓取使用 Robo 指令忽略了界面元素。 |
insufficientCoverage |
Robo 未抓取该应用的某些可能很重要的部分。 |
inAppPurchases |
Robo 抓取涉及一些应用内购买。 |
crashDialogError |
在测试执行期间检测到崩溃对话框 |
uiElementsTooDeep |
界面元素深度大于阈值 |
blankScreen |
在 Robo 抓取过程中发现空白屏幕 |
overlappingUiElements |
在 Robo 抓取中找到重叠的界面元素 |
unityException |
检测到未捕获的 Unity 异常(这些不会导致应用崩溃)。 |
deviceOutOfMemory |
检测到设备内存不足 |
logcatCollectionError |
收集 logcat 时检测到的问题 |
detectedAppSplashScreen |
Robo 检测到应用提供的启动画面(而非 Android OS 启动画面)。 |
assetIssue |
此测试中的素材资源存在问题。 |
类别
问题的类别。
枚举 | |
---|---|
unspecifiedCategory |
未指定的默认类别。请勿使用。仅用于版本控制。 |
common |
问题并非特定于特定的测试类型(例如原生代码崩溃)。 |
robo |
只有 Robo 运行才存在此问题。 |
TestTiming
测试时间明细以了解各个阶段。
JSON 表示法 |
---|
{
"testProcessDuration": {
object ( |
字段 | |
---|---|
testProcessDuration |
运行测试过程所需的时间。
|
ToolExecutionStep
用于我们未明确支持的二进制文件的通用工具步骤。例如:运行 cp 以将工件从一个位置复制到另一个位置。
JSON 表示法 |
---|
{
"toolExecution": {
object ( |
字段 | |
---|---|
toolExecution |
工具执行。
|
多步
详细说明使用一组相同的配置运行多个步骤的情况。
JSON 表示法 |
---|
{
"primaryStepId": string,
"multistepNumber": integer,
"primaryStep": {
object ( |
字段 | |
---|---|
primaryStepId |
主要(原始)步骤的步骤 ID,可能是此步骤。 |
multistepNumber |
为每个步骤指定的唯一整数。范围是 0(含 0)到总步数(不含)。主要步骤为 0。 |
primaryStep |
指明步骤是否为主要(原始)步骤。 |
主要步骤
存储作为一组运行的多个步骤的汇总测试状态以及每个步骤的结果。
JSON 表示法 |
---|
{ "rollUp": enum ( |
字段 | |
---|---|
rollUp |
作为一组使用相同配置运行的多个步骤的汇总测试状态。 |
individualOutcome[] |
步骤 ID 和每个步骤的结果。 |
个人成果
按组(与其他采用相同配置的其他步骤)一起运行的每个步骤的步骤 ID 和结果。
JSON 表示法 |
---|
{ "stepId": string, "outcomeSummary": enum ( |
字段 | |
---|---|
stepId |
|
outcomeSummary |
|
multistepNumber |
为每个步骤指定的唯一整数。范围是 0(含 0)到总步数(不含)。主要步骤为 0。 |
runDuration |
此步骤运行所需的时间。 |
方法 |
|
---|---|
|
列出给定步骤的无障碍功能集群 系统可能会返回以下任一规范错误代码:
|
|
创建步骤。 |
|
获取步骤。 |
|
检索 PerfMetricsSummary。 |
|
列出给定执行的步骤。 |
|
使用提供的部分实体更新现有步骤。 |
|
将 xml 文件发布到现有步骤。 |