REST Resource: projects.testMatrices

资源:TestMatrix

TestMatrix 可捕获有关测试的所有详细信息。它包含环境配置、测试规范、测试作业以及总体状态和结果。

JSON 表示法
{
  "testMatrixId": string,
  "projectId": string,
  "clientInfo": {
    object (ClientInfo)
  },
  "testSpecification": {
    object (TestSpecification)
  },
  "environmentMatrix": {
    object (EnvironmentMatrix)
  },
  "testExecutions": [
    {
      object (TestExecution)
    }
  ],
  "resultStorage": {
    object (ResultStorage)
  },
  "state": enum (TestState),
  "timestamp": string,
  "invalidMatrixDetails": enum (InvalidMatrixDetails),
  "extendedInvalidMatrixDetails": [
    {
      object (MatrixErrorDetail)
    }
  ],
  "flakyTestAttempts": integer,
  "outcomeSummary": enum (OutcomeSummary),
  "failFast": boolean
}
字段
testMatrixId

string

仅限输出。由服务设置的唯一 ID。

projectId

string

测试矩阵所属的 Cloud 项目。

clientInfo

object (ClientInfo)

对测试进行调用的客户端的相关信息。

testSpecification

object (TestSpecification)

必需。如何运行测试。

environmentMatrix

object (EnvironmentMatrix)

必需。执行测试的设备。

testExecutions[]

object (TestExecution)

仅限输出。服务为此矩阵创建的测试作业列表。

resultStorage

object (ResultStorage)

必需。写入矩阵结果的位置。

state

enum (TestState)

仅限输出。指示测试矩阵的当前进度。

timestamp

string (Timestamp format)

仅限输出。此测试矩阵最初创建的时间。

时间戳采用 RFC3339 世界协调时间(UTC,即“祖鲁时”)格式,精确到纳秒,最多九个小数位。示例:"2014-10-02T15:01:23Z""2014-10-02T15:01:23.045123456Z"

invalidMatrixDetails

enum (InvalidMatrixDetails)

仅限输出。描述矩阵被视为无效的原因。仅适用于处于 INVALID 状态的矩阵。

extendedInvalidMatrixDetails[]

object (MatrixErrorDetail)

仅限输出。有关矩阵被视为无效原因的详细信息。如果可以安全地执行多项检查,系统会报告这些检查,但不应对此列表的长度做任何假设。

flakyTestAttempts

integer

当 TestExecution 的一个或多个测试用例因任何原因而失败时,应重新尝试运行该 TestExecution 的次数。允许的重新运行次数上限为 10 次。

默认值为 0,表示不会重新运行。

outcomeSummary

enum (OutcomeSummary)

仅限输出。测试的总体结果。仅在测试矩阵状态为“FINISHED”时设置。

failFast

boolean

如果为 true,则系统最多只会尝试运行一次矩阵中的每个执行/分片。不稳定的测试尝试不会受到影响。

通常,如果检测到潜在的基础架构问题,系统会尝试 2 次或更多次。

此功能适用于对延迟时间敏感的工作负载。快速失败矩阵的执行失败发生率可能会显著增加,因此支持也更为有限。

ClientInfo

对测试进行调用的客户端的相关信息。

JSON 表示法
{
  "name": string,
  "clientInfoDetails": [
    {
      object (ClientInfoDetail)
    }
  ]
}
字段
name

string

必需。客户名称,例如 gcloud。

clientInfoDetails[]

object (ClientInfoDetail)

客户端相关详细信息的列表。

ClientInfoDetail

对测试进行调用的客户端的相关详细信息的键值对。例如:{'Version', '1.0'}, {'Release Track', 'BETA'}。

JSON 表示法
{
  "key": string,
  "value": string
}
字段
key

string

必需。客户端详细信息的键。

value

string

必需。客户端详细信息的值。

TestSpecification

有关如何运行测试的说明。

JSON 表示法
{
  "testTimeout": string,
  "disableVideoRecording": boolean,
  "disablePerformanceMetrics": boolean,

  // Union field setup can be only one of the following:
  "testSetup": {
    object (TestSetup)
  },
  "iosTestSetup": {
    object (IosTestSetup)
  }
  // End of list of possible types for union field setup.

  // Union field test can be only one of the following:
  "androidInstrumentationTest": {
    object (AndroidInstrumentationTest)
  },
  "androidRoboTest": {
    object (AndroidRoboTest)
  },
  "androidTestLoop": {
    object (AndroidTestLoop)
  },
  "iosXcTest": {
    object (IosXcTest)
  },
  "iosTestLoop": {
    object (IosTestLoop)
  },
  "iosRoboTest": {
    object (IosRoboTest)
  }
  // End of list of possible types for union field test.
}
字段
testTimeout

string (Duration format)

在自动取消测试作业之前允许其运行的最长时间。默认值为 5 分钟。

该时长以秒为单位,最多包含九个小数位,以“s”结尾。示例:"3.5s"

disableVideoRecording

boolean

停用录像功能。可以缩短测试延迟时间。

disablePerformanceMetrics

boolean

停用效果指标记录功能。可以缩短测试延迟时间。

联合字段 setup。测试设置要求。setup 只能是下列其中一项:
testSetup

object (TestSetup)

针对 Android 的测试设置要求,例如引导脚本

iosTestSetup

object (IosTestSetup)

针对 iOS 的测试设置要求。

联合字段 test。必需。要运行的测试的类型。test 只能是下列其中一项:
androidInstrumentationTest

object (AndroidInstrumentationTest)

Android 插桩测试。

androidRoboTest

object (AndroidRoboTest)

Android Robo 测试。

androidTestLoop

object (AndroidTestLoop)

一个带有测试循环的 Android 应用。

iosXcTest

object (IosXcTest)

iOS XCTest(通过 .xctestrun 文件)。

iosTestLoop

object (IosTestLoop)

具有测试循环的 iOS 应用。

iosRoboTest

object (IosRoboTest)

iOS Robo 测试。

TestSetup

有关如何在运行测试之前设置 Android 设备的说明。

JSON 表示法
{
  "filesToPush": [
    {
      object (DeviceFile)
    }
  ],
  "directoriesToPull": [
    string
  ],
  "initialSetupApks": [
    {
      object (Apk)
    }
  ],
  "additionalApks": [
    {
      object (Apk)
    }
  ],
  "account": {
    object (Account)
  },
  "networkProfile": string,
  "environmentVariables": [
    {
      object (EnvironmentVariable)
    }
  ],
  "systrace": {
    object (SystraceSetup)
  },
  "dontAutograntPermissions": boolean
}
字段
filesToPush[]

object (DeviceFile)

在开始测试之前推送到设备的文件列表。

directoriesToPull[]

string

列出设备上要在测试结束时上传到 GCS 的目录;它们必须是 /sdcard、/storage 或 /data/local/tmp 下的绝对路径。路径名称只能包含字符 a-z A-Z 0-9 _ - 。+ 和 /

注意:系统将提供路径 /sdcard 和 /data 并将其视为隐式路径替代项。例如,如果特定设备上的 /sdcard 未映射到外部存储空间,则系统会将其替换为该设备的外部存储路径前缀。

initialSetupApks[]

object (Apk)

可选。在安装被测应用之前要安装的初始设置 APK。目前的数量上限为 100。

additionalApks[]

object (Apk)

除了直接测试的 APK 之外,还要安装的 APK。这些将在被测应用后安装。目前的数量上限为 100。

account

object (Account)

在测试期间,设备会使用此账号登录。

networkProfile

string

用于运行测试的网络流量配置文件。在调用 TestEnvironmentDiscoveryService.GetTestEnvironmentCatalog 时使用 NETWORK_CONFIGURATION 环境类型查询可用的网络配置文件。

environmentVariables[]

object (EnvironmentVariable)

要为测试设置的环境变量(仅适用于插桩测试)。

systrace
(deprecated)

object (SystraceSetup)

运行的 Systrace 配置。已废弃:Systrace 使用的是已于 2020 年 1 月 1 日弃用的 Python 2。Cloud Testing API 不再支持 Systrace,并且结果中不会提供 Systrace 文件。

dontAutograntPermissions

boolean

是否禁止在安装应用时授予所有运行时权限

DeviceFile

单个设备文件说明。

JSON 表示法
{

  // Union field device_file can be only one of the following:
  "obbFile": {
    object (ObbFile)
  },
  "regularFile": {
    object (RegularFile)
  }
  // End of list of possible types for union field device_file.
}
字段
联合字段 device_file。必需。device_file 只能是下列其中一项:
obbFile

object (ObbFile)

对不透明二进制 blob 文件的引用。

regularFile

object (RegularFile)

对常规文件的引用。

ObbFile

在测试开始之前要安装到设备上的不透明二进制 blob 文件。

JSON 表示法
{
  "obbFileName": string,
  "obb": {
    object (FileReference)
  }
}
字段
obbFileName

string

必需。OBB 文件名必须符合 Android 指定的格式,例如 [main|patch].0300110.com.example.android.obb,此文件将安装到设备上的 <shared-storage>/Android/obb/<package-name>/ 中。

obb

object (FileReference)

必需。要安装到设备上的不透明二进制 Blob (OBB) 文件。

FileReference

对文件的引用,用于用户输入。

JSON 表示法
{

  // Union field file can be only one of the following:
  "gcsPath": string
  // End of list of possible types for union field file.
}
字段
联合字段 file。必需。文件引用。file 只能是下列其中一项:
gcsPath

string

指向 Google Cloud Storage 中文件的路径。示例:gs://build-app-1414623860166/app%40debug-unaligned.apk 这些路径预计将进行网址编码(百分号编码)

RegularFile

在测试开始之前要安装到设备上的文件或目录。

JSON 表示法
{
  "content": {
    object (FileReference)
  },
  "devicePath": string
}
字段
content

object (FileReference)

必需。源文件。

devicePath

string

必需。将内容放在设备上的位置。必须是列入许可名单的绝对路径。如果文件存在,则予以替换。以下设备端目录及其所有子目录已列入许可名单:

${EXTERNAL_STORAGE}、/sdcard 或 /storage

${ANDROID_DATA}/local/tmp 或 /data/local/tmp

如果指定的路径在这些目录树之外,则属无效。

系统将提供路径 /sdcard 和 /data 并将其视为隐式路径替代项。例如,如果特定设备上的 /sdcard 未映射到外部存储空间,则系统会将其替换为该设备的外部存储路径前缀并将文件复制到外部存储路径。

强烈建议您在应用和测试代码中使用 Environment API,从而以可移植方式访问设备上的文件。

APK

要安装的 Android 软件包文件。

JSON 表示法
{
  "location": {
    object (FileReference)
  },
  "packageName": string
}
字段
location

object (FileReference)

在测试开始之前要在设备上安装的 APK 的路径。

packageName

string

要安装的 APK 的 Java 软件包。可通过检查应用的清单来确定值。

账号

标识账号以及如何登录账号。

JSON 表示法
{

  // Union field account_type can be only one of the following:
  "googleAuto": {
    object (GoogleAuto)
  }
  // End of list of possible types for union field account_type.
}
字段
联合字段 account_type。必需。账号类型,基于账号用途(例如 Google)和登录机制(例如用户名和密码)。account_type 只能是下列其中一项:
googleAuto

object (GoogleAuto)

自动登录 Google 账号。

GoogleAuto

此类型没有字段。

启用 Google 账号自动登录功能。如果已设置,该服务会在执行测试之前自动生成 Google 测试账号并将其添加到设备。请注意,测试账号可能会重复使用。当设备上存在账号时,很多应用才能提供完整的功能集。使用这些生成的账号登录设备可以测试更多功能。

EnvironmentVariable

作为环境变量传递给测试的键值对。

JSON 表示法
{
  "key": string,
  "value": string
}
字段
key

string

环境变量的键。

value

string

环境变量的值。

SystraceSetup

JSON 表示法
{
  "durationSeconds": integer
}
字段
durationSeconds
(deprecated)

integer

Systrace 时长(以秒为单位)。应介于 1 到 30 秒之间。0 表示停用 Systrace。

IosTestSetup

有关如何在运行测试之前设置 iOS 设备的说明。

JSON 表示法
{
  "networkProfile": string,
  "additionalIpas": [
    {
      object (FileReference)
    }
  ],
  "pushFiles": [
    {
      object (IosDeviceFile)
    }
  ],
  "pullDirectories": [
    {
      object (IosDeviceFile)
    }
  ]
}
字段
networkProfile

string

用于运行测试的网络流量配置文件。在调用 TestEnvironmentDiscoveryService.GetTestEnvironmentCatalog 时使用 NETWORK_CONFIGURATION 环境类型查询可用的网络配置文件。

additionalIpas[]

object (FileReference)

除了直接测试的 iOS 应用之外,还可以安装这些应用。

pushFiles[]

object (IosDeviceFile)

在开始测试之前推送到设备的文件列表。

pullDirectories[]

object (IosDeviceFile)

设备上的目录列表,用于在测试结束时上传到 Cloud Storage。

应将目录放在共享目录(例如 /private/var/mobile/Media)中,或位于应用文件系统内的可访问目录(例如 /Documents)中,方法是指定软件包 ID。

IosDeviceFile

在测试开始之前要安装到设备上的文件或目录。

JSON 表示法
{
  "content": {
    object (FileReference)
  },
  "bundleId": string,
  "devicePath": string
}
字段
content

object (FileReference)

源文件

bundleId

string

此文件所在应用的软件包 ID。

iOS 应用会对自己的文件系统进行沙盒化处理,因此应用文件必须指定设备上安装的是哪个应用。

devicePath

string

文件在设备上沙盒化文件系统中的位置

AndroidInstrumentationTest

Android 应用测试,可以独立于 Android 组件的正常生命周期控制该组件。Android Instrumentation 测试可在虚拟或真机 AndroidDevice 上的同一进程内运行应用 APK 和测试 APK。测试运行程序类还会指定测试运行程序类,例如 com.google.GoogleTestRunner,该类可能会因所选的特定插桩框架而异。

如需详细了解 Android 测试的类型,请参阅 https://developer.android.com/training/testing/fundamentals

JSON 表示法
{
  "testApk": {
    object (FileReference)
  },
  "appPackageId": string,
  "testPackageId": string,
  "testRunnerClass": string,
  "testTargets": [
    string
  ],
  "orchestratorOption": enum (OrchestratorOption),
  "shardingOption": {
    object (ShardingOption)
  },

  // Union field app_under_test can be only one of the following:
  "appApk": {
    object (FileReference)
  },
  "appBundle": {
    object (AppBundle)
  }
  // End of list of possible types for union field app_under_test.
}
字段
testApk

object (FileReference)

必需。包含要执行的测试代码的 APK。

appPackageId

string

正在测试的应用的 Java 软件包。您可以通过检查应用的清单来确定默认值。

testPackageId

string

要执行的测试的 Java 软件包。您可以通过检查应用的清单来确定默认值。

testRunnerClass

string

InstrumentationTestRunner 类。您可以通过检查应用的清单来确定默认值。

testTargets[]

string

每个目标都必须使用软件包名称或类名称进行完全限定,并采用以下格式之一:

  • “package packageName”
  • “class packageName.class_name”
  • “class packageName.class_name#methodName”

如果为空,系统将运行模块中的所有目标。

orchestratorOption

enum (OrchestratorOption)

此选项可确定是否使用 Android Test Orchestrator 在每个测试各自的 Instrumentation 调用中运行该测试。** Orchestrator 仅与 AndroidJUnitRunner 版本 1.1 或更高版本兼容!** Orchestrator 具有以下优势:

  • 无共享状态
  • 崩溃被隔离
  • 为每个测试确定日志范围

如需详细了解 Android Test Orchestrator,请参阅 https://developer.android.com/training/testing/junit-runner.html#using-android-test-orchestrator

如果未设置,则将在不使用 Orchestrator 的情况下运行测试。

shardingOption

object (ShardingOption)

在多个分片中并行运行测试的选项。

联合字段 app_under_test。必需。app_under_test 只能是下列其中一项:
appApk

object (FileReference)

正在测试的应用的 APK。

appBundle

object (AppBundle)

正在测试的应用的多 APK App Bundle。

AppBundle

Android App Bundle 文件格式,包含 BundleConfig.pb 文件、基本模块目录,以及零个或零个以上的动态功能模块目录。

有关如何构建 App Bundle 的指导,请参阅 https://developer.android.com/guide/app-bundle/build

JSON 表示法
{

  // Union field bundle can be only one of the following:
  "bundleLocation": {
    object (FileReference)
  }
  // End of list of possible types for union field bundle.
}
字段
联合字段 bundle。必需。软件包位置信息。bundle 只能是下列其中一项:
bundleLocation

object (FileReference)

表示受测 app bundle 的 .aab 文件。

OrchestratorOption

指定如何执行测试。

枚举
ORCHESTRATOR_OPTION_UNSPECIFIED 默认值:由服务器来选择模式。目前,此选项暗示将在不使用 Orchestrator 的情况下运行测试。将来,所有 Instrumentation 测试都将使用 Orchestrator 运行。由于 Orchestrator 提供诸多好处,因此强烈建议使用。
USE_ORCHESTRATOR 使用 Orchestrator 运行测试。** 仅与 AndroidJUnitRunner 版本 1.1 或更高版本兼容!** 推荐。
DO_NOT_USE_ORCHESTRATOR 在不使用 Orchestrator 的情况下运行测试。

分片选项

用于启用分片的选项。

JSON 表示法
{

  // Union field option can be only one of the following:
  "uniformSharding": {
    object (UniformSharding)
  },
  "manualSharding": {
    object (ManualSharding)
  },
  "smartSharding": {
    object (SmartSharding)
  }
  // End of list of possible types for union field option.
}
字段

联合字段 option

option 只能是下列其中一项:

uniformSharding

object (UniformSharding)

根据分片总数,将测试用例均匀分片。

manualSharding

object (ManualSharding)

将测试用例分成指定的软件包、类和/或方法组。

smartSharding

object (SmartSharding)

分片测试基于之前的测试用例计时记录。

统一分片

根据分片总数,将测试用例均匀分片。

对于插桩测试,此值将转换为“-e numShard”和“-e shardIndex”AndroidJUnitRunner 参数。启用统一分片后,通过 environmentVariables 指定这两个分片参数中的任何一个都是无效的。

根据 AndroidJUnitRunner 使用的分片机制,无法保证测试用例会在所有分片中均匀分布。

JSON 表示法
{
  "numShards": integer
}
字段
numShards

integer

必需。要创建的分片总数。此值必须始终为正数,且不得大于测试用例的总数。当您选择一个或多个物理设备时,分片数必须 <= 50。当您选择一个或多个 ARM 虚拟设备时,它必须小于等于 200。如果仅选择 x86 虚拟设备,则它必须小于等于 500。

手动分片

将测试用例分成指定的软件包、类和/或方法组。

启用手动分片后,通过环境变量或在 InstrumentationTest 中指定测试目标无效。

JSON 表示法
{
  "testTargetsForShard": [
    {
      object (TestTargetsForShard)
    }
  ]
}
字段
testTargetsForShard[]

object (TestTargetsForShard)

必需。要针对每个手动创建分片运行的软件包、类和/或测试方法组。如果此字段存在,您必须指定至少一个分片。当您选择一个或多个实体设备时,重复的 testTargetsForShard 数量必须 <= 50。当您选择一个或多个 ARM 虚拟设备时,它必须小于等于 200。如果仅选择 x86 虚拟设备,则它必须小于等于 500。

TestTargetsForShard

分片的测试目标。

JSON 表示法
{
  "testTargets": [
    string
  ]
}
字段
testTargets[]

string

要针对每个分片运行的软件包、类和/或测试方法组。目标需要以 AndroidJUnitRunner 参数格式指定。例如,“package com.my.packages”“class com.my.package.MyClass”。

testTarget 的数量必须大于 0。

智能分片

分片测试基于之前的测试用例计时记录。

JSON 表示法
{
  "targetedShardDuration": string
}
字段
targetedShardDuration

string (Duration format)

分片中的测试应花费的时间。

默认值:300 秒(5 分钟)。所允许的最短时间间隔:120 秒(2 分钟)。

系统会根据时间动态设置分片数,最高分片数量上限(如下所述)。为了保证每个分片至少有一个测试用例,分片数不会超过测试用例数。在以下情况下,将超出分片时长:

  • 已达到分片数量上限,经过计算的剩余测试时间可以分配给分片。
  • 任何单个测试的预计时长会超过目标分片时长。

由于智能分片使用测试用例历史记录和默认时长,因此无法保证分片时长。查找测试用例计时记录的规则如下:

  • 如果服务在过去 30 天内处理过一个测试用例,则将使用最近一次成功测试用例的记录。
  • 对于新的测试用例,系统将使用其他已知测试用例的平均时长。
  • 如果没有可用的先前测试用例计时记录,则默认测试用例时长为 15 秒。

由于实际分片时长可以超过目标分片时长,因此我们建议您将目标值设置为至少比允许的测试超时上限小 5 分钟(真机设备为 45 分钟,虚拟设备为 60 分钟),或者使用您设置的自定义测试超时值。此方法可避免在所有测试完成之前取消分片。

请注意,分片数量上限有限制。当您选择一个或多个物理设备时,分片数必须 <= 50。当您选择一个或多个 ARM 虚拟设备时,它必须小于等于 200。如果仅选择 x86 虚拟设备,则它必须小于等于 500。为了保证每个分片至少有一个测试用例,分片数不会超过测试用例数。创建的每个分片都会计入每日测试配额。

该时长以秒为单位,最多包含九个小数位,以“s”结尾。示例:"3.5s"

AndroidRoboTest

Android 应用测试,该测试可探索应用在虚拟或真机 Android 设备上的运行情况,并在此过程中发现引起问题的原因和崩溃情况。

JSON 表示法
{
  "appPackageId": string,
  "appInitialActivity": string,
  "maxDepth": integer,
  "maxSteps": integer,
  "roboDirectives": [
    {
      object (RoboDirective)
    }
  ],
  "roboMode": enum (RoboMode),
  "roboScript": {
    object (FileReference)
  },
  "startingIntents": [
    {
      object (RoboStartingIntent)
    }
  ],

  // Union field app_under_test can be only one of the following:
  "appApk": {
    object (FileReference)
  },
  "appBundle": {
    object (AppBundle)
  }
  // End of list of possible types for union field app_under_test.
}
字段
appPackageId

string

正在测试的应用的 Java 软件包。您可以通过检查应用的清单来确定默认值。

appInitialActivity

string

应该用于启动应用的初始 activity。

maxDepth
(deprecated)

integer

Robo 可探索的遍历堆栈的最大深度。此深度至少需要为 2,Robo 才能探索第一个 Activity 之外的应用内容。默认值为 50。

maxSteps
(deprecated)

integer

Robo 可以执行的步骤数上限。默认值为没有限制。

roboDirectives[]

object (RoboDirective)

Robo 在抓取过程中应应用的一组指令。这允许用户自定义抓取。例如,可以提供测试账号的用户名和密码。

roboMode

enum (RoboMode)

Robo 应以何种模式运行。大多数客户端都应允许服务器自动填充此字段。

roboScript

object (FileReference)

一个 JSON 文件,包含 Robo 作为抓取序言时应执行的一系列操作。

startingIntents[]

object (RoboStartingIntent)

用于启动应用以进行抓取的 intent。如果未提供,则启动主启动器 Activity。如果已提供,则仅启动所提供的那些 Activity(必须明确提供主启动器 Activity)。

联合字段 app_under_test。必需。app_under_test 只能是下列其中一项:
appApk

object (FileReference)

正在测试的应用的 APK。

appBundle

object (AppBundle)

正在测试的应用的多 APK App Bundle。

RoboDirective

指示 Robo 在抓取期间遇到特定界面元素时与其交互。目前,Robo 可以执行文本输入或元素点击。

JSON 表示法
{
  "resourceName": string,
  "inputText": string,
  "actionType": enum (RoboActionType)
}
字段
resourceName

string

必需。目标界面元素的 Android 资源名称。例如,在 Java 中:R.string.foo;在 xml 中:@string/foo。只需要“foo”部分。参考文档:https://developer.android.com/guide/topics/resources/accessing-resources.html

inputText

string

指示 Robo 设置的文本。如果保留为空,则该指令将视为对与 resourceName 匹配的元素执行 CLICK 操作。

actionType

enum (RoboActionType)

必需。Robo 应对指定元素执行的操作类型。

RoboActionType

Robo 可对界面元素执行的操作。

枚举
ACTION_TYPE_UNSPECIFIED 请勿使用。仅适用于 Proto 版本控制。
SINGLE_CLICK 指示 Robo 点击指定的元素。如果指定的元素不可点击,则不执行任何操作。
ENTER_TEXT 指示 Robo 在指定的元素上输入文本。如果指定的元素未启用或不允许输入文本,则不执行任何操作。
IGNORE 指示 Robo 忽略与特定元素的交互。

机器人模式

Robo 应以何种模式运行。

枚举
ROBO_MODE_UNSPECIFIED 这意味着服务器应选择模式。推荐。
ROBO_VERSION_1 在 UIAutomator-only 模式下运行 Robo,无需为应用重新签名
ROBO_VERSION_2 在带有 UIAutomator 回退的标准 Espresso 中运行 Robo

RoboStartingIntent

用于指定要抓取的启动 Activity 的消息。

JSON 表示法
{
  "timeout": string,

  // Union field starting_intent can be only one of the following:
  "launcherActivity": {
    object (LauncherActivityIntent)
  },
  "startActivity": {
    object (StartActivityIntent)
  },
  "noActivity": {
    object (NoActivityIntent)
  }
  // End of list of possible types for union field starting_intent.
}
字段
timeout

string (Duration format)

每个意图的超时(以秒为单位)。

该时长以秒为单位,最多包含九个小数位,以“s”结尾。示例:"3.5s"

联合字段 starting_intent。必需。用于启动 activity 的 intent 详细信息。starting_intent 只能是下列其中一项:
launcherActivity

object (LauncherActivityIntent)

用于启动主启动器 activity 的 intent。

startActivity

object (StartActivityIntent)

用于启动包含特定详细信息的 activity 的 intent。

noActivity

object (NoActivityIntent)

跳过启动 activity

LauncherActivityIntent

此类型没有字段。

指定用于启动主启动器 Activity 的 Intent。

StartActivityIntent

由操作、URI 和类别指定的启动 Intent。

JSON 表示法
{
  "action": string,
  "uri": string,
  "categories": [
    string
  ]
}
字段
action

string

操作名称。对于 START_ACTIVITY 为必需。

uri

string

操作的 URI。

categories[]

string

要在 intent 上设置的 intent 类别。

NoActivityIntent

此类型没有字段。

跳过启动 activity

AndroidTestLoop

对带有测试循环的 Android 应用进行的测试。系统将隐式添加 Intent <intent-name>,因为目前此 API 的唯一用户是 Games。

JSON 表示法
{
  "appPackageId": string,
  "scenarios": [
    integer
  ],
  "scenarioLabels": [
    string
  ],

  // Union field app_under_test can be only one of the following:
  "appApk": {
    object (FileReference)
  },
  "appBundle": {
    object (AppBundle)
  }
  // End of list of possible types for union field app_under_test.
}
字段
appPackageId

string

正在测试的应用的 Java 软件包。您可以通过检查应用的清单来确定默认值。

scenarios[]

integer

应在测试期间运行的场景列表。默认值为从应用的清单派生的所有测试循环。

scenarioLabels[]

string

应在测试期间运行的场景标签的列表。场景标签应映射到应用清单中定义的标签。例如,player_experience 和 com.google.test.loops.player_experience 会将清单中标记为 com.google.test.loops.player_experience 名称的所有循环都添加到执行中。还可以在场景字段中指定场景。

联合字段 app_under_test。必需。要测试的 Android 软件包。app_under_test 只能是下列其中一项:
appApk

object (FileReference)

正在测试的应用的 APK。

appBundle

object (AppBundle)

正在测试的应用的多 APK App Bundle。

IosXcTest

对使用 XCTest 框架的 iOS 应用的测试。Xcode 支持“构建以用于测试”(Build for testing) 选项,该选项可生成包含测试规范(参数、测试方法等)的 .xctestrun 文件。此测试类型接受包含 .xctestrun 文件的 zip 文件以及 Build/Products 目录(包含运行测试所需的所有二进制文件)中的相应内容。

JSON 表示法
{
  "testsZip": {
    object (FileReference)
  },
  "xctestrun": {
    object (FileReference)
  },
  "xcodeVersion": string,
  "appBundleId": string,
  "testSpecialEntitlements": boolean
}
字段
testsZip

object (FileReference)

必需。此 .zip 文件包含 .xctestrun 文件和 DerivedData/Build/Products 目录的内容。如果指定了 xctestrun 字段,则会忽略此 zip 文件中的 .xctestrun 文件。

xctestrun

object (FileReference)

一个 .xctestrun 文件,该文件将替换测试 zip 中的 .xctestrun 文件。由于 .xctestrun 文件包含环境变量以及要运行和/或忽略的测试方法,因此这对于分片测试很有用。默认值取自测试 zip 文件。

xcodeVersion

string

应该用于测试的 Xcode 版本。请使用 TestEnvironmentDiscoveryService 获取支持的选项。默认为 Firebase 测试实验室支持的最新 Xcode 版本。

appBundleId

string

仅限输出。正在测试的应用的软件包 ID。

testSpecialEntitlements

boolean

用于测试特殊应用授权的选项。设置此属性会使用明确的应用标识符为具有特殊权限的应用重新签名。目前支持测试 aps 环境权限。

IosTestLoop

对实现一个或多个游戏循环场景的 iOS 应用的测试。此测试类型接受归档应用(.ipa 文件)以及将按顺序对该应用执行的整数场景列表。

JSON 表示法
{
  "appIpa": {
    object (FileReference)
  },
  "scenarios": [
    integer
  ],
  "appBundleId": string
}
字段
appIpa

object (FileReference)

必需。要测试的应用的 .ipa。

scenarios[]

integer

应在测试期间运行的场景列表。如果未指定,则默认为单个场景 0。

appBundleId

string

仅限输出。正在测试的应用的软件包 ID。

IosRobo 测试

用于探索 iOS 设备上的 iOS 应用的测试。

JSON 表示法
{
  "appIpa": {
    object (FileReference)
  },
  "appBundleId": string,
  "roboScript": {
    object (FileReference)
  }
}
字段
appIpa

object (FileReference)

必需。应使用存储在此文件中的 IPA 运行测试。

appBundleId

string

被测应用的软件包 ID。这是通过检查应用的“Info.plist”文件。

roboScript

object (FileReference)

用于自定义抓取的可选 Roboscript。如需详细了解 Roboscript,请参阅 https://firebase.google.com/docs/test-lab/android/robo-scripts-reference

EnvironmentMatrix

要在其中执行测试的环境矩阵。

JSON 表示法
{

  // Union field environment_matrix can be only one of the following:
  "androidMatrix": {
    object (AndroidMatrix)
  },
  "androidDeviceList": {
    object (AndroidDeviceList)
  },
  "iosDeviceList": {
    object (IosDeviceList)
  }
  // End of list of possible types for union field environment_matrix.
}
字段
联合字段 environment_matrix。必需。环境矩阵。environment_matrix 只能是下列其中一项:
androidMatrix

object (AndroidMatrix)

Android 设备矩阵。

androidDeviceList

object (AndroidDeviceList)

Android 设备列表;该测试将仅在指定设备上运行。

iosDeviceList

object (IosDeviceList)

iOS 设备列表。

AndroidMatrix

一组 Android 设备配置排列由给定轴的叉积定义。在内部,给定的 AndroidMatrix 将展开为一组 AndroidDevice。

系统仅会实例化受支持的排列。无效的排列(例如,不兼容的型号/版本)将被忽略。

JSON 表示法
{
  "androidModelIds": [
    string
  ],
  "androidVersionIds": [
    string
  ],
  "locales": [
    string
  ],
  "orientations": [
    string
  ]
}
字段
androidModelIds[]

string

必需。要使用的 Android 设备集的 ID。请使用 TestEnvironmentDiscoveryService 获取支持的选项。

androidVersionIds[]

string

必需。要使用的 Android 操作系统版本集的 ID。请使用 TestEnvironmentDiscoveryService 获取支持的选项。

locales[]

string

必需。测试设备将为测试启用的语言区域集。请使用 TestEnvironmentDiscoveryService 获取支持的选项。

orientations[]

string

必需。要用于测试的方向集。请使用 TestEnvironmentDiscoveryService 获取支持的选项。

AndroidDeviceList

要在其中执行测试的 Android 设备配置列表。

JSON 表示法
{
  "androidDevices": [
    {
      object (AndroidDevice)
    }
  ]
}
字段
androidDevices[]

object (AndroidDevice)

必需。Android 设备列表。

IosDeviceList

要在其中执行测试的 iOS 设备配置列表。

JSON 表示法
{
  "iosDevices": [
    {
      object (IosDevice)
    }
  ]
}
字段
iosDevices[]

object (IosDevice)

必需。iOS 设备列表。

IosDevice

单个 iOS 设备。

JSON 表示法
{
  "iosModelId": string,
  "iosVersionId": string,
  "locale": string,
  "orientation": string
}
字段
iosModelId

string

必需。要使用的 iOS 设备的 ID。请使用 TestEnvironmentDiscoveryService 获取支持的选项。

iosVersionId

string

必需。要使用的 iOS 主要软件版本的 ID。请使用 TestEnvironmentDiscoveryService 获取支持的选项。

locale

string

必需。测试设备用于测试的语言区域。请使用 TestEnvironmentDiscoveryService 获取支持的选项。

orientation

string

必需。测试期间设备的屏幕方向。请使用 TestEnvironmentDiscoveryService 获取支持的选项。

TestExecution

在单个环境中执行的单个测试。

JSON 表示法
{
  "id": string,
  "matrixId": string,
  "projectId": string,
  "testSpecification": {
    object (TestSpecification)
  },
  "shard": {
    object (Shard)
  },
  "environment": {
    object (Environment)
  },
  "state": enum (TestState),
  "toolResultsStep": {
    object (ToolResultsStep)
  },
  "timestamp": string,
  "testDetails": {
    object (TestDetails)
  }
}
字段
id

string

仅限输出。由服务设置的唯一 ID。

matrixId

string

仅限输出。所属 TestMatrix 的 ID。

projectId

string

仅限输出。测试作业所属的 Cloud 项目。

testSpecification

object (TestSpecification)

仅限输出。如何运行测试。

shard

object (Shard)

仅限输出。有关分片的详细信息。

environment

object (Environment)

仅限输出。如何配置主机。

state

enum (TestState)

仅限输出。指示测试作业的当前进度(例如,FINISHED)。

toolResultsStep

object (ToolResultsStep)

仅限输出。写入此作业结果的位置。

timestamp

string (Timestamp format)

仅限输出。此测试作业最初创建的时间。

时间戳采用 RFC3339 世界协调时间(UTC,即“祖鲁时”)格式,精确到纳秒,最多九个小数位。示例:"2014-10-02T15:01:23Z""2014-10-02T15:01:23.045123456Z"

testDetails

object (TestDetails)

仅限输出。有关正在运行的测试的其他详细信息。

分片

仅限输出。有关分片的详细信息。

JSON 表示法
{
  "shardIndex": integer,
  "numShards": integer,
  "testTargetsForShard": {
    object (TestTargetsForShard)
  },
  "estimatedShardDuration": string
}
字段
shardIndex

integer

仅限输出。所有分片中分片的索引。

numShards

integer

仅限输出。分片总数。

testTargetsForShard

object (TestTargetsForShard)

仅限输出。测试每个分片的目标。仅适用于手动分片。

estimatedShardDuration

string (Duration format)

仅限输出。基于以前的测试用例计时记录(如果有)的估算分片时长。

该时长以秒为单位,最多包含九个小数位,以“s”结尾。示例:"3.5s"

环境

运行测试时所处的环境。

JSON 表示法
{

  // Union field environment can be only one of the following:
  "androidDevice": {
    object (AndroidDevice)
  },
  "iosDevice": {
    object (IosDevice)
  }
  // End of list of possible types for union field environment.
}
字段
联合字段 environment。必需。环境。environment 只能是下列其中一项:
androidDevice

object (AndroidDevice)

必须与 Android 测试搭配使用的 Android 设备。

iosDevice

object (IosDevice)

必须与 iOS 测试搭配使用的 iOS 设备。

TestState

测试作业或矩阵的状态(即进度)。

枚举
TEST_STATE_UNSPECIFIED 请勿使用。仅适用于 Proto 版本控制。
VALIDATING 正在验证作业或矩阵。
PENDING 作业或矩阵正在等待资源变为可用。
RUNNING

作业目前正在处理中。

只有作业可处于此状态。

FINISHED

作业或矩阵已正常终止。

对于矩阵,这意味着矩阵层级的处理已正常完成,但单个作业可能处于 ERROR 状态。

ERROR 作业或矩阵已停止,因为它遇到基础架构故障。
UNSUPPORTED_ENVIRONMENT

作业未运行,因为它对应于不受支持的环境。

只有作业可处于此状态。

INCOMPATIBLE_ENVIRONMENT

作业未运行,因为提供的输入与请求的环境不兼容。

例如:请求的 AndroidVersion 低于 APK 的 minSdkVersion

只有作业可处于此状态。

INCOMPATIBLE_ARCHITECTURE

作业未运行,因为提供的输入与请求的架构不兼容。

例如:请求的设备不支持运行所提供的 APK 中的原生代码

只有作业可处于此状态。

CANCELLED

用户取消了作业。

只有作业可处于此状态。

INVALID

作业或矩阵未运行,因为提供的输入无效。

例如:输入文件不是预期类型、格式错误/已损坏或被标记为恶意软件

ToolResultsStep

表示工具结果步骤资源。

这包含 TestExecution 的结果。

JSON 表示法
{
  "projectId": string,
  "historyId": string,
  "executionId": string,
  "stepId": string
}
字段
projectId

string

仅限输出。工具结果步骤所属的 Cloud 项目。

historyId

string

仅限输出。工具结果历史记录 ID。

executionId

string

仅限输出。工具结果执行 ID。

stepId

string

仅限输出。工具结果步骤 ID。

TestDetails

有关所运行测试的进度的更多详细信息。

JSON 表示法
{
  "progressMessages": [
    string
  ],
  "errorMessage": string
}
字段
progressMessages[]

string

仅限输出。有关测试进度的人类可读详细说明。例如:“预配设备”、“开始测试”。

在作业期间,新数据可能会附加到 progressMessages 的末尾。

errorMessage

string

仅限输出。如果 TestState 是 ERROR,则此字符串将包含有关错误的人类可读详细信息。

ResultStorage

存储测试运行结果的位置。

JSON 表示法
{
  "googleCloudStorage": {
    object (GoogleCloudStorage)
  },
  "toolResultsHistory": {
    object (ToolResultsHistory)
  },
  "toolResultsExecution": {
    object (ToolResultsExecution)
  },
  "resultsUrl": string
}
字段
googleCloudStorage

object (GoogleCloudStorage)

必填。

toolResultsHistory

object (ToolResultsHistory)

包含向其中写入结果的工具结果作业的工具结果历史记录。

如果未提供,服务将选择适当的值。

toolResultsExecution

object (ToolResultsExecution)

仅限输出。向其中写入结果的工具结果作业。

resultsUrl

string

仅限输出。指向 Firebase 网页控制台中结果的网址。

GoogleCloudStorage

Google Cloud Storage (GCS) 中的存储位置。

JSON 表示法
{
  "gcsPath": string
}
字段
gcsPath

string

必需。GCS 中最终包含此测试结果的目录的路径。发出请求的用户必须对所提供的路径中的存储分区具有写入权限。

ToolResultsHistory

表示工具结果历史记录资源。

JSON 表示法
{
  "projectId": string,
  "historyId": string
}
字段
projectId

string

必需。工具结果历史记录所属的 Cloud 项目。

historyId

string

必需。工具结果历史记录 ID。

ToolResultsExecution

表示工具结果作业资源。

这包含 TestMatrix 的结果。

JSON 表示法
{
  "projectId": string,
  "historyId": string,
  "executionId": string
}
字段
projectId

string

仅限输出。工具结果作业所属的 Cloud 项目。

historyId

string

仅限输出。工具结果历史记录 ID。

executionId

string

仅限输出。工具结果执行 ID。

InvalidMatrixDetails

矩阵被视为 INVALID 的详细原因。

枚举
INVALID_MATRIX_DETAILS_UNSPECIFIED 请勿使用。仅适用于 Proto 版本控制。
DETAILS_UNAVAILABLE 矩阵为 INVALID,但没有更多详细信息。
MALFORMED_APK 输入应用 APK 无法解析。
MALFORMED_TEST_APK 输入测试 APK 无法解析。
NO_MANIFEST 找不到 AndroidManifest.xml。
NO_PACKAGE_NAME APK 清单未声明软件包名称。
INVALID_PACKAGE_NAME APK 应用 ID(又称为软件包名称)无效。另请参阅 https://developer.android.com/studio/build/application-id
TEST_SAME_AS_APP 测试软件包和应用软件包相同。
NO_INSTRUMENTATION 测试 APK 未声明 Instrumentation。
NO_SIGNATURE 输入应用 APK 没有签名。
INSTRUMENTATION_ORCHESTRATOR_INCOMPATIBLE 用户(或测试 APK 的清单文件中)指定的测试运行程序类与 Android Test Orchestrator 不兼容。Orchestrator 仅与 AndroidJUnitRunner 版本 1.1 或更高版本兼容。可以使用 DO_NOT_USE_ORCHESTRATOR OrchestratorOption 停用 Orchestrator。
NO_TEST_RUNNER_CLASS

测试 APK 不包含用户指定的测试运行程序类或在清单文件中指定的测试运行程序类。这可能是由以下原因之一导致的:

  • 用户提供的运行程序类名称不正确,或
  • 测试运行程序未内置于测试 APK 中(可能内置于应用 APK 中)。
NO_LAUNCHER_ACTIVITY 找不到主要启动器 Activity。
FORBIDDEN_PERMISSIONS 应用声明了一项或多项不允许使用的权限。
INVALID_ROBO_DIRECTIVES 提供的 roboDirectives 存在冲突。
INVALID_RESOURCE_NAME 提供的 robo 指令中至少有一个无效的资源名称
INVALID_DIRECTIVE_ACTION robo 指令中的操作定义无效(例如,点击或忽略操作包含输入文本字段)
TEST_LOOP_INTENT_FILTER_NOT_FOUND 没有测试循环 intent 过滤器,或者提供的过滤器格式不正确。
SCENARIO_LABEL_NOT_DECLARED 请求包含未在清单文件中声明的场景标签。
SCENARIO_LABEL_MALFORMED 解析标签的值时出错。
SCENARIO_NOT_DECLARED 请求包含未在清单文件中声明的场景编号。
DEVICE_ADMIN_RECEIVER 不允许使用设备管理员应用。
MALFORMED_XC_TEST_ZIP 压缩的 XCTest 格式不正确。zip 文件未包含 .xctestrun 文件和 DerivedData/Build/Products 目录中的内容。
BUILT_FOR_IOS_SIMULATOR 压缩的 XCTest 是针对 iOS 模拟器(而不是真机设备)构建的。
NO_TESTS_IN_XC_TEST_ZIP .xctestrun 文件未指定任何测试目标。
USE_DESTINATION_ARTIFACTS .xctestrun 文件中定义的一个或多个测试目标指定了“UseDestinationArtifacts”,而系统不允许使用此属性。
TEST_NOT_APP_HOSTED 在真机设备上运行的 XC 测试必须在 xctestrun 文件包含 "IsAppHostedTestBundle" == "true"。
PLIST_CANNOT_BE_PARSED 无法解析 XCTest zip 文件中的 Info.plist 文件。
TEST_ONLY_APK

APK 已标记为“testOnly”。此项已弃用且目前未使用。

MALFORMED_IPA 无法解析输入 IPA。
MISSING_URL_SCHEME 应用未注册游戏循环网址架构。
MALFORMED_APP_BUNDLE 无法处理 iOS 应用软件包 (.app)。
NO_CODE_APK APK 不含任何代码。另请参阅 https://developer.android.com/guide/topics/manifest/application-element.html#code
INVALID_INPUT_APK 提供的输入 APK 路径格式错误,APK 文件不存在,或者用户无权访问 APK 文件。
INVALID_APK_PREVIEW_SDK APK 是为不受支持的预览版 SDK 而构建的
MATRIX_TOO_LARGE 已展开矩阵,包含的执行作业过多。
TEST_QUOTA_EXCEEDED 测试配额不足,无法运行此矩阵中的执行作业。
SERVICE_NOT_ACTIVATED 所需的云服务 API 未激活。请参阅:https://firebase.google.com/docs/test-lab/android/continuous#requirements
UNKNOWN_PERMISSION_ERROR 运行此测试时出现未知的权限问题。

矩阵错误详情

描述矩阵的单个错误或问题。

JSON 表示法
{
  "reason": string,
  "message": string
}
字段
reason

string

仅限输出。错误的原因。这是 UPPER_SNAKE_CASE 中的常量值,用于标识错误的原因。

message

string

仅限输出。有关 TestMatrix 中错误的人类可读消息。展开 reason 字段,其中包含更多详细信息和可用于解决问题的选项。

结果摘要

已完成的测试矩阵的结果摘要。

枚举
OUTCOME_SUMMARY_UNSPECIFIED 请勿使用。仅适用于 Proto 版本控制。
SUCCESS

测试矩阵运行成功,例如:

  • 所有测试用例都已通过。
  • Robo 未检测到被测应用发生崩溃。
FAILURE

运行失败,例如:

  • 一个或多个测试用例失败。
  • 测试超时。
  • 被测应用崩溃。
INCONCLUSIVE 发生意外错误。测试应仍被视为不成功,但这可能是暂时性问题,重新运行测试可能会成功。
SKIPPED

已跳过所有测试,例如:

  • 所有设备配置都不兼容。

方法

cancel

取消测试矩阵中未完成的测试作业。

create

根据给定的规范创建并运行测试矩阵。

get

在创建测试矩阵和执行后检查其状态。