docs: update generated docs (#981)

diff --git a/docs/dyn/testing_v1.projects.testMatrices.html b/docs/dyn/testing_v1.projects.testMatrices.html
index 2127e7c..521bcd5 100644
--- a/docs/dyn/testing_v1.projects.testMatrices.html
+++ b/docs/dyn/testing_v1.projects.testMatrices.html
@@ -134,246 +134,15 @@
 { # TestMatrix captures all details about a test. It contains the environment
       # configuration, test specification, test executions and overall state and
       # outcome.
+    "projectId": "A String", # The cloud project that owns the test matrix.
+    "timestamp": "A String", # Output only. The time this test matrix was initially created.
+    "flakyTestAttempts": 42, # The number of times a TestExecution should be re-attempted if one or more
+        # of its test cases fail for any reason.
+        # The maximum number of reruns allowed is 10.
+        # 
+        # Default is 0, which implies no reruns.
+    "testMatrixId": "A String", # Output only. Unique id set by the service.
     "testSpecification": { # A description of how to run the test. # Required. How to run the test.
-      "iosXcTest": { # A test of an iOS application that uses the XCTest framework. # An iOS XCTest, via an .xctestrun file.
-          # Xcode supports the option to "build for testing", which generates an
-          # .xctestrun file that contains a test specification (arguments, test methods,
-          # etc). This test type accepts a zip file containing the .xctestrun file and
-          # the corresponding contents of the Build/Products directory that contains all
-          # the binaries needed to run the tests.
-        "xcodeVersion": "A String", # The Xcode version that should be used for the test.
-            # Use the TestEnvironmentDiscoveryService to get supported options.
-            # Defaults to the latest Xcode version Firebase Test Lab supports.
-        "appBundleId": "A String", # Output only. The bundle id for the application under test.
-        "xctestrun": { # A reference to a file, used for user inputs. # An .xctestrun file that will override the .xctestrun file in the
-            # tests zip. Because the .xctestrun file contains environment variables along
-            # with test methods to run and/or ignore, this can be useful for sharding
-            # tests. Default is taken from the tests zip.
-            "gcsPath": "A String", # A path to a file in Google Cloud Storage.
-                # Example: gs://build-app-1414623860166/app-debug-unaligned.apk
-          },
-        "testSpecialEntitlements": True or False, # The option to test special app entitlements. Setting this would re-sign the
-            # app having special entitlements with an explicit application-identifier.
-            # Currently supports testing aps-environment entitlement.
-        "testsZip": { # A reference to a file, used for user inputs. # Required. The .zip containing the .xctestrun file and the contents of the
-            # DerivedData/Build/Products directory.
-            # The .xctestrun file in this zip is ignored if the xctestrun field is
-            # specified.
-            "gcsPath": "A String", # A path to a file in Google Cloud Storage.
-                # Example: gs://build-app-1414623860166/app-debug-unaligned.apk
-          },
-      },
-      "iosTestLoop": { # A test of an iOS application that implements one or more game loop scenarios. # An iOS application with a test loop.
-          # This test type accepts an archived application (.ipa file) and a list of
-          # integer scenarios that will be executed on the app sequentially.
-        "scenarios": [ # The list of scenarios that should be run during the test. Defaults to the
-            # single scenario 0 if unspecified.
-          42,
-        ],
-        "appBundleId": "A String", # Output only. The bundle id for the application under test.
-        "appIpa": { # A reference to a file, used for user inputs. # Required. The .ipa of the application to test.
-            "gcsPath": "A String", # A path to a file in Google Cloud Storage.
-                # Example: gs://build-app-1414623860166/app-debug-unaligned.apk
-          },
-      },
-      "testTimeout": "A String", # Max time a test execution is allowed to run before it is
-          # automatically cancelled.
-          # The default value is 5 min.
-      "iosTestSetup": { # A description of how to set up an iOS device prior to running the test. # Test setup requirements for iOS.
-        "networkProfile": "A String", # The network traffic profile used for running the test.
-            # Available network profiles can be queried by using the
-            # NETWORK_CONFIGURATION environment type when calling
-            # TestEnvironmentDiscoveryService.GetTestEnvironmentCatalog.
-      },
-      "androidTestLoop": { # A test of an Android Application with a Test Loop. # An Android Application with a Test Loop.
-          # The intent \<intent-name\> will be implicitly added, since Games is the only
-          # user of this api, for the time being.
-        "appApk": { # A reference to a file, used for user inputs. # The APK for the application under test.
-            "gcsPath": "A String", # A path to a file in Google Cloud Storage.
-                # Example: gs://build-app-1414623860166/app-debug-unaligned.apk
-          },
-        "appPackageId": "A String", # The java package for the application under test.
-            # The default is determined by examining the application's manifest.
-        "appBundle": { # An Android App Bundle file format, containing a BundleConfig.pb file, # A multi-apk app bundle for the application under test.
-            # a base module directory, zero or more dynamic feature module directories.
-            # <p>See https://developer.android.com/guide/app-bundle/build for guidance on
-            # building App Bundles.
-          "bundleLocation": { # A reference to a file, used for user inputs. # .aab file representing the app bundle under test.
-              "gcsPath": "A String", # A path to a file in Google Cloud Storage.
-                  # Example: gs://build-app-1414623860166/app-debug-unaligned.apk
-            },
-        },
-        "scenarios": [ # The list of scenarios that should be run during the test.
-            # The default is all test loops, derived from the application's
-            # manifest.
-          42,
-        ],
-        "scenarioLabels": [ # The list of scenario labels that should be run during the test.
-            # The scenario labels should map to labels defined in the application's
-            # manifest. For example, player_experience and
-            # com.google.test.loops.player_experience add all of the loops labeled in the
-            # manifest with the com.google.test.loops.player_experience name to the
-            # execution.
-            # Scenarios can also be specified in the scenarios field.
-          "A String",
-        ],
-      },
-      "testSetup": { # A description of how to set up the Android device prior to running the test. # Test setup requirements for Android e.g. files to install, bootstrap
-          # scripts.
-        "filesToPush": [ # List of files to push to the device before starting the test.
-          { # A single device file description.
-            "obbFile": { # An opaque binary blob file to install on the device before the test starts. # A reference to an opaque binary blob file.
-              "obbFileName": "A String", # Required. OBB file name which must conform to the format as specified by
-                  # Android
-                  # e.g. [main|patch].0300110.com.example.android.obb
-                  # which will be installed into
-                  #   \<shared-storage\>/Android/obb/\<package-name\>/
-                  # on the device.
-              "obb": { # A reference to a file, used for user inputs. # Required. Opaque Binary Blob (OBB) file(s) to install on the device.
-                  "gcsPath": "A String", # A path to a file in Google Cloud Storage.
-                      # Example: gs://build-app-1414623860166/app-debug-unaligned.apk
-                },
-            },
-            "regularFile": { # A file or directory to install on the device before the test starts. # A reference to a regular file.
-              "content": { # A reference to a file, used for user inputs. # Required. The source file.
-                  "gcsPath": "A String", # A path to a file in Google Cloud Storage.
-                      # Example: gs://build-app-1414623860166/app-debug-unaligned.apk
-                },
-              "devicePath": "A String", # Required. Where to put the content on the device. Must be an absolute,
-                  # whitelisted path. If the file exists, it will be replaced.
-                  # The following device-side directories and any of their subdirectories are
-                  # whitelisted:
-                  # <p>${EXTERNAL_STORAGE}, or /sdcard</p>
-                  # <p>${ANDROID_DATA}/local/tmp, or /data/local/tmp</p>
-                  # <p>Specifying a path outside of these directory trees is invalid.
-                  #
-                  # <p> The paths /sdcard and /data will be made available and treated as
-                  # implicit path substitutions. E.g. if /sdcard on a particular device does
-                  # not map to external storage, the system will replace it with the external
-                  # storage path prefix for that device and copy the file there.
-                  #
-                  # <p> It is strongly advised to use the <a href=
-                  # "http://developer.android.com/reference/android/os/Environment.html">
-                  # Environment API</a> in app and test code to access files on the device in a
-                  # portable way.
-            },
-          },
-        ],
-        "account": { # Identifies an account and how to log into it. # The device will be logged in on this account for the duration of the test.
-          "googleAuto": { # Enables automatic Google account login. # An automatic google login account.
-              # If set, the service automatically generates a Google test account and adds
-              # it to the device, before executing the test. Note that test accounts might be
-              # reused.
-              # Many applications show their full set of functionalities when an account is
-              # present on the device. Logging into the device with these generated accounts
-              # allows testing more functionalities.
-          },
-        },
-        "systrace": { # Systrace configuration for the run.
-            # If set a systrace will be taken, starting on test start and lasting for the
-            # configured duration. The systrace file thus obtained is put in the results
-            # bucket together with the other artifacts from the run.
-          "durationSeconds": 42, # Systrace duration in seconds.
-              # Should be between 1 and 30 seconds. 0 disables systrace.
-        },
-        "directoriesToPull": [ # List of directories on the device to upload to GCS at the end of the test;
-            # they must be absolute paths under /sdcard or /data/local/tmp.
-            # Path names are restricted to characters a-z A-Z 0-9 _ - . + and /
-            #
-            # Note: The paths /sdcard and /data will be made available and treated as
-            # implicit path substitutions. E.g. if /sdcard on a particular device does
-            # not map to external storage, the system will replace it with the external
-            # storage path prefix for that device.
-          "A String",
-        ],
-        "networkProfile": "A String", # The network traffic profile used for running the test.
-            # Available network profiles can be queried by using the
-            # NETWORK_CONFIGURATION environment type when calling
-            # TestEnvironmentDiscoveryService.GetTestEnvironmentCatalog.
-        "environmentVariables": [ # Environment variables to set for the test (only applicable for
-            # instrumentation tests).
-          { # A key-value pair passed as an environment variable to the test.
-            "value": "A String", # Value for the environment variable.
-            "key": "A String", # Key for the environment variable.
-          },
-        ],
-        "additionalApks": [ # APKs to install in addition to those being directly tested.
-            # Currently capped at 100.
-          { # An Android package file to install.
-            "location": { # A reference to a file, used for user inputs. # The path to an APK to be installed on the device before the test begins.
-                "gcsPath": "A String", # A path to a file in Google Cloud Storage.
-                    # Example: gs://build-app-1414623860166/app-debug-unaligned.apk
-              },
-            "packageName": "A String", # The java package for the APK to be installed.
-                # Value is determined by examining the application's manifest.
-          },
-        ],
-      },
-      "androidRoboTest": { # A test of an android application that explores the application on a virtual # An Android robo test.
-          # or physical Android Device, finding culprits and crashes as it goes.
-        "maxDepth": 42, # The max depth of the traversal stack Robo can explore. Needs to be at least
-            # 2 to make Robo explore the app beyond the first activity.
-            # Default is 50.
-        "appPackageId": "A String", # The java package for the application under test.
-            # The default value is determined by examining the application's manifest.
-        "appApk": { # A reference to a file, used for user inputs. # The APK for the application under test.
-            "gcsPath": "A String", # A path to a file in Google Cloud Storage.
-                # Example: gs://build-app-1414623860166/app-debug-unaligned.apk
-          },
-        "startingIntents": [ # The intents used to launch the app for the crawl.
-            # If none are provided, then the main launcher activity is launched.
-            # If some are provided, then only those provided are launched (the main
-            # launcher activity must be provided explicitly).
-          { # Message for specifying the start activities to crawl.
-            "timeout": "A String", # Timeout in seconds for each intent.
-            "startActivity": { # A starting intent specified by an action, uri, and categories. # An intent that starts an activity with specific details.
-              "uri": "A String", # URI for the action.
-              "categories": [ # Intent categories to set on the intent.
-                "A String",
-              ],
-              "action": "A String", # Action name.
-                  # Required for START_ACTIVITY.
-            },
-            "launcherActivity": { # Specifies an intent that starts the main launcher activity. # An intent that starts the main launcher activity.
-            },
-          },
-        ],
-        "maxSteps": 42, # The max number of steps Robo can execute.
-            # Default is no limit.
-        "appInitialActivity": "A String", # The initial activity that should be used to start the app.
-        "roboDirectives": [ # A set of directives Robo should apply during the crawl.
-            # This allows users to customize the crawl. For example, the username and
-            # password for a test account can be provided.
-          { # Directs Robo to interact with a specific UI element if it is encountered
-              # during the crawl. Currently, Robo can perform text entry or element click.
-            "actionType": "A String", # Required. The type of action that Robo should perform on the specified
-                # element.
-            "resourceName": "A String", # Required. The android resource name of the target UI element.
-                # For example,
-                #    in Java: R.string.foo
-                #    in xml: @string/foo
-                # Only the "foo" part is needed.
-                # Reference doc:
-                # https://developer.android.com/guide/topics/resources/accessing-resources.html
-            "inputText": "A String", # The text that Robo is directed to set. If left empty, the directive will be
-                # treated as a CLICK on the element matching the resource_name.
-          },
-        ],
-        "appBundle": { # An Android App Bundle file format, containing a BundleConfig.pb file, # A multi-apk app bundle for the application under test.
-            # a base module directory, zero or more dynamic feature module directories.
-            # <p>See https://developer.android.com/guide/app-bundle/build for guidance on
-            # building App Bundles.
-          "bundleLocation": { # A reference to a file, used for user inputs. # .aab file representing the app bundle under test.
-              "gcsPath": "A String", # A path to a file in Google Cloud Storage.
-                  # Example: gs://build-app-1414623860166/app-debug-unaligned.apk
-            },
-        },
-        "roboScript": { # A reference to a file, used for user inputs. # A JSON file with a sequence of actions Robo should perform as a prologue
-            # for the crawl.
-            "gcsPath": "A String", # A path to a file in Google Cloud Storage.
-                # Example: gs://build-app-1414623860166/app-debug-unaligned.apk
-          },
-      },
       "androidInstrumentationTest": { # A test of an Android application that can control an Android component # An Android instrumentation test.
           # independently of its normal lifecycle.
           # Android instrumentation tests run an application APK and test APK inside the
@@ -383,15 +152,11 @@
           #
           # See <http://developer.android.com/tools/testing/testing_android.html> for
           # more information on types of Android tests.
-        "appBundle": { # An Android App Bundle file format, containing a BundleConfig.pb file, # A multi-apk app bundle for the application under test.
-            # a base module directory, zero or more dynamic feature module directories.
-            # <p>See https://developer.android.com/guide/app-bundle/build for guidance on
-            # building App Bundles.
-          "bundleLocation": { # A reference to a file, used for user inputs. # .aab file representing the app bundle under test.
-              "gcsPath": "A String", # A path to a file in Google Cloud Storage.
-                  # Example: gs://build-app-1414623860166/app-debug-unaligned.apk
-            },
-        },
+        "testApk": { # A reference to a file, used for user inputs. # Required. The APK containing the test code to be executed.
+            "gcsPath": "A String", # A path to a file in Google Cloud Storage.
+                # Example: gs://build-app-1414623860166/app%40debug-unaligned.apk
+                # These paths are expected to be url encoded (percent encoding)
+          },
         "orchestratorOption": "A String", # The option of whether running each test within its own invocation of
             # instrumentation with Android Test Orchestrator or not.
             # ** Orchestrator is only compatible with AndroidJUnitRunner version 1.0 or
@@ -406,29 +171,9 @@
             # for more information about Android Test Orchestrator.
             #
             # If not set, the test will be run without the orchestrator.
-        "testTargets": [ # Each target must be fully qualified with the package name or class name,
-            # in one of these formats:
-            #  - "package package_name"
-            #  - "class package_name.class_name"
-            #  - "class package_name.class_name#method_name"
-            #
-            # If empty, all targets in the module will be run.
-          "A String",
-        ],
-        "testApk": { # A reference to a file, used for user inputs. # Required. The APK containing the test code to be executed.
-            "gcsPath": "A String", # A path to a file in Google Cloud Storage.
-                # Example: gs://build-app-1414623860166/app-debug-unaligned.apk
-          },
-        "testRunnerClass": "A String", # The InstrumentationTestRunner class.
+        "testPackageId": "A String", # The java package for the test to be executed.
             # The default value is determined by examining the application's manifest.
         "shardingOption": { # Options for enabling sharding. # The option to run tests in multiple shards in parallel.
-          "uniformSharding": { # Uniformly shards test cases given a total number of shards. # Uniformly shards test cases given a total number of shards.
-              #
-              # For Instrumentation test, it will be translated to “-e numShard” “-e
-              # shardIndex” AndroidJUnitRunner arguments. With uniform sharding enabled,
-              # specifying these sharding arguments via environment_variables is invalid.
-            "numShards": 42, # Required. Total number of shards. The number must be >= 1 and <= 50.
-          },
           "manualSharding": { # Shards test cases into the specified groups of packages, classes, and/or # Shards test cases into the specified groups of packages, classes, and/or
               # methods.
               # methods.
@@ -436,7 +181,9 @@
               # With manual sharding enabled, specifying test targets via
               # environment_variables or in InstrumentationTest is invalid.
             "testTargetsForShard": [ # Required. Group of packages, classes, and/or test methods to be run for
-                # each shard. The number of shard_test_targets must be >= 1 and <= 50.
+                # each shard. When any physical devices are selected,  the number of
+                # test_targets_for_shard must be >= 1 and <= 50. When no physical devices are
+                # selected, the number must be >= 1 and <= 250.
               { # Test targets for a shard.
                 "testTargets": [ # Group of packages, classes, and/or test methods to be run for each shard.
                     # The targets need to be specified in AndroidJUnitRunner argument format. For
@@ -448,313 +195,354 @@
               },
             ],
           },
+          "uniformSharding": { # Uniformly shards test cases given a total number of shards. # Uniformly shards test cases given a total number of shards.
+              #
+              # For Instrumentation test, it will be translated to “-e numShard” “-e
+              # shardIndex” AndroidJUnitRunner arguments. With uniform sharding enabled,
+              # specifying these sharding arguments via environment_variables is invalid.
+            "numShards": 42, # Required. Total number of shards. When any physical devices are selected,
+                # the number must be >= 1 and <= 50. When no physical devices are selected,
+                # the number must be >= 1 and <= 250.
+          },
         },
-        "testPackageId": "A String", # The java package for the test to be executed.
-            # The default value is determined by examining the application's manifest.
-        "appPackageId": "A String", # The java package for the application under test.
-            # The default value is determined by examining the application's manifest.
         "appApk": { # A reference to a file, used for user inputs. # The APK for the application under test.
             "gcsPath": "A String", # A path to a file in Google Cloud Storage.
-                # Example: gs://build-app-1414623860166/app-debug-unaligned.apk
+                # Example: gs://build-app-1414623860166/app%40debug-unaligned.apk
+                # These paths are expected to be url encoded (percent encoding)
           },
+        "appPackageId": "A String", # The java package for the application under test.
+            # The default value is determined by examining the application's manifest.
+        "testRunnerClass": "A String", # The InstrumentationTestRunner class.
+            # The default value is determined by examining the application's manifest.
+        "testTargets": [ # Each target must be fully qualified with the package name or class name,
+            # in one of these formats:
+            #  - "package package_name"
+            #  - "class package_name.class_name"
+            #  - "class package_name.class_name#method_name"
+            #
+            # If empty, all targets in the module will be run.
+          "A String",
+        ],
+        "appBundle": { # An Android App Bundle file format, containing a BundleConfig.pb file, # A multi-apk app bundle for the application under test.
+            # a base module directory, zero or more dynamic feature module directories.
+            # <p>See https://developer.android.com/guide/app-bundle/build for guidance on
+            # building App Bundles.
+          "bundleLocation": { # A reference to a file, used for user inputs. # .aab file representing the app bundle under test.
+              "gcsPath": "A String", # A path to a file in Google Cloud Storage.
+                  # Example: gs://build-app-1414623860166/app%40debug-unaligned.apk
+                  # These paths are expected to be url encoded (percent encoding)
+            },
+        },
+      },
+      "iosTestLoop": { # A test of an iOS application that implements one or more game loop scenarios. # An iOS application with a test loop.
+          # This test type accepts an archived application (.ipa file) and a list of
+          # integer scenarios that will be executed on the app sequentially.
+        "appBundleId": "A String", # Output only. The bundle id for the application under test.
+        "appIpa": { # A reference to a file, used for user inputs. # Required. The .ipa of the application to test.
+            "gcsPath": "A String", # A path to a file in Google Cloud Storage.
+                # Example: gs://build-app-1414623860166/app%40debug-unaligned.apk
+                # These paths are expected to be url encoded (percent encoding)
+          },
+        "scenarios": [ # The list of scenarios that should be run during the test. Defaults to the
+            # single scenario 0 if unspecified.
+          42,
+        ],
+      },
+      "androidRoboTest": { # A test of an android application that explores the application on a virtual # An Android robo test.
+          # or physical Android Device, finding culprits and crashes as it goes.
+        "appBundle": { # An Android App Bundle file format, containing a BundleConfig.pb file, # A multi-apk app bundle for the application under test.
+            # a base module directory, zero or more dynamic feature module directories.
+            # <p>See https://developer.android.com/guide/app-bundle/build for guidance on
+            # building App Bundles.
+          "bundleLocation": { # A reference to a file, used for user inputs. # .aab file representing the app bundle under test.
+              "gcsPath": "A String", # A path to a file in Google Cloud Storage.
+                  # Example: gs://build-app-1414623860166/app%40debug-unaligned.apk
+                  # These paths are expected to be url encoded (percent encoding)
+            },
+        },
+        "roboScript": { # A reference to a file, used for user inputs. # A JSON file with a sequence of actions Robo should perform as a prologue
+            # for the crawl.
+            "gcsPath": "A String", # A path to a file in Google Cloud Storage.
+                # Example: gs://build-app-1414623860166/app%40debug-unaligned.apk
+                # These paths are expected to be url encoded (percent encoding)
+          },
+        "maxDepth": 42, # The max depth of the traversal stack Robo can explore. Needs to be at least
+            # 2 to make Robo explore the app beyond the first activity.
+            # Default is 50.
+        "appInitialActivity": "A String", # The initial activity that should be used to start the app.
+        "roboDirectives": [ # A set of directives Robo should apply during the crawl.
+            # This allows users to customize the crawl. For example, the username and
+            # password for a test account can be provided.
+          { # Directs Robo to interact with a specific UI element if it is encountered
+              # during the crawl. Currently, Robo can perform text entry or element click.
+            "inputText": "A String", # The text that Robo is directed to set. If left empty, the directive will be
+                # treated as a CLICK on the element matching the resource_name.
+            "resourceName": "A String", # Required. The android resource name of the target UI element.
+                # For example,
+                #    in Java: R.string.foo
+                #    in xml: @string/foo
+                # Only the "foo" part is needed.
+                # Reference doc:
+                # https://developer.android.com/guide/topics/resources/accessing-resources.html
+            "actionType": "A String", # Required. The type of action that Robo should perform on the specified
+                # element.
+          },
+        ],
+        "appPackageId": "A String", # The java package for the application under test.
+            # The default value is determined by examining the application's manifest.
+        "startingIntents": [ # The intents used to launch the app for the crawl.
+            # If none are provided, then the main launcher activity is launched.
+            # If some are provided, then only those provided are launched (the main
+            # launcher activity must be provided explicitly).
+          { # Message for specifying the start activities to crawl.
+            "startActivity": { # A starting intent specified by an action, uri, and categories. # An intent that starts an activity with specific details.
+              "categories": [ # Intent categories to set on the intent.
+                "A String",
+              ],
+              "action": "A String", # Action name.
+                  # Required for START_ACTIVITY.
+              "uri": "A String", # URI for the action.
+            },
+            "launcherActivity": { # Specifies an intent that starts the main launcher activity. # An intent that starts the main launcher activity.
+            },
+            "timeout": "A String", # Timeout in seconds for each intent.
+          },
+        ],
+        "appApk": { # A reference to a file, used for user inputs. # The APK for the application under test.
+            "gcsPath": "A String", # A path to a file in Google Cloud Storage.
+                # Example: gs://build-app-1414623860166/app%40debug-unaligned.apk
+                # These paths are expected to be url encoded (percent encoding)
+          },
+        "maxSteps": 42, # The max number of steps Robo can execute.
+            # Default is no limit.
       },
       "disablePerformanceMetrics": True or False, # Disables performance metrics recording. May reduce test latency.
       "disableVideoRecording": True or False, # Disables video recording. May reduce test latency.
-    },
-    "projectId": "A String", # The cloud project that owns the test matrix.
-    "timestamp": "A String", # Output only. The time this test matrix was initially created.
-    "flakyTestAttempts": 42, # The number of times a TestExecution should be re-attempted if one or more
-        # of its test cases fail for any reason.
-        # The maximum number of reruns allowed is 10.
-        # 
-        # Default is 0, which implies no reruns.
-    "state": "A String", # Output only. Indicates the current progress of the test matrix.
-    "clientInfo": { # Information about the client which invoked the test. # Information about the client which invoked the test.
-      "clientInfoDetails": [ # The list of detailed information about client.
-        { # Key-value pair of detailed information about the client which invoked the
-            # test. Examples: {'Version', '1.0'}, {'Release Track', 'BETA'}.
-          "value": "A String", # Required. The value of detailed client information.
-          "key": "A String", # Required. The key of detailed client information.
+      "androidTestLoop": { # A test of an Android Application with a Test Loop. # An Android Application with a Test Loop.
+          # The intent \<intent-name\> will be implicitly added, since Games is the only
+          # user of this api, for the time being.
+        "scenarioLabels": [ # The list of scenario labels that should be run during the test.
+            # The scenario labels should map to labels defined in the application's
+            # manifest. For example, player_experience and
+            # com.google.test.loops.player_experience add all of the loops labeled in the
+            # manifest with the com.google.test.loops.player_experience name to the
+            # execution.
+            # Scenarios can also be specified in the scenarios field.
+          "A String",
+        ],
+        "appPackageId": "A String", # The java package for the application under test.
+            # The default is determined by examining the application's manifest.
+        "appApk": { # A reference to a file, used for user inputs. # The APK for the application under test.
+            "gcsPath": "A String", # A path to a file in Google Cloud Storage.
+                # Example: gs://build-app-1414623860166/app%40debug-unaligned.apk
+                # These paths are expected to be url encoded (percent encoding)
+          },
+        "appBundle": { # An Android App Bundle file format, containing a BundleConfig.pb file, # A multi-apk app bundle for the application under test.
+            # a base module directory, zero or more dynamic feature module directories.
+            # <p>See https://developer.android.com/guide/app-bundle/build for guidance on
+            # building App Bundles.
+          "bundleLocation": { # A reference to a file, used for user inputs. # .aab file representing the app bundle under test.
+              "gcsPath": "A String", # A path to a file in Google Cloud Storage.
+                  # Example: gs://build-app-1414623860166/app%40debug-unaligned.apk
+                  # These paths are expected to be url encoded (percent encoding)
+            },
         },
-      ],
-      "name": "A String", # Required. Client name, such as gcloud.
+        "scenarios": [ # The list of scenarios that should be run during the test.
+            # The default is all test loops, derived from the application's
+            # manifest.
+          42,
+        ],
+      },
+      "iosXcTest": { # A test of an iOS application that uses the XCTest framework. # An iOS XCTest, via an .xctestrun file.
+          # Xcode supports the option to "build for testing", which generates an
+          # .xctestrun file that contains a test specification (arguments, test methods,
+          # etc). This test type accepts a zip file containing the .xctestrun file and
+          # the corresponding contents of the Build/Products directory that contains all
+          # the binaries needed to run the tests.
+        "testsZip": { # A reference to a file, used for user inputs. # Required. The .zip containing the .xctestrun file and the contents of the
+            # DerivedData/Build/Products directory.
+            # The .xctestrun file in this zip is ignored if the xctestrun field is
+            # specified.
+            "gcsPath": "A String", # A path to a file in Google Cloud Storage.
+                # Example: gs://build-app-1414623860166/app%40debug-unaligned.apk
+                # These paths are expected to be url encoded (percent encoding)
+          },
+        "xcodeVersion": "A String", # The Xcode version that should be used for the test.
+            # Use the TestEnvironmentDiscoveryService to get supported options.
+            # Defaults to the latest Xcode version Firebase Test Lab supports.
+        "testSpecialEntitlements": True or False, # The option to test special app entitlements. Setting this would re-sign the
+            # app having special entitlements with an explicit application-identifier.
+            # Currently supports testing aps-environment entitlement.
+        "appBundleId": "A String", # Output only. The bundle id for the application under test.
+        "xctestrun": { # A reference to a file, used for user inputs. # An .xctestrun file that will override the .xctestrun file in the
+            # tests zip. Because the .xctestrun file contains environment variables along
+            # with test methods to run and/or ignore, this can be useful for sharding
+            # tests. Default is taken from the tests zip.
+            "gcsPath": "A String", # A path to a file in Google Cloud Storage.
+                # Example: gs://build-app-1414623860166/app%40debug-unaligned.apk
+                # These paths are expected to be url encoded (percent encoding)
+          },
+      },
+      "testSetup": { # A description of how to set up the Android device prior to running the test. # Test setup requirements for Android e.g. files to install, bootstrap
+          # scripts.
+        "environmentVariables": [ # Environment variables to set for the test (only applicable for
+            # instrumentation tests).
+          { # A key-value pair passed as an environment variable to the test.
+            "value": "A String", # Value for the environment variable.
+            "key": "A String", # Key for the environment variable.
+          },
+        ],
+        "dontAutograntPermissions": True or False, # Whether to prevent all runtime permissions to be granted at app install
+        "additionalApks": [ # APKs to install in addition to those being directly tested.
+            # Currently capped at 100.
+          { # An Android package file to install.
+            "location": { # A reference to a file, used for user inputs. # The path to an APK to be installed on the device before the test begins.
+                "gcsPath": "A String", # A path to a file in Google Cloud Storage.
+                    # Example: gs://build-app-1414623860166/app%40debug-unaligned.apk
+                    # These paths are expected to be url encoded (percent encoding)
+              },
+            "packageName": "A String", # The java package for the APK to be installed.
+                # Value is determined by examining the application's manifest.
+          },
+        ],
+        "systrace": { # Systrace configuration for the run.
+            # If set a systrace will be taken, starting on test start and lasting for the
+            # configured duration. The systrace file thus obtained is put in the results
+            # bucket together with the other artifacts from the run.
+          "durationSeconds": 42, # Systrace duration in seconds.
+              # Should be between 1 and 30 seconds. 0 disables systrace.
+        },
+        "filesToPush": [ # List of files to push to the device before starting the test.
+          { # A single device file description.
+            "regularFile": { # A file or directory to install on the device before the test starts. # A reference to a regular file.
+              "devicePath": "A String", # Required. Where to put the content on the device. Must be an absolute,
+                  # allowlisted path. If the file exists, it will be replaced.
+                  # The following device-side directories and any of their subdirectories are
+                  # allowlisted:
+                  # <p>${EXTERNAL_STORAGE}, /sdcard, or /storage</p>
+                  # <p>${ANDROID_DATA}/local/tmp, or /data/local/tmp</p>
+                  # <p>Specifying a path outside of these directory trees is invalid.
+                  #
+                  # <p> The paths /sdcard and /data will be made available and treated as
+                  # implicit path substitutions. E.g. if /sdcard on a particular device does
+                  # not map to external storage, the system will replace it with the external
+                  # storage path prefix for that device and copy the file there.
+                  #
+                  # <p> It is strongly advised to use the <a href=
+                  # "http://developer.android.com/reference/android/os/Environment.html">
+                  # Environment API</a> in app and test code to access files on the device in a
+                  # portable way.
+              "content": { # A reference to a file, used for user inputs. # Required. The source file.
+                  "gcsPath": "A String", # A path to a file in Google Cloud Storage.
+                      # Example: gs://build-app-1414623860166/app%40debug-unaligned.apk
+                      # These paths are expected to be url encoded (percent encoding)
+                },
+            },
+            "obbFile": { # An opaque binary blob file to install on the device before the test starts. # A reference to an opaque binary blob file.
+              "obb": { # A reference to a file, used for user inputs. # Required. Opaque Binary Blob (OBB) file(s) to install on the device.
+                  "gcsPath": "A String", # A path to a file in Google Cloud Storage.
+                      # Example: gs://build-app-1414623860166/app%40debug-unaligned.apk
+                      # These paths are expected to be url encoded (percent encoding)
+                },
+              "obbFileName": "A String", # Required. OBB file name which must conform to the format as specified by
+                  # Android
+                  # e.g. [main|patch].0300110.com.example.android.obb
+                  # which will be installed into
+                  #   \<shared-storage\>/Android/obb/\<package-name\>/
+                  # on the device.
+            },
+          },
+        ],
+        "networkProfile": "A String", # The network traffic profile used for running the test.
+            # Available network profiles can be queried by using the
+            # NETWORK_CONFIGURATION environment type when calling
+            # TestEnvironmentDiscoveryService.GetTestEnvironmentCatalog.
+        "directoriesToPull": [ # List of directories on the device to upload to GCS at the end of the test;
+            # they must be absolute paths under /sdcard, /storage or /data/local/tmp.
+            # Path names are restricted to characters a-z A-Z 0-9 _ - . + and /
+            #
+            # Note: The paths /sdcard and /data will be made available and treated as
+            # implicit path substitutions. E.g. if /sdcard on a particular device does
+            # not map to external storage, the system will replace it with the external
+            # storage path prefix for that device.
+          "A String",
+        ],
+        "account": { # Identifies an account and how to log into it. # The device will be logged in on this account for the duration of the test.
+          "googleAuto": { # Enables automatic Google account login. # An automatic google login account.
+              # If set, the service automatically generates a Google test account and adds
+              # it to the device, before executing the test. Note that test accounts might be
+              # reused.
+              # Many applications show their full set of functionalities when an account is
+              # present on the device. Logging into the device with these generated accounts
+              # allows testing more functionalities.
+          },
+        },
+      },
+      "testTimeout": "A String", # Max time a test execution is allowed to run before it is
+          # automatically cancelled.
+          # The default value is 5 min.
+      "iosTestSetup": { # A description of how to set up an iOS device prior to running the test. # Test setup requirements for iOS.
+        "networkProfile": "A String", # The network traffic profile used for running the test.
+            # Available network profiles can be queried by using the
+            # NETWORK_CONFIGURATION environment type when calling
+            # TestEnvironmentDiscoveryService.GetTestEnvironmentCatalog.
+      },
     },
+    "state": "A String", # Output only. Indicates the current progress of the test matrix.
     "testExecutions": [ # Output only. The list of test executions that the service creates for
         # this matrix.
       { # A single test executed in a single environment.
+        "shard": { # Output only. Details about the shard. # Output only. Details about the shard.
+          "shardIndex": 42, # Output only. The index of the shard among all the shards.
+          "testTargetsForShard": { # Test targets for a shard. # Output only. Test targets for each shard.
+            "testTargets": [ # Group of packages, classes, and/or test methods to be run for each shard.
+                # The targets need to be specified in AndroidJUnitRunner argument format. For
+                # example, “package com.my.packages” “class com.my.package.MyClass”.
+                #
+                # The number of shard_test_targets must be greater than 0.
+              "A String",
+            ],
+          },
+          "numShards": 42, # Output only. The total number of shards.
+        },
+        "timestamp": "A String", # Output only. The time this test execution was initially created.
+        "id": "A String", # Output only. Unique id set by the service.
+        "matrixId": "A String", # Output only. Id of the containing TestMatrix.
+        "projectId": "A String", # Output only. The cloud project that owns the test execution.
         "environment": { # The environment in which the test is run. # Output only. How the host machine(s) are configured.
           "iosDevice": { # A single iOS device. # An iOS device which must be used with an iOS test.
+            "iosModelId": "A String", # Required. The id of the iOS device to be used.
+                # Use the TestEnvironmentDiscoveryService to get supported options.
             "orientation": "A String", # Required. How the device is oriented during the test.
                 # Use the TestEnvironmentDiscoveryService to get supported options.
             "iosVersionId": "A String", # Required. The id of the iOS major software version to be used.
                 # Use the TestEnvironmentDiscoveryService to get supported options.
             "locale": "A String", # Required. The locale the test device used for testing.
                 # Use the TestEnvironmentDiscoveryService to get supported options.
-            "iosModelId": "A String", # Required. The id of the iOS device to be used.
-                # Use the TestEnvironmentDiscoveryService to get supported options.
           },
           "androidDevice": { # A single Android device. # An Android device which must be used with an Android test.
-            "orientation": "A String", # Required. How the device is oriented during the test.
-                # Use the TestEnvironmentDiscoveryService to get supported options.
-            "locale": "A String", # Required. The locale the test device used for testing.
-                # Use the TestEnvironmentDiscoveryService to get supported options.
             "androidModelId": "A String", # Required. The id of the Android device to be used.
                 # Use the TestEnvironmentDiscoveryService to get supported options.
             "androidVersionId": "A String", # Required. The id of the Android OS version to be used.
                 # Use the TestEnvironmentDiscoveryService to get supported options.
-          },
-        },
-        "state": "A String", # Output only. Indicates the current progress of the test execution
-            # (e.g., FINISHED).
-        "toolResultsStep": { # Represents a tool results step resource. # Output only. Where the results for this execution are written.
-            #
-            # This has the results of a TestExecution.
-          "projectId": "A String", # Output only. The cloud project that owns the tool results step.
-          "historyId": "A String", # Output only. A tool results history ID.
-          "executionId": "A String", # Output only. A tool results execution ID.
-          "stepId": "A String", # Output only. A tool results step ID.
-        },
-        "projectId": "A String", # Output only. The cloud project that owns the test execution.
-        "testSpecification": { # A description of how to run the test. # Output only. How to run the test.
-          "iosXcTest": { # A test of an iOS application that uses the XCTest framework. # An iOS XCTest, via an .xctestrun file.
-              # Xcode supports the option to "build for testing", which generates an
-              # .xctestrun file that contains a test specification (arguments, test methods,
-              # etc). This test type accepts a zip file containing the .xctestrun file and
-              # the corresponding contents of the Build/Products directory that contains all
-              # the binaries needed to run the tests.
-            "xcodeVersion": "A String", # The Xcode version that should be used for the test.
+            "locale": "A String", # Required. The locale the test device used for testing.
                 # Use the TestEnvironmentDiscoveryService to get supported options.
-                # Defaults to the latest Xcode version Firebase Test Lab supports.
-            "appBundleId": "A String", # Output only. The bundle id for the application under test.
-            "xctestrun": { # A reference to a file, used for user inputs. # An .xctestrun file that will override the .xctestrun file in the
-                # tests zip. Because the .xctestrun file contains environment variables along
-                # with test methods to run and/or ignore, this can be useful for sharding
-                # tests. Default is taken from the tests zip.
-                "gcsPath": "A String", # A path to a file in Google Cloud Storage.
-                    # Example: gs://build-app-1414623860166/app-debug-unaligned.apk
-              },
-            "testSpecialEntitlements": True or False, # The option to test special app entitlements. Setting this would re-sign the
-                # app having special entitlements with an explicit application-identifier.
-                # Currently supports testing aps-environment entitlement.
-            "testsZip": { # A reference to a file, used for user inputs. # Required. The .zip containing the .xctestrun file and the contents of the
-                # DerivedData/Build/Products directory.
-                # The .xctestrun file in this zip is ignored if the xctestrun field is
-                # specified.
-                "gcsPath": "A String", # A path to a file in Google Cloud Storage.
-                    # Example: gs://build-app-1414623860166/app-debug-unaligned.apk
-              },
+            "orientation": "A String", # Required. How the device is oriented during the test.
+                # Use the TestEnvironmentDiscoveryService to get supported options.
           },
-          "iosTestLoop": { # A test of an iOS application that implements one or more game loop scenarios. # An iOS application with a test loop.
-              # This test type accepts an archived application (.ipa file) and a list of
-              # integer scenarios that will be executed on the app sequentially.
-            "scenarios": [ # The list of scenarios that should be run during the test. Defaults to the
-                # single scenario 0 if unspecified.
-              42,
-            ],
-            "appBundleId": "A String", # Output only. The bundle id for the application under test.
-            "appIpa": { # A reference to a file, used for user inputs. # Required. The .ipa of the application to test.
-                "gcsPath": "A String", # A path to a file in Google Cloud Storage.
-                    # Example: gs://build-app-1414623860166/app-debug-unaligned.apk
-              },
-          },
-          "testTimeout": "A String", # Max time a test execution is allowed to run before it is
-              # automatically cancelled.
-              # The default value is 5 min.
-          "iosTestSetup": { # A description of how to set up an iOS device prior to running the test. # Test setup requirements for iOS.
-            "networkProfile": "A String", # The network traffic profile used for running the test.
-                # Available network profiles can be queried by using the
-                # NETWORK_CONFIGURATION environment type when calling
-                # TestEnvironmentDiscoveryService.GetTestEnvironmentCatalog.
-          },
-          "androidTestLoop": { # A test of an Android Application with a Test Loop. # An Android Application with a Test Loop.
-              # The intent \<intent-name\> will be implicitly added, since Games is the only
-              # user of this api, for the time being.
-            "appApk": { # A reference to a file, used for user inputs. # The APK for the application under test.
-                "gcsPath": "A String", # A path to a file in Google Cloud Storage.
-                    # Example: gs://build-app-1414623860166/app-debug-unaligned.apk
-              },
-            "appPackageId": "A String", # The java package for the application under test.
-                # The default is determined by examining the application's manifest.
-            "appBundle": { # An Android App Bundle file format, containing a BundleConfig.pb file, # A multi-apk app bundle for the application under test.
-                # a base module directory, zero or more dynamic feature module directories.
-                # <p>See https://developer.android.com/guide/app-bundle/build for guidance on
-                # building App Bundles.
-              "bundleLocation": { # A reference to a file, used for user inputs. # .aab file representing the app bundle under test.
-                  "gcsPath": "A String", # A path to a file in Google Cloud Storage.
-                      # Example: gs://build-app-1414623860166/app-debug-unaligned.apk
-                },
-            },
-            "scenarios": [ # The list of scenarios that should be run during the test.
-                # The default is all test loops, derived from the application's
-                # manifest.
-              42,
-            ],
-            "scenarioLabels": [ # The list of scenario labels that should be run during the test.
-                # The scenario labels should map to labels defined in the application's
-                # manifest. For example, player_experience and
-                # com.google.test.loops.player_experience add all of the loops labeled in the
-                # manifest with the com.google.test.loops.player_experience name to the
-                # execution.
-                # Scenarios can also be specified in the scenarios field.
-              "A String",
-            ],
-          },
-          "testSetup": { # A description of how to set up the Android device prior to running the test. # Test setup requirements for Android e.g. files to install, bootstrap
-              # scripts.
-            "filesToPush": [ # List of files to push to the device before starting the test.
-              { # A single device file description.
-                "obbFile": { # An opaque binary blob file to install on the device before the test starts. # A reference to an opaque binary blob file.
-                  "obbFileName": "A String", # Required. OBB file name which must conform to the format as specified by
-                      # Android
-                      # e.g. [main|patch].0300110.com.example.android.obb
-                      # which will be installed into
-                      #   \<shared-storage\>/Android/obb/\<package-name\>/
-                      # on the device.
-                  "obb": { # A reference to a file, used for user inputs. # Required. Opaque Binary Blob (OBB) file(s) to install on the device.
-                      "gcsPath": "A String", # A path to a file in Google Cloud Storage.
-                          # Example: gs://build-app-1414623860166/app-debug-unaligned.apk
-                    },
-                },
-                "regularFile": { # A file or directory to install on the device before the test starts. # A reference to a regular file.
-                  "content": { # A reference to a file, used for user inputs. # Required. The source file.
-                      "gcsPath": "A String", # A path to a file in Google Cloud Storage.
-                          # Example: gs://build-app-1414623860166/app-debug-unaligned.apk
-                    },
-                  "devicePath": "A String", # Required. Where to put the content on the device. Must be an absolute,
-                      # whitelisted path. If the file exists, it will be replaced.
-                      # The following device-side directories and any of their subdirectories are
-                      # whitelisted:
-                      # <p>${EXTERNAL_STORAGE}, or /sdcard</p>
-                      # <p>${ANDROID_DATA}/local/tmp, or /data/local/tmp</p>
-                      # <p>Specifying a path outside of these directory trees is invalid.
-                      #
-                      # <p> The paths /sdcard and /data will be made available and treated as
-                      # implicit path substitutions. E.g. if /sdcard on a particular device does
-                      # not map to external storage, the system will replace it with the external
-                      # storage path prefix for that device and copy the file there.
-                      #
-                      # <p> It is strongly advised to use the <a href=
-                      # "http://developer.android.com/reference/android/os/Environment.html">
-                      # Environment API</a> in app and test code to access files on the device in a
-                      # portable way.
-                },
-              },
-            ],
-            "account": { # Identifies an account and how to log into it. # The device will be logged in on this account for the duration of the test.
-              "googleAuto": { # Enables automatic Google account login. # An automatic google login account.
-                  # If set, the service automatically generates a Google test account and adds
-                  # it to the device, before executing the test. Note that test accounts might be
-                  # reused.
-                  # Many applications show their full set of functionalities when an account is
-                  # present on the device. Logging into the device with these generated accounts
-                  # allows testing more functionalities.
-              },
-            },
-            "systrace": { # Systrace configuration for the run.
-                # If set a systrace will be taken, starting on test start and lasting for the
-                # configured duration. The systrace file thus obtained is put in the results
-                # bucket together with the other artifacts from the run.
-              "durationSeconds": 42, # Systrace duration in seconds.
-                  # Should be between 1 and 30 seconds. 0 disables systrace.
-            },
-            "directoriesToPull": [ # List of directories on the device to upload to GCS at the end of the test;
-                # they must be absolute paths under /sdcard or /data/local/tmp.
-                # Path names are restricted to characters a-z A-Z 0-9 _ - . + and /
-                #
-                # Note: The paths /sdcard and /data will be made available and treated as
-                # implicit path substitutions. E.g. if /sdcard on a particular device does
-                # not map to external storage, the system will replace it with the external
-                # storage path prefix for that device.
-              "A String",
-            ],
-            "networkProfile": "A String", # The network traffic profile used for running the test.
-                # Available network profiles can be queried by using the
-                # NETWORK_CONFIGURATION environment type when calling
-                # TestEnvironmentDiscoveryService.GetTestEnvironmentCatalog.
-            "environmentVariables": [ # Environment variables to set for the test (only applicable for
-                # instrumentation tests).
-              { # A key-value pair passed as an environment variable to the test.
-                "value": "A String", # Value for the environment variable.
-                "key": "A String", # Key for the environment variable.
-              },
-            ],
-            "additionalApks": [ # APKs to install in addition to those being directly tested.
-                # Currently capped at 100.
-              { # An Android package file to install.
-                "location": { # A reference to a file, used for user inputs. # The path to an APK to be installed on the device before the test begins.
-                    "gcsPath": "A String", # A path to a file in Google Cloud Storage.
-                        # Example: gs://build-app-1414623860166/app-debug-unaligned.apk
-                  },
-                "packageName": "A String", # The java package for the APK to be installed.
-                    # Value is determined by examining the application's manifest.
-              },
-            ],
-          },
-          "androidRoboTest": { # A test of an android application that explores the application on a virtual # An Android robo test.
-              # or physical Android Device, finding culprits and crashes as it goes.
-            "maxDepth": 42, # The max depth of the traversal stack Robo can explore. Needs to be at least
-                # 2 to make Robo explore the app beyond the first activity.
-                # Default is 50.
-            "appPackageId": "A String", # The java package for the application under test.
-                # The default value is determined by examining the application's manifest.
-            "appApk": { # A reference to a file, used for user inputs. # The APK for the application under test.
-                "gcsPath": "A String", # A path to a file in Google Cloud Storage.
-                    # Example: gs://build-app-1414623860166/app-debug-unaligned.apk
-              },
-            "startingIntents": [ # The intents used to launch the app for the crawl.
-                # If none are provided, then the main launcher activity is launched.
-                # If some are provided, then only those provided are launched (the main
-                # launcher activity must be provided explicitly).
-              { # Message for specifying the start activities to crawl.
-                "timeout": "A String", # Timeout in seconds for each intent.
-                "startActivity": { # A starting intent specified by an action, uri, and categories. # An intent that starts an activity with specific details.
-                  "uri": "A String", # URI for the action.
-                  "categories": [ # Intent categories to set on the intent.
-                    "A String",
-                  ],
-                  "action": "A String", # Action name.
-                      # Required for START_ACTIVITY.
-                },
-                "launcherActivity": { # Specifies an intent that starts the main launcher activity. # An intent that starts the main launcher activity.
-                },
-              },
-            ],
-            "maxSteps": 42, # The max number of steps Robo can execute.
-                # Default is no limit.
-            "appInitialActivity": "A String", # The initial activity that should be used to start the app.
-            "roboDirectives": [ # A set of directives Robo should apply during the crawl.
-                # This allows users to customize the crawl. For example, the username and
-                # password for a test account can be provided.
-              { # Directs Robo to interact with a specific UI element if it is encountered
-                  # during the crawl. Currently, Robo can perform text entry or element click.
-                "actionType": "A String", # Required. The type of action that Robo should perform on the specified
-                    # element.
-                "resourceName": "A String", # Required. The android resource name of the target UI element.
-                    # For example,
-                    #    in Java: R.string.foo
-                    #    in xml: @string/foo
-                    # Only the "foo" part is needed.
-                    # Reference doc:
-                    # https://developer.android.com/guide/topics/resources/accessing-resources.html
-                "inputText": "A String", # The text that Robo is directed to set. If left empty, the directive will be
-                    # treated as a CLICK on the element matching the resource_name.
-              },
-            ],
-            "appBundle": { # An Android App Bundle file format, containing a BundleConfig.pb file, # A multi-apk app bundle for the application under test.
-                # a base module directory, zero or more dynamic feature module directories.
-                # <p>See https://developer.android.com/guide/app-bundle/build for guidance on
-                # building App Bundles.
-              "bundleLocation": { # A reference to a file, used for user inputs. # .aab file representing the app bundle under test.
-                  "gcsPath": "A String", # A path to a file in Google Cloud Storage.
-                      # Example: gs://build-app-1414623860166/app-debug-unaligned.apk
-                },
-            },
-            "roboScript": { # A reference to a file, used for user inputs. # A JSON file with a sequence of actions Robo should perform as a prologue
-                # for the crawl.
-                "gcsPath": "A String", # A path to a file in Google Cloud Storage.
-                    # Example: gs://build-app-1414623860166/app-debug-unaligned.apk
-              },
-          },
+        },
+        "testDetails": { # Additional details about the progress of the running test. # Output only. Additional details about the running test.
+          "errorMessage": "A String", # Output only. If the TestState is ERROR, then this string will contain
+              # human-readable details about the error.
+          "progressMessages": [ # Output only. Human-readable, detailed descriptions of the test's progress.
+              # For example: "Provisioning a device", "Starting Test".
+              #
+              # During the course of execution new data may be appended
+              # to the end of progress_messages.
+            "A String",
+          ],
+        },
+        "testSpecification": { # A description of how to run the test. # Output only. How to run the test.
           "androidInstrumentationTest": { # A test of an Android application that can control an Android component # An Android instrumentation test.
               # independently of its normal lifecycle.
               # Android instrumentation tests run an application APK and test APK inside the
@@ -764,15 +552,11 @@
               #
               # See <http://developer.android.com/tools/testing/testing_android.html> for
               # more information on types of Android tests.
-            "appBundle": { # An Android App Bundle file format, containing a BundleConfig.pb file, # A multi-apk app bundle for the application under test.
-                # a base module directory, zero or more dynamic feature module directories.
-                # <p>See https://developer.android.com/guide/app-bundle/build for guidance on
-                # building App Bundles.
-              "bundleLocation": { # A reference to a file, used for user inputs. # .aab file representing the app bundle under test.
-                  "gcsPath": "A String", # A path to a file in Google Cloud Storage.
-                      # Example: gs://build-app-1414623860166/app-debug-unaligned.apk
-                },
-            },
+            "testApk": { # A reference to a file, used for user inputs. # Required. The APK containing the test code to be executed.
+                "gcsPath": "A String", # A path to a file in Google Cloud Storage.
+                    # Example: gs://build-app-1414623860166/app%40debug-unaligned.apk
+                    # These paths are expected to be url encoded (percent encoding)
+              },
             "orchestratorOption": "A String", # The option of whether running each test within its own invocation of
                 # instrumentation with Android Test Orchestrator or not.
                 # ** Orchestrator is only compatible with AndroidJUnitRunner version 1.0 or
@@ -787,29 +571,9 @@
                 # for more information about Android Test Orchestrator.
                 #
                 # If not set, the test will be run without the orchestrator.
-            "testTargets": [ # Each target must be fully qualified with the package name or class name,
-                # in one of these formats:
-                #  - "package package_name"
-                #  - "class package_name.class_name"
-                #  - "class package_name.class_name#method_name"
-                #
-                # If empty, all targets in the module will be run.
-              "A String",
-            ],
-            "testApk": { # A reference to a file, used for user inputs. # Required. The APK containing the test code to be executed.
-                "gcsPath": "A String", # A path to a file in Google Cloud Storage.
-                    # Example: gs://build-app-1414623860166/app-debug-unaligned.apk
-              },
-            "testRunnerClass": "A String", # The InstrumentationTestRunner class.
+            "testPackageId": "A String", # The java package for the test to be executed.
                 # The default value is determined by examining the application's manifest.
             "shardingOption": { # Options for enabling sharding. # The option to run tests in multiple shards in parallel.
-              "uniformSharding": { # Uniformly shards test cases given a total number of shards. # Uniformly shards test cases given a total number of shards.
-                  #
-                  # For Instrumentation test, it will be translated to “-e numShard” “-e
-                  # shardIndex” AndroidJUnitRunner arguments. With uniform sharding enabled,
-                  # specifying these sharding arguments via environment_variables is invalid.
-                "numShards": 42, # Required. Total number of shards. The number must be >= 1 and <= 50.
-              },
               "manualSharding": { # Shards test cases into the specified groups of packages, classes, and/or # Shards test cases into the specified groups of packages, classes, and/or
                   # methods.
                   # methods.
@@ -817,7 +581,9 @@
                   # With manual sharding enabled, specifying test targets via
                   # environment_variables or in InstrumentationTest is invalid.
                 "testTargetsForShard": [ # Required. Group of packages, classes, and/or test methods to be run for
-                    # each shard. The number of shard_test_targets must be >= 1 and <= 50.
+                    # each shard. When any physical devices are selected,  the number of
+                    # test_targets_for_shard must be >= 1 and <= 50. When no physical devices are
+                    # selected, the number must be >= 1 and <= 250.
                   { # Test targets for a shard.
                     "testTargets": [ # Group of packages, classes, and/or test methods to be run for each shard.
                         # The targets need to be specified in AndroidJUnitRunner argument format. For
@@ -829,59 +595,332 @@
                   },
                 ],
               },
+              "uniformSharding": { # Uniformly shards test cases given a total number of shards. # Uniformly shards test cases given a total number of shards.
+                  #
+                  # For Instrumentation test, it will be translated to “-e numShard” “-e
+                  # shardIndex” AndroidJUnitRunner arguments. With uniform sharding enabled,
+                  # specifying these sharding arguments via environment_variables is invalid.
+                "numShards": 42, # Required. Total number of shards. When any physical devices are selected,
+                    # the number must be >= 1 and <= 50. When no physical devices are selected,
+                    # the number must be >= 1 and <= 250.
+              },
             },
-            "testPackageId": "A String", # The java package for the test to be executed.
-                # The default value is determined by examining the application's manifest.
-            "appPackageId": "A String", # The java package for the application under test.
-                # The default value is determined by examining the application's manifest.
             "appApk": { # A reference to a file, used for user inputs. # The APK for the application under test.
                 "gcsPath": "A String", # A path to a file in Google Cloud Storage.
-                    # Example: gs://build-app-1414623860166/app-debug-unaligned.apk
+                    # Example: gs://build-app-1414623860166/app%40debug-unaligned.apk
+                    # These paths are expected to be url encoded (percent encoding)
               },
+            "appPackageId": "A String", # The java package for the application under test.
+                # The default value is determined by examining the application's manifest.
+            "testRunnerClass": "A String", # The InstrumentationTestRunner class.
+                # The default value is determined by examining the application's manifest.
+            "testTargets": [ # Each target must be fully qualified with the package name or class name,
+                # in one of these formats:
+                #  - "package package_name"
+                #  - "class package_name.class_name"
+                #  - "class package_name.class_name#method_name"
+                #
+                # If empty, all targets in the module will be run.
+              "A String",
+            ],
+            "appBundle": { # An Android App Bundle file format, containing a BundleConfig.pb file, # A multi-apk app bundle for the application under test.
+                # a base module directory, zero or more dynamic feature module directories.
+                # <p>See https://developer.android.com/guide/app-bundle/build for guidance on
+                # building App Bundles.
+              "bundleLocation": { # A reference to a file, used for user inputs. # .aab file representing the app bundle under test.
+                  "gcsPath": "A String", # A path to a file in Google Cloud Storage.
+                      # Example: gs://build-app-1414623860166/app%40debug-unaligned.apk
+                      # These paths are expected to be url encoded (percent encoding)
+                },
+            },
+          },
+          "iosTestLoop": { # A test of an iOS application that implements one or more game loop scenarios. # An iOS application with a test loop.
+              # This test type accepts an archived application (.ipa file) and a list of
+              # integer scenarios that will be executed on the app sequentially.
+            "appBundleId": "A String", # Output only. The bundle id for the application under test.
+            "appIpa": { # A reference to a file, used for user inputs. # Required. The .ipa of the application to test.
+                "gcsPath": "A String", # A path to a file in Google Cloud Storage.
+                    # Example: gs://build-app-1414623860166/app%40debug-unaligned.apk
+                    # These paths are expected to be url encoded (percent encoding)
+              },
+            "scenarios": [ # The list of scenarios that should be run during the test. Defaults to the
+                # single scenario 0 if unspecified.
+              42,
+            ],
+          },
+          "androidRoboTest": { # A test of an android application that explores the application on a virtual # An Android robo test.
+              # or physical Android Device, finding culprits and crashes as it goes.
+            "appBundle": { # An Android App Bundle file format, containing a BundleConfig.pb file, # A multi-apk app bundle for the application under test.
+                # a base module directory, zero or more dynamic feature module directories.
+                # <p>See https://developer.android.com/guide/app-bundle/build for guidance on
+                # building App Bundles.
+              "bundleLocation": { # A reference to a file, used for user inputs. # .aab file representing the app bundle under test.
+                  "gcsPath": "A String", # A path to a file in Google Cloud Storage.
+                      # Example: gs://build-app-1414623860166/app%40debug-unaligned.apk
+                      # These paths are expected to be url encoded (percent encoding)
+                },
+            },
+            "roboScript": { # A reference to a file, used for user inputs. # A JSON file with a sequence of actions Robo should perform as a prologue
+                # for the crawl.
+                "gcsPath": "A String", # A path to a file in Google Cloud Storage.
+                    # Example: gs://build-app-1414623860166/app%40debug-unaligned.apk
+                    # These paths are expected to be url encoded (percent encoding)
+              },
+            "maxDepth": 42, # The max depth of the traversal stack Robo can explore. Needs to be at least
+                # 2 to make Robo explore the app beyond the first activity.
+                # Default is 50.
+            "appInitialActivity": "A String", # The initial activity that should be used to start the app.
+            "roboDirectives": [ # A set of directives Robo should apply during the crawl.
+                # This allows users to customize the crawl. For example, the username and
+                # password for a test account can be provided.
+              { # Directs Robo to interact with a specific UI element if it is encountered
+                  # during the crawl. Currently, Robo can perform text entry or element click.
+                "inputText": "A String", # The text that Robo is directed to set. If left empty, the directive will be
+                    # treated as a CLICK on the element matching the resource_name.
+                "resourceName": "A String", # Required. The android resource name of the target UI element.
+                    # For example,
+                    #    in Java: R.string.foo
+                    #    in xml: @string/foo
+                    # Only the "foo" part is needed.
+                    # Reference doc:
+                    # https://developer.android.com/guide/topics/resources/accessing-resources.html
+                "actionType": "A String", # Required. The type of action that Robo should perform on the specified
+                    # element.
+              },
+            ],
+            "appPackageId": "A String", # The java package for the application under test.
+                # The default value is determined by examining the application's manifest.
+            "startingIntents": [ # The intents used to launch the app for the crawl.
+                # If none are provided, then the main launcher activity is launched.
+                # If some are provided, then only those provided are launched (the main
+                # launcher activity must be provided explicitly).
+              { # Message for specifying the start activities to crawl.
+                "startActivity": { # A starting intent specified by an action, uri, and categories. # An intent that starts an activity with specific details.
+                  "categories": [ # Intent categories to set on the intent.
+                    "A String",
+                  ],
+                  "action": "A String", # Action name.
+                      # Required for START_ACTIVITY.
+                  "uri": "A String", # URI for the action.
+                },
+                "launcherActivity": { # Specifies an intent that starts the main launcher activity. # An intent that starts the main launcher activity.
+                },
+                "timeout": "A String", # Timeout in seconds for each intent.
+              },
+            ],
+            "appApk": { # A reference to a file, used for user inputs. # The APK for the application under test.
+                "gcsPath": "A String", # A path to a file in Google Cloud Storage.
+                    # Example: gs://build-app-1414623860166/app%40debug-unaligned.apk
+                    # These paths are expected to be url encoded (percent encoding)
+              },
+            "maxSteps": 42, # The max number of steps Robo can execute.
+                # Default is no limit.
           },
           "disablePerformanceMetrics": True or False, # Disables performance metrics recording. May reduce test latency.
           "disableVideoRecording": True or False, # Disables video recording. May reduce test latency.
-        },
-        "id": "A String", # Output only. Unique id set by the service.
-        "timestamp": "A String", # Output only. The time this test execution was initially created.
-        "shard": { # Output only. Details about the shard. # Output only. Details about the shard.
-          "shardIndex": 42, # Output only. The index of the shard among all the shards.
-          "testTargetsForShard": { # Test targets for a shard. # Output only. Test targets for each shard.
-            "testTargets": [ # Group of packages, classes, and/or test methods to be run for each shard.
-                # The targets need to be specified in AndroidJUnitRunner argument format. For
-                # example, “package com.my.packages” “class com.my.package.MyClass”.
-                #
-                # The number of shard_test_targets must be greater than 0.
+          "androidTestLoop": { # A test of an Android Application with a Test Loop. # An Android Application with a Test Loop.
+              # The intent \<intent-name\> will be implicitly added, since Games is the only
+              # user of this api, for the time being.
+            "scenarioLabels": [ # The list of scenario labels that should be run during the test.
+                # The scenario labels should map to labels defined in the application's
+                # manifest. For example, player_experience and
+                # com.google.test.loops.player_experience add all of the loops labeled in the
+                # manifest with the com.google.test.loops.player_experience name to the
+                # execution.
+                # Scenarios can also be specified in the scenarios field.
               "A String",
             ],
+            "appPackageId": "A String", # The java package for the application under test.
+                # The default is determined by examining the application's manifest.
+            "appApk": { # A reference to a file, used for user inputs. # The APK for the application under test.
+                "gcsPath": "A String", # A path to a file in Google Cloud Storage.
+                    # Example: gs://build-app-1414623860166/app%40debug-unaligned.apk
+                    # These paths are expected to be url encoded (percent encoding)
+              },
+            "appBundle": { # An Android App Bundle file format, containing a BundleConfig.pb file, # A multi-apk app bundle for the application under test.
+                # a base module directory, zero or more dynamic feature module directories.
+                # <p>See https://developer.android.com/guide/app-bundle/build for guidance on
+                # building App Bundles.
+              "bundleLocation": { # A reference to a file, used for user inputs. # .aab file representing the app bundle under test.
+                  "gcsPath": "A String", # A path to a file in Google Cloud Storage.
+                      # Example: gs://build-app-1414623860166/app%40debug-unaligned.apk
+                      # These paths are expected to be url encoded (percent encoding)
+                },
+            },
+            "scenarios": [ # The list of scenarios that should be run during the test.
+                # The default is all test loops, derived from the application's
+                # manifest.
+              42,
+            ],
           },
-          "numShards": 42, # Output only. The total number of shards.
+          "iosXcTest": { # A test of an iOS application that uses the XCTest framework. # An iOS XCTest, via an .xctestrun file.
+              # Xcode supports the option to "build for testing", which generates an
+              # .xctestrun file that contains a test specification (arguments, test methods,
+              # etc). This test type accepts a zip file containing the .xctestrun file and
+              # the corresponding contents of the Build/Products directory that contains all
+              # the binaries needed to run the tests.
+            "testsZip": { # A reference to a file, used for user inputs. # Required. The .zip containing the .xctestrun file and the contents of the
+                # DerivedData/Build/Products directory.
+                # The .xctestrun file in this zip is ignored if the xctestrun field is
+                # specified.
+                "gcsPath": "A String", # A path to a file in Google Cloud Storage.
+                    # Example: gs://build-app-1414623860166/app%40debug-unaligned.apk
+                    # These paths are expected to be url encoded (percent encoding)
+              },
+            "xcodeVersion": "A String", # The Xcode version that should be used for the test.
+                # Use the TestEnvironmentDiscoveryService to get supported options.
+                # Defaults to the latest Xcode version Firebase Test Lab supports.
+            "testSpecialEntitlements": True or False, # The option to test special app entitlements. Setting this would re-sign the
+                # app having special entitlements with an explicit application-identifier.
+                # Currently supports testing aps-environment entitlement.
+            "appBundleId": "A String", # Output only. The bundle id for the application under test.
+            "xctestrun": { # A reference to a file, used for user inputs. # An .xctestrun file that will override the .xctestrun file in the
+                # tests zip. Because the .xctestrun file contains environment variables along
+                # with test methods to run and/or ignore, this can be useful for sharding
+                # tests. Default is taken from the tests zip.
+                "gcsPath": "A String", # A path to a file in Google Cloud Storage.
+                    # Example: gs://build-app-1414623860166/app%40debug-unaligned.apk
+                    # These paths are expected to be url encoded (percent encoding)
+              },
+          },
+          "testSetup": { # A description of how to set up the Android device prior to running the test. # Test setup requirements for Android e.g. files to install, bootstrap
+              # scripts.
+            "environmentVariables": [ # Environment variables to set for the test (only applicable for
+                # instrumentation tests).
+              { # A key-value pair passed as an environment variable to the test.
+                "value": "A String", # Value for the environment variable.
+                "key": "A String", # Key for the environment variable.
+              },
+            ],
+            "dontAutograntPermissions": True or False, # Whether to prevent all runtime permissions to be granted at app install
+            "additionalApks": [ # APKs to install in addition to those being directly tested.
+                # Currently capped at 100.
+              { # An Android package file to install.
+                "location": { # A reference to a file, used for user inputs. # The path to an APK to be installed on the device before the test begins.
+                    "gcsPath": "A String", # A path to a file in Google Cloud Storage.
+                        # Example: gs://build-app-1414623860166/app%40debug-unaligned.apk
+                        # These paths are expected to be url encoded (percent encoding)
+                  },
+                "packageName": "A String", # The java package for the APK to be installed.
+                    # Value is determined by examining the application's manifest.
+              },
+            ],
+            "systrace": { # Systrace configuration for the run.
+                # If set a systrace will be taken, starting on test start and lasting for the
+                # configured duration. The systrace file thus obtained is put in the results
+                # bucket together with the other artifacts from the run.
+              "durationSeconds": 42, # Systrace duration in seconds.
+                  # Should be between 1 and 30 seconds. 0 disables systrace.
+            },
+            "filesToPush": [ # List of files to push to the device before starting the test.
+              { # A single device file description.
+                "regularFile": { # A file or directory to install on the device before the test starts. # A reference to a regular file.
+                  "devicePath": "A String", # Required. Where to put the content on the device. Must be an absolute,
+                      # allowlisted path. If the file exists, it will be replaced.
+                      # The following device-side directories and any of their subdirectories are
+                      # allowlisted:
+                      # <p>${EXTERNAL_STORAGE}, /sdcard, or /storage</p>
+                      # <p>${ANDROID_DATA}/local/tmp, or /data/local/tmp</p>
+                      # <p>Specifying a path outside of these directory trees is invalid.
+                      #
+                      # <p> The paths /sdcard and /data will be made available and treated as
+                      # implicit path substitutions. E.g. if /sdcard on a particular device does
+                      # not map to external storage, the system will replace it with the external
+                      # storage path prefix for that device and copy the file there.
+                      #
+                      # <p> It is strongly advised to use the <a href=
+                      # "http://developer.android.com/reference/android/os/Environment.html">
+                      # Environment API</a> in app and test code to access files on the device in a
+                      # portable way.
+                  "content": { # A reference to a file, used for user inputs. # Required. The source file.
+                      "gcsPath": "A String", # A path to a file in Google Cloud Storage.
+                          # Example: gs://build-app-1414623860166/app%40debug-unaligned.apk
+                          # These paths are expected to be url encoded (percent encoding)
+                    },
+                },
+                "obbFile": { # An opaque binary blob file to install on the device before the test starts. # A reference to an opaque binary blob file.
+                  "obb": { # A reference to a file, used for user inputs. # Required. Opaque Binary Blob (OBB) file(s) to install on the device.
+                      "gcsPath": "A String", # A path to a file in Google Cloud Storage.
+                          # Example: gs://build-app-1414623860166/app%40debug-unaligned.apk
+                          # These paths are expected to be url encoded (percent encoding)
+                    },
+                  "obbFileName": "A String", # Required. OBB file name which must conform to the format as specified by
+                      # Android
+                      # e.g. [main|patch].0300110.com.example.android.obb
+                      # which will be installed into
+                      #   \<shared-storage\>/Android/obb/\<package-name\>/
+                      # on the device.
+                },
+              },
+            ],
+            "networkProfile": "A String", # The network traffic profile used for running the test.
+                # Available network profiles can be queried by using the
+                # NETWORK_CONFIGURATION environment type when calling
+                # TestEnvironmentDiscoveryService.GetTestEnvironmentCatalog.
+            "directoriesToPull": [ # List of directories on the device to upload to GCS at the end of the test;
+                # they must be absolute paths under /sdcard, /storage or /data/local/tmp.
+                # Path names are restricted to characters a-z A-Z 0-9 _ - . + and /
+                #
+                # Note: The paths /sdcard and /data will be made available and treated as
+                # implicit path substitutions. E.g. if /sdcard on a particular device does
+                # not map to external storage, the system will replace it with the external
+                # storage path prefix for that device.
+              "A String",
+            ],
+            "account": { # Identifies an account and how to log into it. # The device will be logged in on this account for the duration of the test.
+              "googleAuto": { # Enables automatic Google account login. # An automatic google login account.
+                  # If set, the service automatically generates a Google test account and adds
+                  # it to the device, before executing the test. Note that test accounts might be
+                  # reused.
+                  # Many applications show their full set of functionalities when an account is
+                  # present on the device. Logging into the device with these generated accounts
+                  # allows testing more functionalities.
+              },
+            },
+          },
+          "testTimeout": "A String", # Max time a test execution is allowed to run before it is
+              # automatically cancelled.
+              # The default value is 5 min.
+          "iosTestSetup": { # A description of how to set up an iOS device prior to running the test. # Test setup requirements for iOS.
+            "networkProfile": "A String", # The network traffic profile used for running the test.
+                # Available network profiles can be queried by using the
+                # NETWORK_CONFIGURATION environment type when calling
+                # TestEnvironmentDiscoveryService.GetTestEnvironmentCatalog.
+          },
         },
-        "matrixId": "A String", # Output only. Id of the containing TestMatrix.
-        "testDetails": { # Additional details about the progress of the running test. # Output only. Additional details about the running test.
-          "errorMessage": "A String", # Output only. If the TestState is ERROR, then this string will contain
-              # human-readable details about the error.
-          "progressMessages": [ # Output only. Human-readable, detailed descriptions of the test's progress.
-              # For example: "Provisioning a device", "Starting Test".
-              #
-              # During the course of execution new data may be appended
-              # to the end of progress_messages.
-            "A String",
-          ],
+        "state": "A String", # Output only. Indicates the current progress of the test execution
+            # (e.g., FINISHED).
+        "toolResultsStep": { # Represents a tool results step resource. # Output only. Where the results for this execution are written.
+            #
+            # This has the results of a TestExecution.
+          "stepId": "A String", # Output only. A tool results step ID.
+          "projectId": "A String", # Output only. The cloud project that owns the tool results step.
+          "historyId": "A String", # Output only. A tool results history ID.
+          "executionId": "A String", # Output only. A tool results execution ID.
         },
       },
     ],
     "environmentMatrix": { # The matrix of environments in which the test is to be executed. # Required. The devices the tests are being executed on.
+      "iosDeviceList": { # A list of iOS device configurations in which the test is to be executed. # A list of iOS devices.
+        "iosDevices": [ # Required. A list of iOS devices.
+          { # A single iOS device.
+            "iosModelId": "A String", # Required. The id of the iOS device to be used.
+                # Use the TestEnvironmentDiscoveryService to get supported options.
+            "orientation": "A String", # Required. How the device is oriented during the test.
+                # Use the TestEnvironmentDiscoveryService to get supported options.
+            "iosVersionId": "A String", # Required. The id of the iOS major software version to be used.
+                # Use the TestEnvironmentDiscoveryService to get supported options.
+            "locale": "A String", # Required. The locale the test device used for testing.
+                # Use the TestEnvironmentDiscoveryService to get supported options.
+          },
+        ],
+      },
       "androidMatrix": { # A set of Android device configuration permutations is defined by the # A matrix of Android devices.
           # the cross-product of the given axes. Internally, the given AndroidMatrix
           # will be expanded into a set of AndroidDevices.
           #
           # Only supported permutations will be instantiated.  Invalid permutations
           # (e.g., incompatible models/versions) are ignored.
-        "androidModelIds": [ # Required. The ids of the set of Android device to be used.
-            # Use the TestEnvironmentDiscoveryService to get supported options.
-          "A String",
-        ],
         "orientations": [ # Required. The set of orientations to test with.
             # Use the TestEnvironmentDiscoveryService to get supported options.
           "A String",
@@ -894,65 +933,64 @@
             # Use the TestEnvironmentDiscoveryService to get supported options.
           "A String",
         ],
-      },
-      "iosDeviceList": { # A list of iOS device configurations in which the test is to be executed. # A list of iOS devices.
-        "iosDevices": [ # Required. A list of iOS devices.
-          { # A single iOS device.
-            "orientation": "A String", # Required. How the device is oriented during the test.
-                # Use the TestEnvironmentDiscoveryService to get supported options.
-            "iosVersionId": "A String", # Required. The id of the iOS major software version to be used.
-                # Use the TestEnvironmentDiscoveryService to get supported options.
-            "locale": "A String", # Required. The locale the test device used for testing.
-                # Use the TestEnvironmentDiscoveryService to get supported options.
-            "iosModelId": "A String", # Required. The id of the iOS device to be used.
-                # Use the TestEnvironmentDiscoveryService to get supported options.
-          },
+        "androidModelIds": [ # Required. The ids of the set of Android device to be used.
+            # Use the TestEnvironmentDiscoveryService to get supported options.
+          "A String",
         ],
       },
       "androidDeviceList": { # A list of Android device configurations in which the test is to be executed. # A list of Android devices; the test will be run only on the specified
           # devices.
         "androidDevices": [ # Required. A list of Android devices.
           { # A single Android device.
-            "orientation": "A String", # Required. How the device is oriented during the test.
-                # Use the TestEnvironmentDiscoveryService to get supported options.
-            "locale": "A String", # Required. The locale the test device used for testing.
-                # Use the TestEnvironmentDiscoveryService to get supported options.
             "androidModelId": "A String", # Required. The id of the Android device to be used.
                 # Use the TestEnvironmentDiscoveryService to get supported options.
             "androidVersionId": "A String", # Required. The id of the Android OS version to be used.
                 # Use the TestEnvironmentDiscoveryService to get supported options.
+            "locale": "A String", # Required. The locale the test device used for testing.
+                # Use the TestEnvironmentDiscoveryService to get supported options.
+            "orientation": "A String", # Required. How the device is oriented during the test.
+                # Use the TestEnvironmentDiscoveryService to get supported options.
           },
         ],
       },
     },
+    "outcomeSummary": "A String", # Output Only. The overall outcome of the test.
+        # Only set when the test matrix state is FINISHED.
     "resultStorage": { # Locations where the results of running the test are stored. # Required. Where the results for the matrix are written.
       "toolResultsExecution": { # Represents a tool results execution resource. # Output only. The tool results execution that results are written to.
           #
           # This has the results of a TestMatrix.
+        "executionId": "A String", # Output only. A tool results execution ID.
         "projectId": "A String", # Output only. The cloud project that owns the tool results execution.
         "historyId": "A String", # Output only. A tool results history ID.
-        "executionId": "A String", # Output only. A tool results execution ID.
       },
       "resultsUrl": "A String", # Output only. URL to the results in the Firebase Web Console.
-      "toolResultsHistory": { # Represents a tool results history resource. # The tool results history that contains the tool results execution that
-          # results are written to.
-          #
-          # If not provided, the service will choose an appropriate value.
-        "projectId": "A String", # Required. The cloud project that owns the tool results history.
-        "historyId": "A String", # Required. A tool results history ID.
-      },
       "googleCloudStorage": { # A storage location within Google cloud storage (GCS). # Required.
         "gcsPath": "A String", # Required. The path to a directory in GCS that will
             # eventually contain the results for this test.
             # The requesting user must have write access on the bucket in the supplied
             # path.
       },
+      "toolResultsHistory": { # Represents a tool results history resource. # The tool results history that contains the tool results execution that
+          # results are written to.
+          #
+          # If not provided, the service will choose an appropriate value.
+        "historyId": "A String", # Required. A tool results history ID.
+        "projectId": "A String", # Required. The cloud project that owns the tool results history.
+      },
     },
-    "testMatrixId": "A String", # Output only. Unique id set by the service.
     "invalidMatrixDetails": "A String", # Output only. Describes why the matrix is considered invalid.
         # Only useful for matrices in the INVALID state.
-    "outcomeSummary": "A String", # Output Only. The overall outcome of the test.
-        # Only set when the test matrix state is FINISHED.
+    "clientInfo": { # Information about the client which invoked the test. # Information about the client which invoked the test.
+      "clientInfoDetails": [ # The list of detailed information about client.
+        { # Key-value pair of detailed information about the client which invoked the
+            # test. Examples: {'Version', '1.0'}, {'Release Track', 'BETA'}.
+          "key": "A String", # Required. The key of detailed client information.
+          "value": "A String", # Required. The value of detailed client information.
+        },
+      ],
+      "name": "A String", # Required. Client name, such as gcloud.
+    },
   }
 
   requestId: string, A string id used to detect duplicated requests.
@@ -972,246 +1010,15 @@
     { # TestMatrix captures all details about a test. It contains the environment
         # configuration, test specification, test executions and overall state and
         # outcome.
+      "projectId": "A String", # The cloud project that owns the test matrix.
+      "timestamp": "A String", # Output only. The time this test matrix was initially created.
+      "flakyTestAttempts": 42, # The number of times a TestExecution should be re-attempted if one or more
+          # of its test cases fail for any reason.
+          # The maximum number of reruns allowed is 10.
+          #
+          # Default is 0, which implies no reruns.
+      "testMatrixId": "A String", # Output only. Unique id set by the service.
       "testSpecification": { # A description of how to run the test. # Required. How to run the test.
-        "iosXcTest": { # A test of an iOS application that uses the XCTest framework. # An iOS XCTest, via an .xctestrun file.
-            # Xcode supports the option to "build for testing", which generates an
-            # .xctestrun file that contains a test specification (arguments, test methods,
-            # etc). This test type accepts a zip file containing the .xctestrun file and
-            # the corresponding contents of the Build/Products directory that contains all
-            # the binaries needed to run the tests.
-          "xcodeVersion": "A String", # The Xcode version that should be used for the test.
-              # Use the TestEnvironmentDiscoveryService to get supported options.
-              # Defaults to the latest Xcode version Firebase Test Lab supports.
-          "appBundleId": "A String", # Output only. The bundle id for the application under test.
-          "xctestrun": { # A reference to a file, used for user inputs. # An .xctestrun file that will override the .xctestrun file in the
-              # tests zip. Because the .xctestrun file contains environment variables along
-              # with test methods to run and/or ignore, this can be useful for sharding
-              # tests. Default is taken from the tests zip.
-              "gcsPath": "A String", # A path to a file in Google Cloud Storage.
-                  # Example: gs://build-app-1414623860166/app-debug-unaligned.apk
-            },
-          "testSpecialEntitlements": True or False, # The option to test special app entitlements. Setting this would re-sign the
-              # app having special entitlements with an explicit application-identifier.
-              # Currently supports testing aps-environment entitlement.
-          "testsZip": { # A reference to a file, used for user inputs. # Required. The .zip containing the .xctestrun file and the contents of the
-              # DerivedData/Build/Products directory.
-              # The .xctestrun file in this zip is ignored if the xctestrun field is
-              # specified.
-              "gcsPath": "A String", # A path to a file in Google Cloud Storage.
-                  # Example: gs://build-app-1414623860166/app-debug-unaligned.apk
-            },
-        },
-        "iosTestLoop": { # A test of an iOS application that implements one or more game loop scenarios. # An iOS application with a test loop.
-            # This test type accepts an archived application (.ipa file) and a list of
-            # integer scenarios that will be executed on the app sequentially.
-          "scenarios": [ # The list of scenarios that should be run during the test. Defaults to the
-              # single scenario 0 if unspecified.
-            42,
-          ],
-          "appBundleId": "A String", # Output only. The bundle id for the application under test.
-          "appIpa": { # A reference to a file, used for user inputs. # Required. The .ipa of the application to test.
-              "gcsPath": "A String", # A path to a file in Google Cloud Storage.
-                  # Example: gs://build-app-1414623860166/app-debug-unaligned.apk
-            },
-        },
-        "testTimeout": "A String", # Max time a test execution is allowed to run before it is
-            # automatically cancelled.
-            # The default value is 5 min.
-        "iosTestSetup": { # A description of how to set up an iOS device prior to running the test. # Test setup requirements for iOS.
-          "networkProfile": "A String", # The network traffic profile used for running the test.
-              # Available network profiles can be queried by using the
-              # NETWORK_CONFIGURATION environment type when calling
-              # TestEnvironmentDiscoveryService.GetTestEnvironmentCatalog.
-        },
-        "androidTestLoop": { # A test of an Android Application with a Test Loop. # An Android Application with a Test Loop.
-            # The intent \<intent-name\> will be implicitly added, since Games is the only
-            # user of this api, for the time being.
-          "appApk": { # A reference to a file, used for user inputs. # The APK for the application under test.
-              "gcsPath": "A String", # A path to a file in Google Cloud Storage.
-                  # Example: gs://build-app-1414623860166/app-debug-unaligned.apk
-            },
-          "appPackageId": "A String", # The java package for the application under test.
-              # The default is determined by examining the application's manifest.
-          "appBundle": { # An Android App Bundle file format, containing a BundleConfig.pb file, # A multi-apk app bundle for the application under test.
-              # a base module directory, zero or more dynamic feature module directories.
-              # <p>See https://developer.android.com/guide/app-bundle/build for guidance on
-              # building App Bundles.
-            "bundleLocation": { # A reference to a file, used for user inputs. # .aab file representing the app bundle under test.
-                "gcsPath": "A String", # A path to a file in Google Cloud Storage.
-                    # Example: gs://build-app-1414623860166/app-debug-unaligned.apk
-              },
-          },
-          "scenarios": [ # The list of scenarios that should be run during the test.
-              # The default is all test loops, derived from the application's
-              # manifest.
-            42,
-          ],
-          "scenarioLabels": [ # The list of scenario labels that should be run during the test.
-              # The scenario labels should map to labels defined in the application's
-              # manifest. For example, player_experience and
-              # com.google.test.loops.player_experience add all of the loops labeled in the
-              # manifest with the com.google.test.loops.player_experience name to the
-              # execution.
-              # Scenarios can also be specified in the scenarios field.
-            "A String",
-          ],
-        },
-        "testSetup": { # A description of how to set up the Android device prior to running the test. # Test setup requirements for Android e.g. files to install, bootstrap
-            # scripts.
-          "filesToPush": [ # List of files to push to the device before starting the test.
-            { # A single device file description.
-              "obbFile": { # An opaque binary blob file to install on the device before the test starts. # A reference to an opaque binary blob file.
-                "obbFileName": "A String", # Required. OBB file name which must conform to the format as specified by
-                    # Android
-                    # e.g. [main|patch].0300110.com.example.android.obb
-                    # which will be installed into
-                    #   \<shared-storage\>/Android/obb/\<package-name\>/
-                    # on the device.
-                "obb": { # A reference to a file, used for user inputs. # Required. Opaque Binary Blob (OBB) file(s) to install on the device.
-                    "gcsPath": "A String", # A path to a file in Google Cloud Storage.
-                        # Example: gs://build-app-1414623860166/app-debug-unaligned.apk
-                  },
-              },
-              "regularFile": { # A file or directory to install on the device before the test starts. # A reference to a regular file.
-                "content": { # A reference to a file, used for user inputs. # Required. The source file.
-                    "gcsPath": "A String", # A path to a file in Google Cloud Storage.
-                        # Example: gs://build-app-1414623860166/app-debug-unaligned.apk
-                  },
-                "devicePath": "A String", # Required. Where to put the content on the device. Must be an absolute,
-                    # whitelisted path. If the file exists, it will be replaced.
-                    # The following device-side directories and any of their subdirectories are
-                    # whitelisted:
-                    # <p>${EXTERNAL_STORAGE}, or /sdcard</p>
-                    # <p>${ANDROID_DATA}/local/tmp, or /data/local/tmp</p>
-                    # <p>Specifying a path outside of these directory trees is invalid.
-                    #
-                    # <p> The paths /sdcard and /data will be made available and treated as
-                    # implicit path substitutions. E.g. if /sdcard on a particular device does
-                    # not map to external storage, the system will replace it with the external
-                    # storage path prefix for that device and copy the file there.
-                    #
-                    # <p> It is strongly advised to use the <a href=
-                    # "http://developer.android.com/reference/android/os/Environment.html">
-                    # Environment API</a> in app and test code to access files on the device in a
-                    # portable way.
-              },
-            },
-          ],
-          "account": { # Identifies an account and how to log into it. # The device will be logged in on this account for the duration of the test.
-            "googleAuto": { # Enables automatic Google account login. # An automatic google login account.
-                # If set, the service automatically generates a Google test account and adds
-                # it to the device, before executing the test. Note that test accounts might be
-                # reused.
-                # Many applications show their full set of functionalities when an account is
-                # present on the device. Logging into the device with these generated accounts
-                # allows testing more functionalities.
-            },
-          },
-          "systrace": { # Systrace configuration for the run.
-              # If set a systrace will be taken, starting on test start and lasting for the
-              # configured duration. The systrace file thus obtained is put in the results
-              # bucket together with the other artifacts from the run.
-            "durationSeconds": 42, # Systrace duration in seconds.
-                # Should be between 1 and 30 seconds. 0 disables systrace.
-          },
-          "directoriesToPull": [ # List of directories on the device to upload to GCS at the end of the test;
-              # they must be absolute paths under /sdcard or /data/local/tmp.
-              # Path names are restricted to characters a-z A-Z 0-9 _ - . + and /
-              #
-              # Note: The paths /sdcard and /data will be made available and treated as
-              # implicit path substitutions. E.g. if /sdcard on a particular device does
-              # not map to external storage, the system will replace it with the external
-              # storage path prefix for that device.
-            "A String",
-          ],
-          "networkProfile": "A String", # The network traffic profile used for running the test.
-              # Available network profiles can be queried by using the
-              # NETWORK_CONFIGURATION environment type when calling
-              # TestEnvironmentDiscoveryService.GetTestEnvironmentCatalog.
-          "environmentVariables": [ # Environment variables to set for the test (only applicable for
-              # instrumentation tests).
-            { # A key-value pair passed as an environment variable to the test.
-              "value": "A String", # Value for the environment variable.
-              "key": "A String", # Key for the environment variable.
-            },
-          ],
-          "additionalApks": [ # APKs to install in addition to those being directly tested.
-              # Currently capped at 100.
-            { # An Android package file to install.
-              "location": { # A reference to a file, used for user inputs. # The path to an APK to be installed on the device before the test begins.
-                  "gcsPath": "A String", # A path to a file in Google Cloud Storage.
-                      # Example: gs://build-app-1414623860166/app-debug-unaligned.apk
-                },
-              "packageName": "A String", # The java package for the APK to be installed.
-                  # Value is determined by examining the application's manifest.
-            },
-          ],
-        },
-        "androidRoboTest": { # A test of an android application that explores the application on a virtual # An Android robo test.
-            # or physical Android Device, finding culprits and crashes as it goes.
-          "maxDepth": 42, # The max depth of the traversal stack Robo can explore. Needs to be at least
-              # 2 to make Robo explore the app beyond the first activity.
-              # Default is 50.
-          "appPackageId": "A String", # The java package for the application under test.
-              # The default value is determined by examining the application's manifest.
-          "appApk": { # A reference to a file, used for user inputs. # The APK for the application under test.
-              "gcsPath": "A String", # A path to a file in Google Cloud Storage.
-                  # Example: gs://build-app-1414623860166/app-debug-unaligned.apk
-            },
-          "startingIntents": [ # The intents used to launch the app for the crawl.
-              # If none are provided, then the main launcher activity is launched.
-              # If some are provided, then only those provided are launched (the main
-              # launcher activity must be provided explicitly).
-            { # Message for specifying the start activities to crawl.
-              "timeout": "A String", # Timeout in seconds for each intent.
-              "startActivity": { # A starting intent specified by an action, uri, and categories. # An intent that starts an activity with specific details.
-                "uri": "A String", # URI for the action.
-                "categories": [ # Intent categories to set on the intent.
-                  "A String",
-                ],
-                "action": "A String", # Action name.
-                    # Required for START_ACTIVITY.
-              },
-              "launcherActivity": { # Specifies an intent that starts the main launcher activity. # An intent that starts the main launcher activity.
-              },
-            },
-          ],
-          "maxSteps": 42, # The max number of steps Robo can execute.
-              # Default is no limit.
-          "appInitialActivity": "A String", # The initial activity that should be used to start the app.
-          "roboDirectives": [ # A set of directives Robo should apply during the crawl.
-              # This allows users to customize the crawl. For example, the username and
-              # password for a test account can be provided.
-            { # Directs Robo to interact with a specific UI element if it is encountered
-                # during the crawl. Currently, Robo can perform text entry or element click.
-              "actionType": "A String", # Required. The type of action that Robo should perform on the specified
-                  # element.
-              "resourceName": "A String", # Required. The android resource name of the target UI element.
-                  # For example,
-                  #    in Java: R.string.foo
-                  #    in xml: @string/foo
-                  # Only the "foo" part is needed.
-                  # Reference doc:
-                  # https://developer.android.com/guide/topics/resources/accessing-resources.html
-              "inputText": "A String", # The text that Robo is directed to set. If left empty, the directive will be
-                  # treated as a CLICK on the element matching the resource_name.
-            },
-          ],
-          "appBundle": { # An Android App Bundle file format, containing a BundleConfig.pb file, # A multi-apk app bundle for the application under test.
-              # a base module directory, zero or more dynamic feature module directories.
-              # <p>See https://developer.android.com/guide/app-bundle/build for guidance on
-              # building App Bundles.
-            "bundleLocation": { # A reference to a file, used for user inputs. # .aab file representing the app bundle under test.
-                "gcsPath": "A String", # A path to a file in Google Cloud Storage.
-                    # Example: gs://build-app-1414623860166/app-debug-unaligned.apk
-              },
-          },
-          "roboScript": { # A reference to a file, used for user inputs. # A JSON file with a sequence of actions Robo should perform as a prologue
-              # for the crawl.
-              "gcsPath": "A String", # A path to a file in Google Cloud Storage.
-                  # Example: gs://build-app-1414623860166/app-debug-unaligned.apk
-            },
-        },
         "androidInstrumentationTest": { # A test of an Android application that can control an Android component # An Android instrumentation test.
             # independently of its normal lifecycle.
             # Android instrumentation tests run an application APK and test APK inside the
@@ -1221,15 +1028,11 @@
             #
             # See <http://developer.android.com/tools/testing/testing_android.html> for
             # more information on types of Android tests.
-          "appBundle": { # An Android App Bundle file format, containing a BundleConfig.pb file, # A multi-apk app bundle for the application under test.
-              # a base module directory, zero or more dynamic feature module directories.
-              # <p>See https://developer.android.com/guide/app-bundle/build for guidance on
-              # building App Bundles.
-            "bundleLocation": { # A reference to a file, used for user inputs. # .aab file representing the app bundle under test.
-                "gcsPath": "A String", # A path to a file in Google Cloud Storage.
-                    # Example: gs://build-app-1414623860166/app-debug-unaligned.apk
-              },
-          },
+          "testApk": { # A reference to a file, used for user inputs. # Required. The APK containing the test code to be executed.
+              "gcsPath": "A String", # A path to a file in Google Cloud Storage.
+                  # Example: gs://build-app-1414623860166/app%40debug-unaligned.apk
+                  # These paths are expected to be url encoded (percent encoding)
+            },
           "orchestratorOption": "A String", # The option of whether running each test within its own invocation of
               # instrumentation with Android Test Orchestrator or not.
               # ** Orchestrator is only compatible with AndroidJUnitRunner version 1.0 or
@@ -1244,29 +1047,9 @@
               # for more information about Android Test Orchestrator.
               #
               # If not set, the test will be run without the orchestrator.
-          "testTargets": [ # Each target must be fully qualified with the package name or class name,
-              # in one of these formats:
-              #  - "package package_name"
-              #  - "class package_name.class_name"
-              #  - "class package_name.class_name#method_name"
-              #
-              # If empty, all targets in the module will be run.
-            "A String",
-          ],
-          "testApk": { # A reference to a file, used for user inputs. # Required. The APK containing the test code to be executed.
-              "gcsPath": "A String", # A path to a file in Google Cloud Storage.
-                  # Example: gs://build-app-1414623860166/app-debug-unaligned.apk
-            },
-          "testRunnerClass": "A String", # The InstrumentationTestRunner class.
+          "testPackageId": "A String", # The java package for the test to be executed.
               # The default value is determined by examining the application's manifest.
           "shardingOption": { # Options for enabling sharding. # The option to run tests in multiple shards in parallel.
-            "uniformSharding": { # Uniformly shards test cases given a total number of shards. # Uniformly shards test cases given a total number of shards.
-                #
-                # For Instrumentation test, it will be translated to “-e numShard” “-e
-                # shardIndex” AndroidJUnitRunner arguments. With uniform sharding enabled,
-                # specifying these sharding arguments via environment_variables is invalid.
-              "numShards": 42, # Required. Total number of shards. The number must be >= 1 and <= 50.
-            },
             "manualSharding": { # Shards test cases into the specified groups of packages, classes, and/or # Shards test cases into the specified groups of packages, classes, and/or
                 # methods.
                 # methods.
@@ -1274,7 +1057,9 @@
                 # With manual sharding enabled, specifying test targets via
                 # environment_variables or in InstrumentationTest is invalid.
               "testTargetsForShard": [ # Required. Group of packages, classes, and/or test methods to be run for
-                  # each shard. The number of shard_test_targets must be >= 1 and <= 50.
+                  # each shard. When any physical devices are selected,  the number of
+                  # test_targets_for_shard must be >= 1 and <= 50. When no physical devices are
+                  # selected, the number must be >= 1 and <= 250.
                 { # Test targets for a shard.
                   "testTargets": [ # Group of packages, classes, and/or test methods to be run for each shard.
                       # The targets need to be specified in AndroidJUnitRunner argument format. For
@@ -1286,313 +1071,354 @@
                 },
               ],
             },
+            "uniformSharding": { # Uniformly shards test cases given a total number of shards. # Uniformly shards test cases given a total number of shards.
+                #
+                # For Instrumentation test, it will be translated to “-e numShard” “-e
+                # shardIndex” AndroidJUnitRunner arguments. With uniform sharding enabled,
+                # specifying these sharding arguments via environment_variables is invalid.
+              "numShards": 42, # Required. Total number of shards. When any physical devices are selected,
+                  # the number must be >= 1 and <= 50. When no physical devices are selected,
+                  # the number must be >= 1 and <= 250.
+            },
           },
-          "testPackageId": "A String", # The java package for the test to be executed.
-              # The default value is determined by examining the application's manifest.
-          "appPackageId": "A String", # The java package for the application under test.
-              # The default value is determined by examining the application's manifest.
           "appApk": { # A reference to a file, used for user inputs. # The APK for the application under test.
               "gcsPath": "A String", # A path to a file in Google Cloud Storage.
-                  # Example: gs://build-app-1414623860166/app-debug-unaligned.apk
+                  # Example: gs://build-app-1414623860166/app%40debug-unaligned.apk
+                  # These paths are expected to be url encoded (percent encoding)
             },
+          "appPackageId": "A String", # The java package for the application under test.
+              # The default value is determined by examining the application's manifest.
+          "testRunnerClass": "A String", # The InstrumentationTestRunner class.
+              # The default value is determined by examining the application's manifest.
+          "testTargets": [ # Each target must be fully qualified with the package name or class name,
+              # in one of these formats:
+              #  - "package package_name"
+              #  - "class package_name.class_name"
+              #  - "class package_name.class_name#method_name"
+              #
+              # If empty, all targets in the module will be run.
+            "A String",
+          ],
+          "appBundle": { # An Android App Bundle file format, containing a BundleConfig.pb file, # A multi-apk app bundle for the application under test.
+              # a base module directory, zero or more dynamic feature module directories.
+              # <p>See https://developer.android.com/guide/app-bundle/build for guidance on
+              # building App Bundles.
+            "bundleLocation": { # A reference to a file, used for user inputs. # .aab file representing the app bundle under test.
+                "gcsPath": "A String", # A path to a file in Google Cloud Storage.
+                    # Example: gs://build-app-1414623860166/app%40debug-unaligned.apk
+                    # These paths are expected to be url encoded (percent encoding)
+              },
+          },
+        },
+        "iosTestLoop": { # A test of an iOS application that implements one or more game loop scenarios. # An iOS application with a test loop.
+            # This test type accepts an archived application (.ipa file) and a list of
+            # integer scenarios that will be executed on the app sequentially.
+          "appBundleId": "A String", # Output only. The bundle id for the application under test.
+          "appIpa": { # A reference to a file, used for user inputs. # Required. The .ipa of the application to test.
+              "gcsPath": "A String", # A path to a file in Google Cloud Storage.
+                  # Example: gs://build-app-1414623860166/app%40debug-unaligned.apk
+                  # These paths are expected to be url encoded (percent encoding)
+            },
+          "scenarios": [ # The list of scenarios that should be run during the test. Defaults to the
+              # single scenario 0 if unspecified.
+            42,
+          ],
+        },
+        "androidRoboTest": { # A test of an android application that explores the application on a virtual # An Android robo test.
+            # or physical Android Device, finding culprits and crashes as it goes.
+          "appBundle": { # An Android App Bundle file format, containing a BundleConfig.pb file, # A multi-apk app bundle for the application under test.
+              # a base module directory, zero or more dynamic feature module directories.
+              # <p>See https://developer.android.com/guide/app-bundle/build for guidance on
+              # building App Bundles.
+            "bundleLocation": { # A reference to a file, used for user inputs. # .aab file representing the app bundle under test.
+                "gcsPath": "A String", # A path to a file in Google Cloud Storage.
+                    # Example: gs://build-app-1414623860166/app%40debug-unaligned.apk
+                    # These paths are expected to be url encoded (percent encoding)
+              },
+          },
+          "roboScript": { # A reference to a file, used for user inputs. # A JSON file with a sequence of actions Robo should perform as a prologue
+              # for the crawl.
+              "gcsPath": "A String", # A path to a file in Google Cloud Storage.
+                  # Example: gs://build-app-1414623860166/app%40debug-unaligned.apk
+                  # These paths are expected to be url encoded (percent encoding)
+            },
+          "maxDepth": 42, # The max depth of the traversal stack Robo can explore. Needs to be at least
+              # 2 to make Robo explore the app beyond the first activity.
+              # Default is 50.
+          "appInitialActivity": "A String", # The initial activity that should be used to start the app.
+          "roboDirectives": [ # A set of directives Robo should apply during the crawl.
+              # This allows users to customize the crawl. For example, the username and
+              # password for a test account can be provided.
+            { # Directs Robo to interact with a specific UI element if it is encountered
+                # during the crawl. Currently, Robo can perform text entry or element click.
+              "inputText": "A String", # The text that Robo is directed to set. If left empty, the directive will be
+                  # treated as a CLICK on the element matching the resource_name.
+              "resourceName": "A String", # Required. The android resource name of the target UI element.
+                  # For example,
+                  #    in Java: R.string.foo
+                  #    in xml: @string/foo
+                  # Only the "foo" part is needed.
+                  # Reference doc:
+                  # https://developer.android.com/guide/topics/resources/accessing-resources.html
+              "actionType": "A String", # Required. The type of action that Robo should perform on the specified
+                  # element.
+            },
+          ],
+          "appPackageId": "A String", # The java package for the application under test.
+              # The default value is determined by examining the application's manifest.
+          "startingIntents": [ # The intents used to launch the app for the crawl.
+              # If none are provided, then the main launcher activity is launched.
+              # If some are provided, then only those provided are launched (the main
+              # launcher activity must be provided explicitly).
+            { # Message for specifying the start activities to crawl.
+              "startActivity": { # A starting intent specified by an action, uri, and categories. # An intent that starts an activity with specific details.
+                "categories": [ # Intent categories to set on the intent.
+                  "A String",
+                ],
+                "action": "A String", # Action name.
+                    # Required for START_ACTIVITY.
+                "uri": "A String", # URI for the action.
+              },
+              "launcherActivity": { # Specifies an intent that starts the main launcher activity. # An intent that starts the main launcher activity.
+              },
+              "timeout": "A String", # Timeout in seconds for each intent.
+            },
+          ],
+          "appApk": { # A reference to a file, used for user inputs. # The APK for the application under test.
+              "gcsPath": "A String", # A path to a file in Google Cloud Storage.
+                  # Example: gs://build-app-1414623860166/app%40debug-unaligned.apk
+                  # These paths are expected to be url encoded (percent encoding)
+            },
+          "maxSteps": 42, # The max number of steps Robo can execute.
+              # Default is no limit.
         },
         "disablePerformanceMetrics": True or False, # Disables performance metrics recording. May reduce test latency.
         "disableVideoRecording": True or False, # Disables video recording. May reduce test latency.
-      },
-      "projectId": "A String", # The cloud project that owns the test matrix.
-      "timestamp": "A String", # Output only. The time this test matrix was initially created.
-      "flakyTestAttempts": 42, # The number of times a TestExecution should be re-attempted if one or more
-          # of its test cases fail for any reason.
-          # The maximum number of reruns allowed is 10.
-          #
-          # Default is 0, which implies no reruns.
-      "state": "A String", # Output only. Indicates the current progress of the test matrix.
-      "clientInfo": { # Information about the client which invoked the test. # Information about the client which invoked the test.
-        "clientInfoDetails": [ # The list of detailed information about client.
-          { # Key-value pair of detailed information about the client which invoked the
-              # test. Examples: {'Version', '1.0'}, {'Release Track', 'BETA'}.
-            "value": "A String", # Required. The value of detailed client information.
-            "key": "A String", # Required. The key of detailed client information.
+        "androidTestLoop": { # A test of an Android Application with a Test Loop. # An Android Application with a Test Loop.
+            # The intent \<intent-name\> will be implicitly added, since Games is the only
+            # user of this api, for the time being.
+          "scenarioLabels": [ # The list of scenario labels that should be run during the test.
+              # The scenario labels should map to labels defined in the application's
+              # manifest. For example, player_experience and
+              # com.google.test.loops.player_experience add all of the loops labeled in the
+              # manifest with the com.google.test.loops.player_experience name to the
+              # execution.
+              # Scenarios can also be specified in the scenarios field.
+            "A String",
+          ],
+          "appPackageId": "A String", # The java package for the application under test.
+              # The default is determined by examining the application's manifest.
+          "appApk": { # A reference to a file, used for user inputs. # The APK for the application under test.
+              "gcsPath": "A String", # A path to a file in Google Cloud Storage.
+                  # Example: gs://build-app-1414623860166/app%40debug-unaligned.apk
+                  # These paths are expected to be url encoded (percent encoding)
+            },
+          "appBundle": { # An Android App Bundle file format, containing a BundleConfig.pb file, # A multi-apk app bundle for the application under test.
+              # a base module directory, zero or more dynamic feature module directories.
+              # <p>See https://developer.android.com/guide/app-bundle/build for guidance on
+              # building App Bundles.
+            "bundleLocation": { # A reference to a file, used for user inputs. # .aab file representing the app bundle under test.
+                "gcsPath": "A String", # A path to a file in Google Cloud Storage.
+                    # Example: gs://build-app-1414623860166/app%40debug-unaligned.apk
+                    # These paths are expected to be url encoded (percent encoding)
+              },
           },
-        ],
-        "name": "A String", # Required. Client name, such as gcloud.
+          "scenarios": [ # The list of scenarios that should be run during the test.
+              # The default is all test loops, derived from the application's
+              # manifest.
+            42,
+          ],
+        },
+        "iosXcTest": { # A test of an iOS application that uses the XCTest framework. # An iOS XCTest, via an .xctestrun file.
+            # Xcode supports the option to "build for testing", which generates an
+            # .xctestrun file that contains a test specification (arguments, test methods,
+            # etc). This test type accepts a zip file containing the .xctestrun file and
+            # the corresponding contents of the Build/Products directory that contains all
+            # the binaries needed to run the tests.
+          "testsZip": { # A reference to a file, used for user inputs. # Required. The .zip containing the .xctestrun file and the contents of the
+              # DerivedData/Build/Products directory.
+              # The .xctestrun file in this zip is ignored if the xctestrun field is
+              # specified.
+              "gcsPath": "A String", # A path to a file in Google Cloud Storage.
+                  # Example: gs://build-app-1414623860166/app%40debug-unaligned.apk
+                  # These paths are expected to be url encoded (percent encoding)
+            },
+          "xcodeVersion": "A String", # The Xcode version that should be used for the test.
+              # Use the TestEnvironmentDiscoveryService to get supported options.
+              # Defaults to the latest Xcode version Firebase Test Lab supports.
+          "testSpecialEntitlements": True or False, # The option to test special app entitlements. Setting this would re-sign the
+              # app having special entitlements with an explicit application-identifier.
+              # Currently supports testing aps-environment entitlement.
+          "appBundleId": "A String", # Output only. The bundle id for the application under test.
+          "xctestrun": { # A reference to a file, used for user inputs. # An .xctestrun file that will override the .xctestrun file in the
+              # tests zip. Because the .xctestrun file contains environment variables along
+              # with test methods to run and/or ignore, this can be useful for sharding
+              # tests. Default is taken from the tests zip.
+              "gcsPath": "A String", # A path to a file in Google Cloud Storage.
+                  # Example: gs://build-app-1414623860166/app%40debug-unaligned.apk
+                  # These paths are expected to be url encoded (percent encoding)
+            },
+        },
+        "testSetup": { # A description of how to set up the Android device prior to running the test. # Test setup requirements for Android e.g. files to install, bootstrap
+            # scripts.
+          "environmentVariables": [ # Environment variables to set for the test (only applicable for
+              # instrumentation tests).
+            { # A key-value pair passed as an environment variable to the test.
+              "value": "A String", # Value for the environment variable.
+              "key": "A String", # Key for the environment variable.
+            },
+          ],
+          "dontAutograntPermissions": True or False, # Whether to prevent all runtime permissions to be granted at app install
+          "additionalApks": [ # APKs to install in addition to those being directly tested.
+              # Currently capped at 100.
+            { # An Android package file to install.
+              "location": { # A reference to a file, used for user inputs. # The path to an APK to be installed on the device before the test begins.
+                  "gcsPath": "A String", # A path to a file in Google Cloud Storage.
+                      # Example: gs://build-app-1414623860166/app%40debug-unaligned.apk
+                      # These paths are expected to be url encoded (percent encoding)
+                },
+              "packageName": "A String", # The java package for the APK to be installed.
+                  # Value is determined by examining the application's manifest.
+            },
+          ],
+          "systrace": { # Systrace configuration for the run.
+              # If set a systrace will be taken, starting on test start and lasting for the
+              # configured duration. The systrace file thus obtained is put in the results
+              # bucket together with the other artifacts from the run.
+            "durationSeconds": 42, # Systrace duration in seconds.
+                # Should be between 1 and 30 seconds. 0 disables systrace.
+          },
+          "filesToPush": [ # List of files to push to the device before starting the test.
+            { # A single device file description.
+              "regularFile": { # A file or directory to install on the device before the test starts. # A reference to a regular file.
+                "devicePath": "A String", # Required. Where to put the content on the device. Must be an absolute,
+                    # allowlisted path. If the file exists, it will be replaced.
+                    # The following device-side directories and any of their subdirectories are
+                    # allowlisted:
+                    # <p>${EXTERNAL_STORAGE}, /sdcard, or /storage</p>
+                    # <p>${ANDROID_DATA}/local/tmp, or /data/local/tmp</p>
+                    # <p>Specifying a path outside of these directory trees is invalid.
+                    #
+                    # <p> The paths /sdcard and /data will be made available and treated as
+                    # implicit path substitutions. E.g. if /sdcard on a particular device does
+                    # not map to external storage, the system will replace it with the external
+                    # storage path prefix for that device and copy the file there.
+                    #
+                    # <p> It is strongly advised to use the <a href=
+                    # "http://developer.android.com/reference/android/os/Environment.html">
+                    # Environment API</a> in app and test code to access files on the device in a
+                    # portable way.
+                "content": { # A reference to a file, used for user inputs. # Required. The source file.
+                    "gcsPath": "A String", # A path to a file in Google Cloud Storage.
+                        # Example: gs://build-app-1414623860166/app%40debug-unaligned.apk
+                        # These paths are expected to be url encoded (percent encoding)
+                  },
+              },
+              "obbFile": { # An opaque binary blob file to install on the device before the test starts. # A reference to an opaque binary blob file.
+                "obb": { # A reference to a file, used for user inputs. # Required. Opaque Binary Blob (OBB) file(s) to install on the device.
+                    "gcsPath": "A String", # A path to a file in Google Cloud Storage.
+                        # Example: gs://build-app-1414623860166/app%40debug-unaligned.apk
+                        # These paths are expected to be url encoded (percent encoding)
+                  },
+                "obbFileName": "A String", # Required. OBB file name which must conform to the format as specified by
+                    # Android
+                    # e.g. [main|patch].0300110.com.example.android.obb
+                    # which will be installed into
+                    #   \<shared-storage\>/Android/obb/\<package-name\>/
+                    # on the device.
+              },
+            },
+          ],
+          "networkProfile": "A String", # The network traffic profile used for running the test.
+              # Available network profiles can be queried by using the
+              # NETWORK_CONFIGURATION environment type when calling
+              # TestEnvironmentDiscoveryService.GetTestEnvironmentCatalog.
+          "directoriesToPull": [ # List of directories on the device to upload to GCS at the end of the test;
+              # they must be absolute paths under /sdcard, /storage or /data/local/tmp.
+              # Path names are restricted to characters a-z A-Z 0-9 _ - . + and /
+              #
+              # Note: The paths /sdcard and /data will be made available and treated as
+              # implicit path substitutions. E.g. if /sdcard on a particular device does
+              # not map to external storage, the system will replace it with the external
+              # storage path prefix for that device.
+            "A String",
+          ],
+          "account": { # Identifies an account and how to log into it. # The device will be logged in on this account for the duration of the test.
+            "googleAuto": { # Enables automatic Google account login. # An automatic google login account.
+                # If set, the service automatically generates a Google test account and adds
+                # it to the device, before executing the test. Note that test accounts might be
+                # reused.
+                # Many applications show their full set of functionalities when an account is
+                # present on the device. Logging into the device with these generated accounts
+                # allows testing more functionalities.
+            },
+          },
+        },
+        "testTimeout": "A String", # Max time a test execution is allowed to run before it is
+            # automatically cancelled.
+            # The default value is 5 min.
+        "iosTestSetup": { # A description of how to set up an iOS device prior to running the test. # Test setup requirements for iOS.
+          "networkProfile": "A String", # The network traffic profile used for running the test.
+              # Available network profiles can be queried by using the
+              # NETWORK_CONFIGURATION environment type when calling
+              # TestEnvironmentDiscoveryService.GetTestEnvironmentCatalog.
+        },
       },
+      "state": "A String", # Output only. Indicates the current progress of the test matrix.
       "testExecutions": [ # Output only. The list of test executions that the service creates for
           # this matrix.
         { # A single test executed in a single environment.
+          "shard": { # Output only. Details about the shard. # Output only. Details about the shard.
+            "shardIndex": 42, # Output only. The index of the shard among all the shards.
+            "testTargetsForShard": { # Test targets for a shard. # Output only. Test targets for each shard.
+              "testTargets": [ # Group of packages, classes, and/or test methods to be run for each shard.
+                  # The targets need to be specified in AndroidJUnitRunner argument format. For
+                  # example, “package com.my.packages” “class com.my.package.MyClass”.
+                  #
+                  # The number of shard_test_targets must be greater than 0.
+                "A String",
+              ],
+            },
+            "numShards": 42, # Output only. The total number of shards.
+          },
+          "timestamp": "A String", # Output only. The time this test execution was initially created.
+          "id": "A String", # Output only. Unique id set by the service.
+          "matrixId": "A String", # Output only. Id of the containing TestMatrix.
+          "projectId": "A String", # Output only. The cloud project that owns the test execution.
           "environment": { # The environment in which the test is run. # Output only. How the host machine(s) are configured.
             "iosDevice": { # A single iOS device. # An iOS device which must be used with an iOS test.
+              "iosModelId": "A String", # Required. The id of the iOS device to be used.
+                  # Use the TestEnvironmentDiscoveryService to get supported options.
               "orientation": "A String", # Required. How the device is oriented during the test.
                   # Use the TestEnvironmentDiscoveryService to get supported options.
               "iosVersionId": "A String", # Required. The id of the iOS major software version to be used.
                   # Use the TestEnvironmentDiscoveryService to get supported options.
               "locale": "A String", # Required. The locale the test device used for testing.
                   # Use the TestEnvironmentDiscoveryService to get supported options.
-              "iosModelId": "A String", # Required. The id of the iOS device to be used.
-                  # Use the TestEnvironmentDiscoveryService to get supported options.
             },
             "androidDevice": { # A single Android device. # An Android device which must be used with an Android test.
-              "orientation": "A String", # Required. How the device is oriented during the test.
-                  # Use the TestEnvironmentDiscoveryService to get supported options.
-              "locale": "A String", # Required. The locale the test device used for testing.
-                  # Use the TestEnvironmentDiscoveryService to get supported options.
               "androidModelId": "A String", # Required. The id of the Android device to be used.
                   # Use the TestEnvironmentDiscoveryService to get supported options.
               "androidVersionId": "A String", # Required. The id of the Android OS version to be used.
                   # Use the TestEnvironmentDiscoveryService to get supported options.
-            },
-          },
-          "state": "A String", # Output only. Indicates the current progress of the test execution
-              # (e.g., FINISHED).
-          "toolResultsStep": { # Represents a tool results step resource. # Output only. Where the results for this execution are written.
-              #
-              # This has the results of a TestExecution.
-            "projectId": "A String", # Output only. The cloud project that owns the tool results step.
-            "historyId": "A String", # Output only. A tool results history ID.
-            "executionId": "A String", # Output only. A tool results execution ID.
-            "stepId": "A String", # Output only. A tool results step ID.
-          },
-          "projectId": "A String", # Output only. The cloud project that owns the test execution.
-          "testSpecification": { # A description of how to run the test. # Output only. How to run the test.
-            "iosXcTest": { # A test of an iOS application that uses the XCTest framework. # An iOS XCTest, via an .xctestrun file.
-                # Xcode supports the option to "build for testing", which generates an
-                # .xctestrun file that contains a test specification (arguments, test methods,
-                # etc). This test type accepts a zip file containing the .xctestrun file and
-                # the corresponding contents of the Build/Products directory that contains all
-                # the binaries needed to run the tests.
-              "xcodeVersion": "A String", # The Xcode version that should be used for the test.
+              "locale": "A String", # Required. The locale the test device used for testing.
                   # Use the TestEnvironmentDiscoveryService to get supported options.
-                  # Defaults to the latest Xcode version Firebase Test Lab supports.
-              "appBundleId": "A String", # Output only. The bundle id for the application under test.
-              "xctestrun": { # A reference to a file, used for user inputs. # An .xctestrun file that will override the .xctestrun file in the
-                  # tests zip. Because the .xctestrun file contains environment variables along
-                  # with test methods to run and/or ignore, this can be useful for sharding
-                  # tests. Default is taken from the tests zip.
-                  "gcsPath": "A String", # A path to a file in Google Cloud Storage.
-                      # Example: gs://build-app-1414623860166/app-debug-unaligned.apk
-                },
-              "testSpecialEntitlements": True or False, # The option to test special app entitlements. Setting this would re-sign the
-                  # app having special entitlements with an explicit application-identifier.
-                  # Currently supports testing aps-environment entitlement.
-              "testsZip": { # A reference to a file, used for user inputs. # Required. The .zip containing the .xctestrun file and the contents of the
-                  # DerivedData/Build/Products directory.
-                  # The .xctestrun file in this zip is ignored if the xctestrun field is
-                  # specified.
-                  "gcsPath": "A String", # A path to a file in Google Cloud Storage.
-                      # Example: gs://build-app-1414623860166/app-debug-unaligned.apk
-                },
+              "orientation": "A String", # Required. How the device is oriented during the test.
+                  # Use the TestEnvironmentDiscoveryService to get supported options.
             },
-            "iosTestLoop": { # A test of an iOS application that implements one or more game loop scenarios. # An iOS application with a test loop.
-                # This test type accepts an archived application (.ipa file) and a list of
-                # integer scenarios that will be executed on the app sequentially.
-              "scenarios": [ # The list of scenarios that should be run during the test. Defaults to the
-                  # single scenario 0 if unspecified.
-                42,
-              ],
-              "appBundleId": "A String", # Output only. The bundle id for the application under test.
-              "appIpa": { # A reference to a file, used for user inputs. # Required. The .ipa of the application to test.
-                  "gcsPath": "A String", # A path to a file in Google Cloud Storage.
-                      # Example: gs://build-app-1414623860166/app-debug-unaligned.apk
-                },
-            },
-            "testTimeout": "A String", # Max time a test execution is allowed to run before it is
-                # automatically cancelled.
-                # The default value is 5 min.
-            "iosTestSetup": { # A description of how to set up an iOS device prior to running the test. # Test setup requirements for iOS.
-              "networkProfile": "A String", # The network traffic profile used for running the test.
-                  # Available network profiles can be queried by using the
-                  # NETWORK_CONFIGURATION environment type when calling
-                  # TestEnvironmentDiscoveryService.GetTestEnvironmentCatalog.
-            },
-            "androidTestLoop": { # A test of an Android Application with a Test Loop. # An Android Application with a Test Loop.
-                # The intent \<intent-name\> will be implicitly added, since Games is the only
-                # user of this api, for the time being.
-              "appApk": { # A reference to a file, used for user inputs. # The APK for the application under test.
-                  "gcsPath": "A String", # A path to a file in Google Cloud Storage.
-                      # Example: gs://build-app-1414623860166/app-debug-unaligned.apk
-                },
-              "appPackageId": "A String", # The java package for the application under test.
-                  # The default is determined by examining the application's manifest.
-              "appBundle": { # An Android App Bundle file format, containing a BundleConfig.pb file, # A multi-apk app bundle for the application under test.
-                  # a base module directory, zero or more dynamic feature module directories.
-                  # <p>See https://developer.android.com/guide/app-bundle/build for guidance on
-                  # building App Bundles.
-                "bundleLocation": { # A reference to a file, used for user inputs. # .aab file representing the app bundle under test.
-                    "gcsPath": "A String", # A path to a file in Google Cloud Storage.
-                        # Example: gs://build-app-1414623860166/app-debug-unaligned.apk
-                  },
-              },
-              "scenarios": [ # The list of scenarios that should be run during the test.
-                  # The default is all test loops, derived from the application's
-                  # manifest.
-                42,
-              ],
-              "scenarioLabels": [ # The list of scenario labels that should be run during the test.
-                  # The scenario labels should map to labels defined in the application's
-                  # manifest. For example, player_experience and
-                  # com.google.test.loops.player_experience add all of the loops labeled in the
-                  # manifest with the com.google.test.loops.player_experience name to the
-                  # execution.
-                  # Scenarios can also be specified in the scenarios field.
-                "A String",
-              ],
-            },
-            "testSetup": { # A description of how to set up the Android device prior to running the test. # Test setup requirements for Android e.g. files to install, bootstrap
-                # scripts.
-              "filesToPush": [ # List of files to push to the device before starting the test.
-                { # A single device file description.
-                  "obbFile": { # An opaque binary blob file to install on the device before the test starts. # A reference to an opaque binary blob file.
-                    "obbFileName": "A String", # Required. OBB file name which must conform to the format as specified by
-                        # Android
-                        # e.g. [main|patch].0300110.com.example.android.obb
-                        # which will be installed into
-                        #   \<shared-storage\>/Android/obb/\<package-name\>/
-                        # on the device.
-                    "obb": { # A reference to a file, used for user inputs. # Required. Opaque Binary Blob (OBB) file(s) to install on the device.
-                        "gcsPath": "A String", # A path to a file in Google Cloud Storage.
-                            # Example: gs://build-app-1414623860166/app-debug-unaligned.apk
-                      },
-                  },
-                  "regularFile": { # A file or directory to install on the device before the test starts. # A reference to a regular file.
-                    "content": { # A reference to a file, used for user inputs. # Required. The source file.
-                        "gcsPath": "A String", # A path to a file in Google Cloud Storage.
-                            # Example: gs://build-app-1414623860166/app-debug-unaligned.apk
-                      },
-                    "devicePath": "A String", # Required. Where to put the content on the device. Must be an absolute,
-                        # whitelisted path. If the file exists, it will be replaced.
-                        # The following device-side directories and any of their subdirectories are
-                        # whitelisted:
-                        # <p>${EXTERNAL_STORAGE}, or /sdcard</p>
-                        # <p>${ANDROID_DATA}/local/tmp, or /data/local/tmp</p>
-                        # <p>Specifying a path outside of these directory trees is invalid.
-                        #
-                        # <p> The paths /sdcard and /data will be made available and treated as
-                        # implicit path substitutions. E.g. if /sdcard on a particular device does
-                        # not map to external storage, the system will replace it with the external
-                        # storage path prefix for that device and copy the file there.
-                        #
-                        # <p> It is strongly advised to use the <a href=
-                        # "http://developer.android.com/reference/android/os/Environment.html">
-                        # Environment API</a> in app and test code to access files on the device in a
-                        # portable way.
-                  },
-                },
-              ],
-              "account": { # Identifies an account and how to log into it. # The device will be logged in on this account for the duration of the test.
-                "googleAuto": { # Enables automatic Google account login. # An automatic google login account.
-                    # If set, the service automatically generates a Google test account and adds
-                    # it to the device, before executing the test. Note that test accounts might be
-                    # reused.
-                    # Many applications show their full set of functionalities when an account is
-                    # present on the device. Logging into the device with these generated accounts
-                    # allows testing more functionalities.
-                },
-              },
-              "systrace": { # Systrace configuration for the run.
-                  # If set a systrace will be taken, starting on test start and lasting for the
-                  # configured duration. The systrace file thus obtained is put in the results
-                  # bucket together with the other artifacts from the run.
-                "durationSeconds": 42, # Systrace duration in seconds.
-                    # Should be between 1 and 30 seconds. 0 disables systrace.
-              },
-              "directoriesToPull": [ # List of directories on the device to upload to GCS at the end of the test;
-                  # they must be absolute paths under /sdcard or /data/local/tmp.
-                  # Path names are restricted to characters a-z A-Z 0-9 _ - . + and /
-                  #
-                  # Note: The paths /sdcard and /data will be made available and treated as
-                  # implicit path substitutions. E.g. if /sdcard on a particular device does
-                  # not map to external storage, the system will replace it with the external
-                  # storage path prefix for that device.
-                "A String",
-              ],
-              "networkProfile": "A String", # The network traffic profile used for running the test.
-                  # Available network profiles can be queried by using the
-                  # NETWORK_CONFIGURATION environment type when calling
-                  # TestEnvironmentDiscoveryService.GetTestEnvironmentCatalog.
-              "environmentVariables": [ # Environment variables to set for the test (only applicable for
-                  # instrumentation tests).
-                { # A key-value pair passed as an environment variable to the test.
-                  "value": "A String", # Value for the environment variable.
-                  "key": "A String", # Key for the environment variable.
-                },
-              ],
-              "additionalApks": [ # APKs to install in addition to those being directly tested.
-                  # Currently capped at 100.
-                { # An Android package file to install.
-                  "location": { # A reference to a file, used for user inputs. # The path to an APK to be installed on the device before the test begins.
-                      "gcsPath": "A String", # A path to a file in Google Cloud Storage.
-                          # Example: gs://build-app-1414623860166/app-debug-unaligned.apk
-                    },
-                  "packageName": "A String", # The java package for the APK to be installed.
-                      # Value is determined by examining the application's manifest.
-                },
-              ],
-            },
-            "androidRoboTest": { # A test of an android application that explores the application on a virtual # An Android robo test.
-                # or physical Android Device, finding culprits and crashes as it goes.
-              "maxDepth": 42, # The max depth of the traversal stack Robo can explore. Needs to be at least
-                  # 2 to make Robo explore the app beyond the first activity.
-                  # Default is 50.
-              "appPackageId": "A String", # The java package for the application under test.
-                  # The default value is determined by examining the application's manifest.
-              "appApk": { # A reference to a file, used for user inputs. # The APK for the application under test.
-                  "gcsPath": "A String", # A path to a file in Google Cloud Storage.
-                      # Example: gs://build-app-1414623860166/app-debug-unaligned.apk
-                },
-              "startingIntents": [ # The intents used to launch the app for the crawl.
-                  # If none are provided, then the main launcher activity is launched.
-                  # If some are provided, then only those provided are launched (the main
-                  # launcher activity must be provided explicitly).
-                { # Message for specifying the start activities to crawl.
-                  "timeout": "A String", # Timeout in seconds for each intent.
-                  "startActivity": { # A starting intent specified by an action, uri, and categories. # An intent that starts an activity with specific details.
-                    "uri": "A String", # URI for the action.
-                    "categories": [ # Intent categories to set on the intent.
-                      "A String",
-                    ],
-                    "action": "A String", # Action name.
-                        # Required for START_ACTIVITY.
-                  },
-                  "launcherActivity": { # Specifies an intent that starts the main launcher activity. # An intent that starts the main launcher activity.
-                  },
-                },
-              ],
-              "maxSteps": 42, # The max number of steps Robo can execute.
-                  # Default is no limit.
-              "appInitialActivity": "A String", # The initial activity that should be used to start the app.
-              "roboDirectives": [ # A set of directives Robo should apply during the crawl.
-                  # This allows users to customize the crawl. For example, the username and
-                  # password for a test account can be provided.
-                { # Directs Robo to interact with a specific UI element if it is encountered
-                    # during the crawl. Currently, Robo can perform text entry or element click.
-                  "actionType": "A String", # Required. The type of action that Robo should perform on the specified
-                      # element.
-                  "resourceName": "A String", # Required. The android resource name of the target UI element.
-                      # For example,
-                      #    in Java: R.string.foo
-                      #    in xml: @string/foo
-                      # Only the "foo" part is needed.
-                      # Reference doc:
-                      # https://developer.android.com/guide/topics/resources/accessing-resources.html
-                  "inputText": "A String", # The text that Robo is directed to set. If left empty, the directive will be
-                      # treated as a CLICK on the element matching the resource_name.
-                },
-              ],
-              "appBundle": { # An Android App Bundle file format, containing a BundleConfig.pb file, # A multi-apk app bundle for the application under test.
-                  # a base module directory, zero or more dynamic feature module directories.
-                  # <p>See https://developer.android.com/guide/app-bundle/build for guidance on
-                  # building App Bundles.
-                "bundleLocation": { # A reference to a file, used for user inputs. # .aab file representing the app bundle under test.
-                    "gcsPath": "A String", # A path to a file in Google Cloud Storage.
-                        # Example: gs://build-app-1414623860166/app-debug-unaligned.apk
-                  },
-              },
-              "roboScript": { # A reference to a file, used for user inputs. # A JSON file with a sequence of actions Robo should perform as a prologue
-                  # for the crawl.
-                  "gcsPath": "A String", # A path to a file in Google Cloud Storage.
-                      # Example: gs://build-app-1414623860166/app-debug-unaligned.apk
-                },
-            },
+          },
+          "testDetails": { # Additional details about the progress of the running test. # Output only. Additional details about the running test.
+            "errorMessage": "A String", # Output only. If the TestState is ERROR, then this string will contain
+                # human-readable details about the error.
+            "progressMessages": [ # Output only. Human-readable, detailed descriptions of the test's progress.
+                # For example: "Provisioning a device", "Starting Test".
+                #
+                # During the course of execution new data may be appended
+                # to the end of progress_messages.
+              "A String",
+            ],
+          },
+          "testSpecification": { # A description of how to run the test. # Output only. How to run the test.
             "androidInstrumentationTest": { # A test of an Android application that can control an Android component # An Android instrumentation test.
                 # independently of its normal lifecycle.
                 # Android instrumentation tests run an application APK and test APK inside the
@@ -1602,15 +1428,11 @@
                 #
                 # See <http://developer.android.com/tools/testing/testing_android.html> for
                 # more information on types of Android tests.
-              "appBundle": { # An Android App Bundle file format, containing a BundleConfig.pb file, # A multi-apk app bundle for the application under test.
-                  # a base module directory, zero or more dynamic feature module directories.
-                  # <p>See https://developer.android.com/guide/app-bundle/build for guidance on
-                  # building App Bundles.
-                "bundleLocation": { # A reference to a file, used for user inputs. # .aab file representing the app bundle under test.
-                    "gcsPath": "A String", # A path to a file in Google Cloud Storage.
-                        # Example: gs://build-app-1414623860166/app-debug-unaligned.apk
-                  },
-              },
+              "testApk": { # A reference to a file, used for user inputs. # Required. The APK containing the test code to be executed.
+                  "gcsPath": "A String", # A path to a file in Google Cloud Storage.
+                      # Example: gs://build-app-1414623860166/app%40debug-unaligned.apk
+                      # These paths are expected to be url encoded (percent encoding)
+                },
               "orchestratorOption": "A String", # The option of whether running each test within its own invocation of
                   # instrumentation with Android Test Orchestrator or not.
                   # ** Orchestrator is only compatible with AndroidJUnitRunner version 1.0 or
@@ -1625,29 +1447,9 @@
                   # for more information about Android Test Orchestrator.
                   #
                   # If not set, the test will be run without the orchestrator.
-              "testTargets": [ # Each target must be fully qualified with the package name or class name,
-                  # in one of these formats:
-                  #  - "package package_name"
-                  #  - "class package_name.class_name"
-                  #  - "class package_name.class_name#method_name"
-                  #
-                  # If empty, all targets in the module will be run.
-                "A String",
-              ],
-              "testApk": { # A reference to a file, used for user inputs. # Required. The APK containing the test code to be executed.
-                  "gcsPath": "A String", # A path to a file in Google Cloud Storage.
-                      # Example: gs://build-app-1414623860166/app-debug-unaligned.apk
-                },
-              "testRunnerClass": "A String", # The InstrumentationTestRunner class.
+              "testPackageId": "A String", # The java package for the test to be executed.
                   # The default value is determined by examining the application's manifest.
               "shardingOption": { # Options for enabling sharding. # The option to run tests in multiple shards in parallel.
-                "uniformSharding": { # Uniformly shards test cases given a total number of shards. # Uniformly shards test cases given a total number of shards.
-                    #
-                    # For Instrumentation test, it will be translated to “-e numShard” “-e
-                    # shardIndex” AndroidJUnitRunner arguments. With uniform sharding enabled,
-                    # specifying these sharding arguments via environment_variables is invalid.
-                  "numShards": 42, # Required. Total number of shards. The number must be >= 1 and <= 50.
-                },
                 "manualSharding": { # Shards test cases into the specified groups of packages, classes, and/or # Shards test cases into the specified groups of packages, classes, and/or
                     # methods.
                     # methods.
@@ -1655,7 +1457,9 @@
                     # With manual sharding enabled, specifying test targets via
                     # environment_variables or in InstrumentationTest is invalid.
                   "testTargetsForShard": [ # Required. Group of packages, classes, and/or test methods to be run for
-                      # each shard. The number of shard_test_targets must be >= 1 and <= 50.
+                      # each shard. When any physical devices are selected,  the number of
+                      # test_targets_for_shard must be >= 1 and <= 50. When no physical devices are
+                      # selected, the number must be >= 1 and <= 250.
                     { # Test targets for a shard.
                       "testTargets": [ # Group of packages, classes, and/or test methods to be run for each shard.
                           # The targets need to be specified in AndroidJUnitRunner argument format. For
@@ -1667,59 +1471,332 @@
                     },
                   ],
                 },
+                "uniformSharding": { # Uniformly shards test cases given a total number of shards. # Uniformly shards test cases given a total number of shards.
+                    #
+                    # For Instrumentation test, it will be translated to “-e numShard” “-e
+                    # shardIndex” AndroidJUnitRunner arguments. With uniform sharding enabled,
+                    # specifying these sharding arguments via environment_variables is invalid.
+                  "numShards": 42, # Required. Total number of shards. When any physical devices are selected,
+                      # the number must be >= 1 and <= 50. When no physical devices are selected,
+                      # the number must be >= 1 and <= 250.
+                },
               },
-              "testPackageId": "A String", # The java package for the test to be executed.
-                  # The default value is determined by examining the application's manifest.
-              "appPackageId": "A String", # The java package for the application under test.
-                  # The default value is determined by examining the application's manifest.
               "appApk": { # A reference to a file, used for user inputs. # The APK for the application under test.
                   "gcsPath": "A String", # A path to a file in Google Cloud Storage.
-                      # Example: gs://build-app-1414623860166/app-debug-unaligned.apk
+                      # Example: gs://build-app-1414623860166/app%40debug-unaligned.apk
+                      # These paths are expected to be url encoded (percent encoding)
                 },
+              "appPackageId": "A String", # The java package for the application under test.
+                  # The default value is determined by examining the application's manifest.
+              "testRunnerClass": "A String", # The InstrumentationTestRunner class.
+                  # The default value is determined by examining the application's manifest.
+              "testTargets": [ # Each target must be fully qualified with the package name or class name,
+                  # in one of these formats:
+                  #  - "package package_name"
+                  #  - "class package_name.class_name"
+                  #  - "class package_name.class_name#method_name"
+                  #
+                  # If empty, all targets in the module will be run.
+                "A String",
+              ],
+              "appBundle": { # An Android App Bundle file format, containing a BundleConfig.pb file, # A multi-apk app bundle for the application under test.
+                  # a base module directory, zero or more dynamic feature module directories.
+                  # <p>See https://developer.android.com/guide/app-bundle/build for guidance on
+                  # building App Bundles.
+                "bundleLocation": { # A reference to a file, used for user inputs. # .aab file representing the app bundle under test.
+                    "gcsPath": "A String", # A path to a file in Google Cloud Storage.
+                        # Example: gs://build-app-1414623860166/app%40debug-unaligned.apk
+                        # These paths are expected to be url encoded (percent encoding)
+                  },
+              },
+            },
+            "iosTestLoop": { # A test of an iOS application that implements one or more game loop scenarios. # An iOS application with a test loop.
+                # This test type accepts an archived application (.ipa file) and a list of
+                # integer scenarios that will be executed on the app sequentially.
+              "appBundleId": "A String", # Output only. The bundle id for the application under test.
+              "appIpa": { # A reference to a file, used for user inputs. # Required. The .ipa of the application to test.
+                  "gcsPath": "A String", # A path to a file in Google Cloud Storage.
+                      # Example: gs://build-app-1414623860166/app%40debug-unaligned.apk
+                      # These paths are expected to be url encoded (percent encoding)
+                },
+              "scenarios": [ # The list of scenarios that should be run during the test. Defaults to the
+                  # single scenario 0 if unspecified.
+                42,
+              ],
+            },
+            "androidRoboTest": { # A test of an android application that explores the application on a virtual # An Android robo test.
+                # or physical Android Device, finding culprits and crashes as it goes.
+              "appBundle": { # An Android App Bundle file format, containing a BundleConfig.pb file, # A multi-apk app bundle for the application under test.
+                  # a base module directory, zero or more dynamic feature module directories.
+                  # <p>See https://developer.android.com/guide/app-bundle/build for guidance on
+                  # building App Bundles.
+                "bundleLocation": { # A reference to a file, used for user inputs. # .aab file representing the app bundle under test.
+                    "gcsPath": "A String", # A path to a file in Google Cloud Storage.
+                        # Example: gs://build-app-1414623860166/app%40debug-unaligned.apk
+                        # These paths are expected to be url encoded (percent encoding)
+                  },
+              },
+              "roboScript": { # A reference to a file, used for user inputs. # A JSON file with a sequence of actions Robo should perform as a prologue
+                  # for the crawl.
+                  "gcsPath": "A String", # A path to a file in Google Cloud Storage.
+                      # Example: gs://build-app-1414623860166/app%40debug-unaligned.apk
+                      # These paths are expected to be url encoded (percent encoding)
+                },
+              "maxDepth": 42, # The max depth of the traversal stack Robo can explore. Needs to be at least
+                  # 2 to make Robo explore the app beyond the first activity.
+                  # Default is 50.
+              "appInitialActivity": "A String", # The initial activity that should be used to start the app.
+              "roboDirectives": [ # A set of directives Robo should apply during the crawl.
+                  # This allows users to customize the crawl. For example, the username and
+                  # password for a test account can be provided.
+                { # Directs Robo to interact with a specific UI element if it is encountered
+                    # during the crawl. Currently, Robo can perform text entry or element click.
+                  "inputText": "A String", # The text that Robo is directed to set. If left empty, the directive will be
+                      # treated as a CLICK on the element matching the resource_name.
+                  "resourceName": "A String", # Required. The android resource name of the target UI element.
+                      # For example,
+                      #    in Java: R.string.foo
+                      #    in xml: @string/foo
+                      # Only the "foo" part is needed.
+                      # Reference doc:
+                      # https://developer.android.com/guide/topics/resources/accessing-resources.html
+                  "actionType": "A String", # Required. The type of action that Robo should perform on the specified
+                      # element.
+                },
+              ],
+              "appPackageId": "A String", # The java package for the application under test.
+                  # The default value is determined by examining the application's manifest.
+              "startingIntents": [ # The intents used to launch the app for the crawl.
+                  # If none are provided, then the main launcher activity is launched.
+                  # If some are provided, then only those provided are launched (the main
+                  # launcher activity must be provided explicitly).
+                { # Message for specifying the start activities to crawl.
+                  "startActivity": { # A starting intent specified by an action, uri, and categories. # An intent that starts an activity with specific details.
+                    "categories": [ # Intent categories to set on the intent.
+                      "A String",
+                    ],
+                    "action": "A String", # Action name.
+                        # Required for START_ACTIVITY.
+                    "uri": "A String", # URI for the action.
+                  },
+                  "launcherActivity": { # Specifies an intent that starts the main launcher activity. # An intent that starts the main launcher activity.
+                  },
+                  "timeout": "A String", # Timeout in seconds for each intent.
+                },
+              ],
+              "appApk": { # A reference to a file, used for user inputs. # The APK for the application under test.
+                  "gcsPath": "A String", # A path to a file in Google Cloud Storage.
+                      # Example: gs://build-app-1414623860166/app%40debug-unaligned.apk
+                      # These paths are expected to be url encoded (percent encoding)
+                },
+              "maxSteps": 42, # The max number of steps Robo can execute.
+                  # Default is no limit.
             },
             "disablePerformanceMetrics": True or False, # Disables performance metrics recording. May reduce test latency.
             "disableVideoRecording": True or False, # Disables video recording. May reduce test latency.
-          },
-          "id": "A String", # Output only. Unique id set by the service.
-          "timestamp": "A String", # Output only. The time this test execution was initially created.
-          "shard": { # Output only. Details about the shard. # Output only. Details about the shard.
-            "shardIndex": 42, # Output only. The index of the shard among all the shards.
-            "testTargetsForShard": { # Test targets for a shard. # Output only. Test targets for each shard.
-              "testTargets": [ # Group of packages, classes, and/or test methods to be run for each shard.
-                  # The targets need to be specified in AndroidJUnitRunner argument format. For
-                  # example, “package com.my.packages” “class com.my.package.MyClass”.
-                  #
-                  # The number of shard_test_targets must be greater than 0.
+            "androidTestLoop": { # A test of an Android Application with a Test Loop. # An Android Application with a Test Loop.
+                # The intent \<intent-name\> will be implicitly added, since Games is the only
+                # user of this api, for the time being.
+              "scenarioLabels": [ # The list of scenario labels that should be run during the test.
+                  # The scenario labels should map to labels defined in the application's
+                  # manifest. For example, player_experience and
+                  # com.google.test.loops.player_experience add all of the loops labeled in the
+                  # manifest with the com.google.test.loops.player_experience name to the
+                  # execution.
+                  # Scenarios can also be specified in the scenarios field.
                 "A String",
               ],
+              "appPackageId": "A String", # The java package for the application under test.
+                  # The default is determined by examining the application's manifest.
+              "appApk": { # A reference to a file, used for user inputs. # The APK for the application under test.
+                  "gcsPath": "A String", # A path to a file in Google Cloud Storage.
+                      # Example: gs://build-app-1414623860166/app%40debug-unaligned.apk
+                      # These paths are expected to be url encoded (percent encoding)
+                },
+              "appBundle": { # An Android App Bundle file format, containing a BundleConfig.pb file, # A multi-apk app bundle for the application under test.
+                  # a base module directory, zero or more dynamic feature module directories.
+                  # <p>See https://developer.android.com/guide/app-bundle/build for guidance on
+                  # building App Bundles.
+                "bundleLocation": { # A reference to a file, used for user inputs. # .aab file representing the app bundle under test.
+                    "gcsPath": "A String", # A path to a file in Google Cloud Storage.
+                        # Example: gs://build-app-1414623860166/app%40debug-unaligned.apk
+                        # These paths are expected to be url encoded (percent encoding)
+                  },
+              },
+              "scenarios": [ # The list of scenarios that should be run during the test.
+                  # The default is all test loops, derived from the application's
+                  # manifest.
+                42,
+              ],
             },
-            "numShards": 42, # Output only. The total number of shards.
+            "iosXcTest": { # A test of an iOS application that uses the XCTest framework. # An iOS XCTest, via an .xctestrun file.
+                # Xcode supports the option to "build for testing", which generates an
+                # .xctestrun file that contains a test specification (arguments, test methods,
+                # etc). This test type accepts a zip file containing the .xctestrun file and
+                # the corresponding contents of the Build/Products directory that contains all
+                # the binaries needed to run the tests.
+              "testsZip": { # A reference to a file, used for user inputs. # Required. The .zip containing the .xctestrun file and the contents of the
+                  # DerivedData/Build/Products directory.
+                  # The .xctestrun file in this zip is ignored if the xctestrun field is
+                  # specified.
+                  "gcsPath": "A String", # A path to a file in Google Cloud Storage.
+                      # Example: gs://build-app-1414623860166/app%40debug-unaligned.apk
+                      # These paths are expected to be url encoded (percent encoding)
+                },
+              "xcodeVersion": "A String", # The Xcode version that should be used for the test.
+                  # Use the TestEnvironmentDiscoveryService to get supported options.
+                  # Defaults to the latest Xcode version Firebase Test Lab supports.
+              "testSpecialEntitlements": True or False, # The option to test special app entitlements. Setting this would re-sign the
+                  # app having special entitlements with an explicit application-identifier.
+                  # Currently supports testing aps-environment entitlement.
+              "appBundleId": "A String", # Output only. The bundle id for the application under test.
+              "xctestrun": { # A reference to a file, used for user inputs. # An .xctestrun file that will override the .xctestrun file in the
+                  # tests zip. Because the .xctestrun file contains environment variables along
+                  # with test methods to run and/or ignore, this can be useful for sharding
+                  # tests. Default is taken from the tests zip.
+                  "gcsPath": "A String", # A path to a file in Google Cloud Storage.
+                      # Example: gs://build-app-1414623860166/app%40debug-unaligned.apk
+                      # These paths are expected to be url encoded (percent encoding)
+                },
+            },
+            "testSetup": { # A description of how to set up the Android device prior to running the test. # Test setup requirements for Android e.g. files to install, bootstrap
+                # scripts.
+              "environmentVariables": [ # Environment variables to set for the test (only applicable for
+                  # instrumentation tests).
+                { # A key-value pair passed as an environment variable to the test.
+                  "value": "A String", # Value for the environment variable.
+                  "key": "A String", # Key for the environment variable.
+                },
+              ],
+              "dontAutograntPermissions": True or False, # Whether to prevent all runtime permissions to be granted at app install
+              "additionalApks": [ # APKs to install in addition to those being directly tested.
+                  # Currently capped at 100.
+                { # An Android package file to install.
+                  "location": { # A reference to a file, used for user inputs. # The path to an APK to be installed on the device before the test begins.
+                      "gcsPath": "A String", # A path to a file in Google Cloud Storage.
+                          # Example: gs://build-app-1414623860166/app%40debug-unaligned.apk
+                          # These paths are expected to be url encoded (percent encoding)
+                    },
+                  "packageName": "A String", # The java package for the APK to be installed.
+                      # Value is determined by examining the application's manifest.
+                },
+              ],
+              "systrace": { # Systrace configuration for the run.
+                  # If set a systrace will be taken, starting on test start and lasting for the
+                  # configured duration. The systrace file thus obtained is put in the results
+                  # bucket together with the other artifacts from the run.
+                "durationSeconds": 42, # Systrace duration in seconds.
+                    # Should be between 1 and 30 seconds. 0 disables systrace.
+              },
+              "filesToPush": [ # List of files to push to the device before starting the test.
+                { # A single device file description.
+                  "regularFile": { # A file or directory to install on the device before the test starts. # A reference to a regular file.
+                    "devicePath": "A String", # Required. Where to put the content on the device. Must be an absolute,
+                        # allowlisted path. If the file exists, it will be replaced.
+                        # The following device-side directories and any of their subdirectories are
+                        # allowlisted:
+                        # <p>${EXTERNAL_STORAGE}, /sdcard, or /storage</p>
+                        # <p>${ANDROID_DATA}/local/tmp, or /data/local/tmp</p>
+                        # <p>Specifying a path outside of these directory trees is invalid.
+                        #
+                        # <p> The paths /sdcard and /data will be made available and treated as
+                        # implicit path substitutions. E.g. if /sdcard on a particular device does
+                        # not map to external storage, the system will replace it with the external
+                        # storage path prefix for that device and copy the file there.
+                        #
+                        # <p> It is strongly advised to use the <a href=
+                        # "http://developer.android.com/reference/android/os/Environment.html">
+                        # Environment API</a> in app and test code to access files on the device in a
+                        # portable way.
+                    "content": { # A reference to a file, used for user inputs. # Required. The source file.
+                        "gcsPath": "A String", # A path to a file in Google Cloud Storage.
+                            # Example: gs://build-app-1414623860166/app%40debug-unaligned.apk
+                            # These paths are expected to be url encoded (percent encoding)
+                      },
+                  },
+                  "obbFile": { # An opaque binary blob file to install on the device before the test starts. # A reference to an opaque binary blob file.
+                    "obb": { # A reference to a file, used for user inputs. # Required. Opaque Binary Blob (OBB) file(s) to install on the device.
+                        "gcsPath": "A String", # A path to a file in Google Cloud Storage.
+                            # Example: gs://build-app-1414623860166/app%40debug-unaligned.apk
+                            # These paths are expected to be url encoded (percent encoding)
+                      },
+                    "obbFileName": "A String", # Required. OBB file name which must conform to the format as specified by
+                        # Android
+                        # e.g. [main|patch].0300110.com.example.android.obb
+                        # which will be installed into
+                        #   \<shared-storage\>/Android/obb/\<package-name\>/
+                        # on the device.
+                  },
+                },
+              ],
+              "networkProfile": "A String", # The network traffic profile used for running the test.
+                  # Available network profiles can be queried by using the
+                  # NETWORK_CONFIGURATION environment type when calling
+                  # TestEnvironmentDiscoveryService.GetTestEnvironmentCatalog.
+              "directoriesToPull": [ # List of directories on the device to upload to GCS at the end of the test;
+                  # they must be absolute paths under /sdcard, /storage or /data/local/tmp.
+                  # Path names are restricted to characters a-z A-Z 0-9 _ - . + and /
+                  #
+                  # Note: The paths /sdcard and /data will be made available and treated as
+                  # implicit path substitutions. E.g. if /sdcard on a particular device does
+                  # not map to external storage, the system will replace it with the external
+                  # storage path prefix for that device.
+                "A String",
+              ],
+              "account": { # Identifies an account and how to log into it. # The device will be logged in on this account for the duration of the test.
+                "googleAuto": { # Enables automatic Google account login. # An automatic google login account.
+                    # If set, the service automatically generates a Google test account and adds
+                    # it to the device, before executing the test. Note that test accounts might be
+                    # reused.
+                    # Many applications show their full set of functionalities when an account is
+                    # present on the device. Logging into the device with these generated accounts
+                    # allows testing more functionalities.
+                },
+              },
+            },
+            "testTimeout": "A String", # Max time a test execution is allowed to run before it is
+                # automatically cancelled.
+                # The default value is 5 min.
+            "iosTestSetup": { # A description of how to set up an iOS device prior to running the test. # Test setup requirements for iOS.
+              "networkProfile": "A String", # The network traffic profile used for running the test.
+                  # Available network profiles can be queried by using the
+                  # NETWORK_CONFIGURATION environment type when calling
+                  # TestEnvironmentDiscoveryService.GetTestEnvironmentCatalog.
+            },
           },
-          "matrixId": "A String", # Output only. Id of the containing TestMatrix.
-          "testDetails": { # Additional details about the progress of the running test. # Output only. Additional details about the running test.
-            "errorMessage": "A String", # Output only. If the TestState is ERROR, then this string will contain
-                # human-readable details about the error.
-            "progressMessages": [ # Output only. Human-readable, detailed descriptions of the test's progress.
-                # For example: "Provisioning a device", "Starting Test".
-                #
-                # During the course of execution new data may be appended
-                # to the end of progress_messages.
-              "A String",
-            ],
+          "state": "A String", # Output only. Indicates the current progress of the test execution
+              # (e.g., FINISHED).
+          "toolResultsStep": { # Represents a tool results step resource. # Output only. Where the results for this execution are written.
+              #
+              # This has the results of a TestExecution.
+            "stepId": "A String", # Output only. A tool results step ID.
+            "projectId": "A String", # Output only. The cloud project that owns the tool results step.
+            "historyId": "A String", # Output only. A tool results history ID.
+            "executionId": "A String", # Output only. A tool results execution ID.
           },
         },
       ],
       "environmentMatrix": { # The matrix of environments in which the test is to be executed. # Required. The devices the tests are being executed on.
+        "iosDeviceList": { # A list of iOS device configurations in which the test is to be executed. # A list of iOS devices.
+          "iosDevices": [ # Required. A list of iOS devices.
+            { # A single iOS device.
+              "iosModelId": "A String", # Required. The id of the iOS device to be used.
+                  # Use the TestEnvironmentDiscoveryService to get supported options.
+              "orientation": "A String", # Required. How the device is oriented during the test.
+                  # Use the TestEnvironmentDiscoveryService to get supported options.
+              "iosVersionId": "A String", # Required. The id of the iOS major software version to be used.
+                  # Use the TestEnvironmentDiscoveryService to get supported options.
+              "locale": "A String", # Required. The locale the test device used for testing.
+                  # Use the TestEnvironmentDiscoveryService to get supported options.
+            },
+          ],
+        },
         "androidMatrix": { # A set of Android device configuration permutations is defined by the # A matrix of Android devices.
             # the cross-product of the given axes. Internally, the given AndroidMatrix
             # will be expanded into a set of AndroidDevices.
             #
             # Only supported permutations will be instantiated.  Invalid permutations
             # (e.g., incompatible models/versions) are ignored.
-          "androidModelIds": [ # Required. The ids of the set of Android device to be used.
-              # Use the TestEnvironmentDiscoveryService to get supported options.
-            "A String",
-          ],
           "orientations": [ # Required. The set of orientations to test with.
               # Use the TestEnvironmentDiscoveryService to get supported options.
             "A String",
@@ -1732,65 +1809,64 @@
               # Use the TestEnvironmentDiscoveryService to get supported options.
             "A String",
           ],
-        },
-        "iosDeviceList": { # A list of iOS device configurations in which the test is to be executed. # A list of iOS devices.
-          "iosDevices": [ # Required. A list of iOS devices.
-            { # A single iOS device.
-              "orientation": "A String", # Required. How the device is oriented during the test.
-                  # Use the TestEnvironmentDiscoveryService to get supported options.
-              "iosVersionId": "A String", # Required. The id of the iOS major software version to be used.
-                  # Use the TestEnvironmentDiscoveryService to get supported options.
-              "locale": "A String", # Required. The locale the test device used for testing.
-                  # Use the TestEnvironmentDiscoveryService to get supported options.
-              "iosModelId": "A String", # Required. The id of the iOS device to be used.
-                  # Use the TestEnvironmentDiscoveryService to get supported options.
-            },
+          "androidModelIds": [ # Required. The ids of the set of Android device to be used.
+              # Use the TestEnvironmentDiscoveryService to get supported options.
+            "A String",
           ],
         },
         "androidDeviceList": { # A list of Android device configurations in which the test is to be executed. # A list of Android devices; the test will be run only on the specified
             # devices.
           "androidDevices": [ # Required. A list of Android devices.
             { # A single Android device.
-              "orientation": "A String", # Required. How the device is oriented during the test.
-                  # Use the TestEnvironmentDiscoveryService to get supported options.
-              "locale": "A String", # Required. The locale the test device used for testing.
-                  # Use the TestEnvironmentDiscoveryService to get supported options.
               "androidModelId": "A String", # Required. The id of the Android device to be used.
                   # Use the TestEnvironmentDiscoveryService to get supported options.
               "androidVersionId": "A String", # Required. The id of the Android OS version to be used.
                   # Use the TestEnvironmentDiscoveryService to get supported options.
+              "locale": "A String", # Required. The locale the test device used for testing.
+                  # Use the TestEnvironmentDiscoveryService to get supported options.
+              "orientation": "A String", # Required. How the device is oriented during the test.
+                  # Use the TestEnvironmentDiscoveryService to get supported options.
             },
           ],
         },
       },
+      "outcomeSummary": "A String", # Output Only. The overall outcome of the test.
+          # Only set when the test matrix state is FINISHED.
       "resultStorage": { # Locations where the results of running the test are stored. # Required. Where the results for the matrix are written.
         "toolResultsExecution": { # Represents a tool results execution resource. # Output only. The tool results execution that results are written to.
             #
             # This has the results of a TestMatrix.
+          "executionId": "A String", # Output only. A tool results execution ID.
           "projectId": "A String", # Output only. The cloud project that owns the tool results execution.
           "historyId": "A String", # Output only. A tool results history ID.
-          "executionId": "A String", # Output only. A tool results execution ID.
         },
         "resultsUrl": "A String", # Output only. URL to the results in the Firebase Web Console.
-        "toolResultsHistory": { # Represents a tool results history resource. # The tool results history that contains the tool results execution that
-            # results are written to.
-            #
-            # If not provided, the service will choose an appropriate value.
-          "projectId": "A String", # Required. The cloud project that owns the tool results history.
-          "historyId": "A String", # Required. A tool results history ID.
-        },
         "googleCloudStorage": { # A storage location within Google cloud storage (GCS). # Required.
           "gcsPath": "A String", # Required. The path to a directory in GCS that will
               # eventually contain the results for this test.
               # The requesting user must have write access on the bucket in the supplied
               # path.
         },
+        "toolResultsHistory": { # Represents a tool results history resource. # The tool results history that contains the tool results execution that
+            # results are written to.
+            #
+            # If not provided, the service will choose an appropriate value.
+          "historyId": "A String", # Required. A tool results history ID.
+          "projectId": "A String", # Required. The cloud project that owns the tool results history.
+        },
       },
-      "testMatrixId": "A String", # Output only. Unique id set by the service.
       "invalidMatrixDetails": "A String", # Output only. Describes why the matrix is considered invalid.
           # Only useful for matrices in the INVALID state.
-      "outcomeSummary": "A String", # Output Only. The overall outcome of the test.
-          # Only set when the test matrix state is FINISHED.
+      "clientInfo": { # Information about the client which invoked the test. # Information about the client which invoked the test.
+        "clientInfoDetails": [ # The list of detailed information about client.
+          { # Key-value pair of detailed information about the client which invoked the
+              # test. Examples: {'Version', '1.0'}, {'Release Track', 'BETA'}.
+            "key": "A String", # Required. The key of detailed client information.
+            "value": "A String", # Required. The value of detailed client information.
+          },
+        ],
+        "name": "A String", # Required. Client name, such as gcloud.
+      },
     }</pre>
 </div>
 
@@ -1818,246 +1894,15 @@
     { # TestMatrix captures all details about a test. It contains the environment
         # configuration, test specification, test executions and overall state and
         # outcome.
+      &quot;projectId&quot;: &quot;A String&quot;, # The cloud project that owns the test matrix.
+      &quot;timestamp&quot;: &quot;A String&quot;, # Output only. The time this test matrix was initially created.
+      &quot;flakyTestAttempts&quot;: 42, # The number of times a TestExecution should be re-attempted if one or more
+          # of its test cases fail for any reason.
+          # The maximum number of reruns allowed is 10.
+          #
+          # Default is 0, which implies no reruns.
+      &quot;testMatrixId&quot;: &quot;A String&quot;, # Output only. Unique id set by the service.
       &quot;testSpecification&quot;: { # A description of how to run the test. # Required. How to run the test.
-        &quot;iosXcTest&quot;: { # A test of an iOS application that uses the XCTest framework. # An iOS XCTest, via an .xctestrun file.
-            # Xcode supports the option to &quot;build for testing&quot;, which generates an
-            # .xctestrun file that contains a test specification (arguments, test methods,
-            # etc). This test type accepts a zip file containing the .xctestrun file and
-            # the corresponding contents of the Build/Products directory that contains all
-            # the binaries needed to run the tests.
-          &quot;xcodeVersion&quot;: &quot;A String&quot;, # The Xcode version that should be used for the test.
-              # Use the TestEnvironmentDiscoveryService to get supported options.
-              # Defaults to the latest Xcode version Firebase Test Lab supports.
-          &quot;appBundleId&quot;: &quot;A String&quot;, # Output only. The bundle id for the application under test.
-          &quot;xctestrun&quot;: { # A reference to a file, used for user inputs. # An .xctestrun file that will override the .xctestrun file in the
-              # tests zip. Because the .xctestrun file contains environment variables along
-              # with test methods to run and/or ignore, this can be useful for sharding
-              # tests. Default is taken from the tests zip.
-              &quot;gcsPath&quot;: &quot;A String&quot;, # A path to a file in Google Cloud Storage.
-                  # Example: gs://build-app-1414623860166/app-debug-unaligned.apk
-            },
-          &quot;testSpecialEntitlements&quot;: True or False, # The option to test special app entitlements. Setting this would re-sign the
-              # app having special entitlements with an explicit application-identifier.
-              # Currently supports testing aps-environment entitlement.
-          &quot;testsZip&quot;: { # A reference to a file, used for user inputs. # Required. The .zip containing the .xctestrun file and the contents of the
-              # DerivedData/Build/Products directory.
-              # The .xctestrun file in this zip is ignored if the xctestrun field is
-              # specified.
-              &quot;gcsPath&quot;: &quot;A String&quot;, # A path to a file in Google Cloud Storage.
-                  # Example: gs://build-app-1414623860166/app-debug-unaligned.apk
-            },
-        },
-        &quot;iosTestLoop&quot;: { # A test of an iOS application that implements one or more game loop scenarios. # An iOS application with a test loop.
-            # This test type accepts an archived application (.ipa file) and a list of
-            # integer scenarios that will be executed on the app sequentially.
-          &quot;scenarios&quot;: [ # The list of scenarios that should be run during the test. Defaults to the
-              # single scenario 0 if unspecified.
-            42,
-          ],
-          &quot;appBundleId&quot;: &quot;A String&quot;, # Output only. The bundle id for the application under test.
-          &quot;appIpa&quot;: { # A reference to a file, used for user inputs. # Required. The .ipa of the application to test.
-              &quot;gcsPath&quot;: &quot;A String&quot;, # A path to a file in Google Cloud Storage.
-                  # Example: gs://build-app-1414623860166/app-debug-unaligned.apk
-            },
-        },
-        &quot;testTimeout&quot;: &quot;A String&quot;, # Max time a test execution is allowed to run before it is
-            # automatically cancelled.
-            # The default value is 5 min.
-        &quot;iosTestSetup&quot;: { # A description of how to set up an iOS device prior to running the test. # Test setup requirements for iOS.
-          &quot;networkProfile&quot;: &quot;A String&quot;, # The network traffic profile used for running the test.
-              # Available network profiles can be queried by using the
-              # NETWORK_CONFIGURATION environment type when calling
-              # TestEnvironmentDiscoveryService.GetTestEnvironmentCatalog.
-        },
-        &quot;androidTestLoop&quot;: { # A test of an Android Application with a Test Loop. # An Android Application with a Test Loop.
-            # The intent \&lt;intent-name\&gt; will be implicitly added, since Games is the only
-            # user of this api, for the time being.
-          &quot;appApk&quot;: { # A reference to a file, used for user inputs. # The APK for the application under test.
-              &quot;gcsPath&quot;: &quot;A String&quot;, # A path to a file in Google Cloud Storage.
-                  # Example: gs://build-app-1414623860166/app-debug-unaligned.apk
-            },
-          &quot;appPackageId&quot;: &quot;A String&quot;, # The java package for the application under test.
-              # The default is determined by examining the application&#x27;s manifest.
-          &quot;appBundle&quot;: { # An Android App Bundle file format, containing a BundleConfig.pb file, # A multi-apk app bundle for the application under test.
-              # a base module directory, zero or more dynamic feature module directories.
-              # &lt;p&gt;See https://developer.android.com/guide/app-bundle/build for guidance on
-              # building App Bundles.
-            &quot;bundleLocation&quot;: { # A reference to a file, used for user inputs. # .aab file representing the app bundle under test.
-                &quot;gcsPath&quot;: &quot;A String&quot;, # A path to a file in Google Cloud Storage.
-                    # Example: gs://build-app-1414623860166/app-debug-unaligned.apk
-              },
-          },
-          &quot;scenarios&quot;: [ # The list of scenarios that should be run during the test.
-              # The default is all test loops, derived from the application&#x27;s
-              # manifest.
-            42,
-          ],
-          &quot;scenarioLabels&quot;: [ # The list of scenario labels that should be run during the test.
-              # The scenario labels should map to labels defined in the application&#x27;s
-              # manifest. For example, player_experience and
-              # com.google.test.loops.player_experience add all of the loops labeled in the
-              # manifest with the com.google.test.loops.player_experience name to the
-              # execution.
-              # Scenarios can also be specified in the scenarios field.
-            &quot;A String&quot;,
-          ],
-        },
-        &quot;testSetup&quot;: { # A description of how to set up the Android device prior to running the test. # Test setup requirements for Android e.g. files to install, bootstrap
-            # scripts.
-          &quot;filesToPush&quot;: [ # List of files to push to the device before starting the test.
-            { # A single device file description.
-              &quot;obbFile&quot;: { # An opaque binary blob file to install on the device before the test starts. # A reference to an opaque binary blob file.
-                &quot;obbFileName&quot;: &quot;A String&quot;, # Required. OBB file name which must conform to the format as specified by
-                    # Android
-                    # e.g. [main|patch].0300110.com.example.android.obb
-                    # which will be installed into
-                    #   \&lt;shared-storage\&gt;/Android/obb/\&lt;package-name\&gt;/
-                    # on the device.
-                &quot;obb&quot;: { # A reference to a file, used for user inputs. # Required. Opaque Binary Blob (OBB) file(s) to install on the device.
-                    &quot;gcsPath&quot;: &quot;A String&quot;, # A path to a file in Google Cloud Storage.
-                        # Example: gs://build-app-1414623860166/app-debug-unaligned.apk
-                  },
-              },
-              &quot;regularFile&quot;: { # A file or directory to install on the device before the test starts. # A reference to a regular file.
-                &quot;content&quot;: { # A reference to a file, used for user inputs. # Required. The source file.
-                    &quot;gcsPath&quot;: &quot;A String&quot;, # A path to a file in Google Cloud Storage.
-                        # Example: gs://build-app-1414623860166/app-debug-unaligned.apk
-                  },
-                &quot;devicePath&quot;: &quot;A String&quot;, # Required. Where to put the content on the device. Must be an absolute,
-                    # whitelisted path. If the file exists, it will be replaced.
-                    # The following device-side directories and any of their subdirectories are
-                    # whitelisted:
-                    # &lt;p&gt;${EXTERNAL_STORAGE}, or /sdcard&lt;/p&gt;
-                    # &lt;p&gt;${ANDROID_DATA}/local/tmp, or /data/local/tmp&lt;/p&gt;
-                    # &lt;p&gt;Specifying a path outside of these directory trees is invalid.
-                    #
-                    # &lt;p&gt; The paths /sdcard and /data will be made available and treated as
-                    # implicit path substitutions. E.g. if /sdcard on a particular device does
-                    # not map to external storage, the system will replace it with the external
-                    # storage path prefix for that device and copy the file there.
-                    #
-                    # &lt;p&gt; It is strongly advised to use the &lt;a href=
-                    # &quot;http://developer.android.com/reference/android/os/Environment.html&quot;&gt;
-                    # Environment API&lt;/a&gt; in app and test code to access files on the device in a
-                    # portable way.
-              },
-            },
-          ],
-          &quot;account&quot;: { # Identifies an account and how to log into it. # The device will be logged in on this account for the duration of the test.
-            &quot;googleAuto&quot;: { # Enables automatic Google account login. # An automatic google login account.
-                # If set, the service automatically generates a Google test account and adds
-                # it to the device, before executing the test. Note that test accounts might be
-                # reused.
-                # Many applications show their full set of functionalities when an account is
-                # present on the device. Logging into the device with these generated accounts
-                # allows testing more functionalities.
-            },
-          },
-          &quot;systrace&quot;: { # Systrace configuration for the run.
-              # If set a systrace will be taken, starting on test start and lasting for the
-              # configured duration. The systrace file thus obtained is put in the results
-              # bucket together with the other artifacts from the run.
-            &quot;durationSeconds&quot;: 42, # Systrace duration in seconds.
-                # Should be between 1 and 30 seconds. 0 disables systrace.
-          },
-          &quot;directoriesToPull&quot;: [ # List of directories on the device to upload to GCS at the end of the test;
-              # they must be absolute paths under /sdcard or /data/local/tmp.
-              # Path names are restricted to characters a-z A-Z 0-9 _ - . + and /
-              #
-              # Note: The paths /sdcard and /data will be made available and treated as
-              # implicit path substitutions. E.g. if /sdcard on a particular device does
-              # not map to external storage, the system will replace it with the external
-              # storage path prefix for that device.
-            &quot;A String&quot;,
-          ],
-          &quot;networkProfile&quot;: &quot;A String&quot;, # The network traffic profile used for running the test.
-              # Available network profiles can be queried by using the
-              # NETWORK_CONFIGURATION environment type when calling
-              # TestEnvironmentDiscoveryService.GetTestEnvironmentCatalog.
-          &quot;environmentVariables&quot;: [ # Environment variables to set for the test (only applicable for
-              # instrumentation tests).
-            { # A key-value pair passed as an environment variable to the test.
-              &quot;value&quot;: &quot;A String&quot;, # Value for the environment variable.
-              &quot;key&quot;: &quot;A String&quot;, # Key for the environment variable.
-            },
-          ],
-          &quot;additionalApks&quot;: [ # APKs to install in addition to those being directly tested.
-              # Currently capped at 100.
-            { # An Android package file to install.
-              &quot;location&quot;: { # A reference to a file, used for user inputs. # The path to an APK to be installed on the device before the test begins.
-                  &quot;gcsPath&quot;: &quot;A String&quot;, # A path to a file in Google Cloud Storage.
-                      # Example: gs://build-app-1414623860166/app-debug-unaligned.apk
-                },
-              &quot;packageName&quot;: &quot;A String&quot;, # The java package for the APK to be installed.
-                  # Value is determined by examining the application&#x27;s manifest.
-            },
-          ],
-        },
-        &quot;androidRoboTest&quot;: { # A test of an android application that explores the application on a virtual # An Android robo test.
-            # or physical Android Device, finding culprits and crashes as it goes.
-          &quot;maxDepth&quot;: 42, # The max depth of the traversal stack Robo can explore. Needs to be at least
-              # 2 to make Robo explore the app beyond the first activity.
-              # Default is 50.
-          &quot;appPackageId&quot;: &quot;A String&quot;, # The java package for the application under test.
-              # The default value is determined by examining the application&#x27;s manifest.
-          &quot;appApk&quot;: { # A reference to a file, used for user inputs. # The APK for the application under test.
-              &quot;gcsPath&quot;: &quot;A String&quot;, # A path to a file in Google Cloud Storage.
-                  # Example: gs://build-app-1414623860166/app-debug-unaligned.apk
-            },
-          &quot;startingIntents&quot;: [ # The intents used to launch the app for the crawl.
-              # If none are provided, then the main launcher activity is launched.
-              # If some are provided, then only those provided are launched (the main
-              # launcher activity must be provided explicitly).
-            { # Message for specifying the start activities to crawl.
-              &quot;timeout&quot;: &quot;A String&quot;, # Timeout in seconds for each intent.
-              &quot;startActivity&quot;: { # A starting intent specified by an action, uri, and categories. # An intent that starts an activity with specific details.
-                &quot;uri&quot;: &quot;A String&quot;, # URI for the action.
-                &quot;categories&quot;: [ # Intent categories to set on the intent.
-                  &quot;A String&quot;,
-                ],
-                &quot;action&quot;: &quot;A String&quot;, # Action name.
-                    # Required for START_ACTIVITY.
-              },
-              &quot;launcherActivity&quot;: { # Specifies an intent that starts the main launcher activity. # An intent that starts the main launcher activity.
-              },
-            },
-          ],
-          &quot;maxSteps&quot;: 42, # The max number of steps Robo can execute.
-              # Default is no limit.
-          &quot;appInitialActivity&quot;: &quot;A String&quot;, # The initial activity that should be used to start the app.
-          &quot;roboDirectives&quot;: [ # A set of directives Robo should apply during the crawl.
-              # This allows users to customize the crawl. For example, the username and
-              # password for a test account can be provided.
-            { # Directs Robo to interact with a specific UI element if it is encountered
-                # during the crawl. Currently, Robo can perform text entry or element click.
-              &quot;actionType&quot;: &quot;A String&quot;, # Required. The type of action that Robo should perform on the specified
-                  # element.
-              &quot;resourceName&quot;: &quot;A String&quot;, # Required. The android resource name of the target UI element.
-                  # For example,
-                  #    in Java: R.string.foo
-                  #    in xml: @string/foo
-                  # Only the &quot;foo&quot; part is needed.
-                  # Reference doc:
-                  # https://developer.android.com/guide/topics/resources/accessing-resources.html
-              &quot;inputText&quot;: &quot;A String&quot;, # The text that Robo is directed to set. If left empty, the directive will be
-                  # treated as a CLICK on the element matching the resource_name.
-            },
-          ],
-          &quot;appBundle&quot;: { # An Android App Bundle file format, containing a BundleConfig.pb file, # A multi-apk app bundle for the application under test.
-              # a base module directory, zero or more dynamic feature module directories.
-              # &lt;p&gt;See https://developer.android.com/guide/app-bundle/build for guidance on
-              # building App Bundles.
-            &quot;bundleLocation&quot;: { # A reference to a file, used for user inputs. # .aab file representing the app bundle under test.
-                &quot;gcsPath&quot;: &quot;A String&quot;, # A path to a file in Google Cloud Storage.
-                    # Example: gs://build-app-1414623860166/app-debug-unaligned.apk
-              },
-          },
-          &quot;roboScript&quot;: { # A reference to a file, used for user inputs. # A JSON file with a sequence of actions Robo should perform as a prologue
-              # for the crawl.
-              &quot;gcsPath&quot;: &quot;A String&quot;, # A path to a file in Google Cloud Storage.
-                  # Example: gs://build-app-1414623860166/app-debug-unaligned.apk
-            },
-        },
         &quot;androidInstrumentationTest&quot;: { # A test of an Android application that can control an Android component # An Android instrumentation test.
             # independently of its normal lifecycle.
             # Android instrumentation tests run an application APK and test APK inside the
@@ -2067,15 +1912,11 @@
             #
             # See &lt;http://developer.android.com/tools/testing/testing_android.html&gt; for
             # more information on types of Android tests.
-          &quot;appBundle&quot;: { # An Android App Bundle file format, containing a BundleConfig.pb file, # A multi-apk app bundle for the application under test.
-              # a base module directory, zero or more dynamic feature module directories.
-              # &lt;p&gt;See https://developer.android.com/guide/app-bundle/build for guidance on
-              # building App Bundles.
-            &quot;bundleLocation&quot;: { # A reference to a file, used for user inputs. # .aab file representing the app bundle under test.
-                &quot;gcsPath&quot;: &quot;A String&quot;, # A path to a file in Google Cloud Storage.
-                    # Example: gs://build-app-1414623860166/app-debug-unaligned.apk
-              },
-          },
+          &quot;testApk&quot;: { # A reference to a file, used for user inputs. # Required. The APK containing the test code to be executed.
+              &quot;gcsPath&quot;: &quot;A String&quot;, # A path to a file in Google Cloud Storage.
+                  # Example: gs://build-app-1414623860166/app%40debug-unaligned.apk
+                  # These paths are expected to be url encoded (percent encoding)
+            },
           &quot;orchestratorOption&quot;: &quot;A String&quot;, # The option of whether running each test within its own invocation of
               # instrumentation with Android Test Orchestrator or not.
               # ** Orchestrator is only compatible with AndroidJUnitRunner version 1.0 or
@@ -2090,29 +1931,9 @@
               # for more information about Android Test Orchestrator.
               #
               # If not set, the test will be run without the orchestrator.
-          &quot;testTargets&quot;: [ # Each target must be fully qualified with the package name or class name,
-              # in one of these formats:
-              #  - &quot;package package_name&quot;
-              #  - &quot;class package_name.class_name&quot;
-              #  - &quot;class package_name.class_name#method_name&quot;
-              #
-              # If empty, all targets in the module will be run.
-            &quot;A String&quot;,
-          ],
-          &quot;testApk&quot;: { # A reference to a file, used for user inputs. # Required. The APK containing the test code to be executed.
-              &quot;gcsPath&quot;: &quot;A String&quot;, # A path to a file in Google Cloud Storage.
-                  # Example: gs://build-app-1414623860166/app-debug-unaligned.apk
-            },
-          &quot;testRunnerClass&quot;: &quot;A String&quot;, # The InstrumentationTestRunner class.
+          &quot;testPackageId&quot;: &quot;A String&quot;, # The java package for the test to be executed.
               # The default value is determined by examining the application&#x27;s manifest.
           &quot;shardingOption&quot;: { # Options for enabling sharding. # The option to run tests in multiple shards in parallel.
-            &quot;uniformSharding&quot;: { # Uniformly shards test cases given a total number of shards. # Uniformly shards test cases given a total number of shards.
-                #
-                # For Instrumentation test, it will be translated to “-e numShard” “-e
-                # shardIndex” AndroidJUnitRunner arguments. With uniform sharding enabled,
-                # specifying these sharding arguments via environment_variables is invalid.
-              &quot;numShards&quot;: 42, # Required. Total number of shards. The number must be &gt;= 1 and &lt;= 50.
-            },
             &quot;manualSharding&quot;: { # Shards test cases into the specified groups of packages, classes, and/or # Shards test cases into the specified groups of packages, classes, and/or
                 # methods.
                 # methods.
@@ -2120,7 +1941,9 @@
                 # With manual sharding enabled, specifying test targets via
                 # environment_variables or in InstrumentationTest is invalid.
               &quot;testTargetsForShard&quot;: [ # Required. Group of packages, classes, and/or test methods to be run for
-                  # each shard. The number of shard_test_targets must be &gt;= 1 and &lt;= 50.
+                  # each shard. When any physical devices are selected,  the number of
+                  # test_targets_for_shard must be &gt;= 1 and &lt;= 50. When no physical devices are
+                  # selected, the number must be &gt;= 1 and &lt;= 250.
                 { # Test targets for a shard.
                   &quot;testTargets&quot;: [ # Group of packages, classes, and/or test methods to be run for each shard.
                       # The targets need to be specified in AndroidJUnitRunner argument format. For
@@ -2132,313 +1955,354 @@
                 },
               ],
             },
+            &quot;uniformSharding&quot;: { # Uniformly shards test cases given a total number of shards. # Uniformly shards test cases given a total number of shards.
+                #
+                # For Instrumentation test, it will be translated to “-e numShard” “-e
+                # shardIndex” AndroidJUnitRunner arguments. With uniform sharding enabled,
+                # specifying these sharding arguments via environment_variables is invalid.
+              &quot;numShards&quot;: 42, # Required. Total number of shards. When any physical devices are selected,
+                  # the number must be &gt;= 1 and &lt;= 50. When no physical devices are selected,
+                  # the number must be &gt;= 1 and &lt;= 250.
+            },
           },
-          &quot;testPackageId&quot;: &quot;A String&quot;, # The java package for the test to be executed.
-              # The default value is determined by examining the application&#x27;s manifest.
-          &quot;appPackageId&quot;: &quot;A String&quot;, # The java package for the application under test.
-              # The default value is determined by examining the application&#x27;s manifest.
           &quot;appApk&quot;: { # A reference to a file, used for user inputs. # The APK for the application under test.
               &quot;gcsPath&quot;: &quot;A String&quot;, # A path to a file in Google Cloud Storage.
-                  # Example: gs://build-app-1414623860166/app-debug-unaligned.apk
+                  # Example: gs://build-app-1414623860166/app%40debug-unaligned.apk
+                  # These paths are expected to be url encoded (percent encoding)
             },
+          &quot;appPackageId&quot;: &quot;A String&quot;, # The java package for the application under test.
+              # The default value is determined by examining the application&#x27;s manifest.
+          &quot;testRunnerClass&quot;: &quot;A String&quot;, # The InstrumentationTestRunner class.
+              # The default value is determined by examining the application&#x27;s manifest.
+          &quot;testTargets&quot;: [ # Each target must be fully qualified with the package name or class name,
+              # in one of these formats:
+              #  - &quot;package package_name&quot;
+              #  - &quot;class package_name.class_name&quot;
+              #  - &quot;class package_name.class_name#method_name&quot;
+              #
+              # If empty, all targets in the module will be run.
+            &quot;A String&quot;,
+          ],
+          &quot;appBundle&quot;: { # An Android App Bundle file format, containing a BundleConfig.pb file, # A multi-apk app bundle for the application under test.
+              # a base module directory, zero or more dynamic feature module directories.
+              # &lt;p&gt;See https://developer.android.com/guide/app-bundle/build for guidance on
+              # building App Bundles.
+            &quot;bundleLocation&quot;: { # A reference to a file, used for user inputs. # .aab file representing the app bundle under test.
+                &quot;gcsPath&quot;: &quot;A String&quot;, # A path to a file in Google Cloud Storage.
+                    # Example: gs://build-app-1414623860166/app%40debug-unaligned.apk
+                    # These paths are expected to be url encoded (percent encoding)
+              },
+          },
+        },
+        &quot;iosTestLoop&quot;: { # A test of an iOS application that implements one or more game loop scenarios. # An iOS application with a test loop.
+            # This test type accepts an archived application (.ipa file) and a list of
+            # integer scenarios that will be executed on the app sequentially.
+          &quot;appBundleId&quot;: &quot;A String&quot;, # Output only. The bundle id for the application under test.
+          &quot;appIpa&quot;: { # A reference to a file, used for user inputs. # Required. The .ipa of the application to test.
+              &quot;gcsPath&quot;: &quot;A String&quot;, # A path to a file in Google Cloud Storage.
+                  # Example: gs://build-app-1414623860166/app%40debug-unaligned.apk
+                  # These paths are expected to be url encoded (percent encoding)
+            },
+          &quot;scenarios&quot;: [ # The list of scenarios that should be run during the test. Defaults to the
+              # single scenario 0 if unspecified.
+            42,
+          ],
+        },
+        &quot;androidRoboTest&quot;: { # A test of an android application that explores the application on a virtual # An Android robo test.
+            # or physical Android Device, finding culprits and crashes as it goes.
+          &quot;appBundle&quot;: { # An Android App Bundle file format, containing a BundleConfig.pb file, # A multi-apk app bundle for the application under test.
+              # a base module directory, zero or more dynamic feature module directories.
+              # &lt;p&gt;See https://developer.android.com/guide/app-bundle/build for guidance on
+              # building App Bundles.
+            &quot;bundleLocation&quot;: { # A reference to a file, used for user inputs. # .aab file representing the app bundle under test.
+                &quot;gcsPath&quot;: &quot;A String&quot;, # A path to a file in Google Cloud Storage.
+                    # Example: gs://build-app-1414623860166/app%40debug-unaligned.apk
+                    # These paths are expected to be url encoded (percent encoding)
+              },
+          },
+          &quot;roboScript&quot;: { # A reference to a file, used for user inputs. # A JSON file with a sequence of actions Robo should perform as a prologue
+              # for the crawl.
+              &quot;gcsPath&quot;: &quot;A String&quot;, # A path to a file in Google Cloud Storage.
+                  # Example: gs://build-app-1414623860166/app%40debug-unaligned.apk
+                  # These paths are expected to be url encoded (percent encoding)
+            },
+          &quot;maxDepth&quot;: 42, # The max depth of the traversal stack Robo can explore. Needs to be at least
+              # 2 to make Robo explore the app beyond the first activity.
+              # Default is 50.
+          &quot;appInitialActivity&quot;: &quot;A String&quot;, # The initial activity that should be used to start the app.
+          &quot;roboDirectives&quot;: [ # A set of directives Robo should apply during the crawl.
+              # This allows users to customize the crawl. For example, the username and
+              # password for a test account can be provided.
+            { # Directs Robo to interact with a specific UI element if it is encountered
+                # during the crawl. Currently, Robo can perform text entry or element click.
+              &quot;inputText&quot;: &quot;A String&quot;, # The text that Robo is directed to set. If left empty, the directive will be
+                  # treated as a CLICK on the element matching the resource_name.
+              &quot;resourceName&quot;: &quot;A String&quot;, # Required. The android resource name of the target UI element.
+                  # For example,
+                  #    in Java: R.string.foo
+                  #    in xml: @string/foo
+                  # Only the &quot;foo&quot; part is needed.
+                  # Reference doc:
+                  # https://developer.android.com/guide/topics/resources/accessing-resources.html
+              &quot;actionType&quot;: &quot;A String&quot;, # Required. The type of action that Robo should perform on the specified
+                  # element.
+            },
+          ],
+          &quot;appPackageId&quot;: &quot;A String&quot;, # The java package for the application under test.
+              # The default value is determined by examining the application&#x27;s manifest.
+          &quot;startingIntents&quot;: [ # The intents used to launch the app for the crawl.
+              # If none are provided, then the main launcher activity is launched.
+              # If some are provided, then only those provided are launched (the main
+              # launcher activity must be provided explicitly).
+            { # Message for specifying the start activities to crawl.
+              &quot;startActivity&quot;: { # A starting intent specified by an action, uri, and categories. # An intent that starts an activity with specific details.
+                &quot;categories&quot;: [ # Intent categories to set on the intent.
+                  &quot;A String&quot;,
+                ],
+                &quot;action&quot;: &quot;A String&quot;, # Action name.
+                    # Required for START_ACTIVITY.
+                &quot;uri&quot;: &quot;A String&quot;, # URI for the action.
+              },
+              &quot;launcherActivity&quot;: { # Specifies an intent that starts the main launcher activity. # An intent that starts the main launcher activity.
+              },
+              &quot;timeout&quot;: &quot;A String&quot;, # Timeout in seconds for each intent.
+            },
+          ],
+          &quot;appApk&quot;: { # A reference to a file, used for user inputs. # The APK for the application under test.
+              &quot;gcsPath&quot;: &quot;A String&quot;, # A path to a file in Google Cloud Storage.
+                  # Example: gs://build-app-1414623860166/app%40debug-unaligned.apk
+                  # These paths are expected to be url encoded (percent encoding)
+            },
+          &quot;maxSteps&quot;: 42, # The max number of steps Robo can execute.
+              # Default is no limit.
         },
         &quot;disablePerformanceMetrics&quot;: True or False, # Disables performance metrics recording. May reduce test latency.
         &quot;disableVideoRecording&quot;: True or False, # Disables video recording. May reduce test latency.
-      },
-      &quot;projectId&quot;: &quot;A String&quot;, # The cloud project that owns the test matrix.
-      &quot;timestamp&quot;: &quot;A String&quot;, # Output only. The time this test matrix was initially created.
-      &quot;flakyTestAttempts&quot;: 42, # The number of times a TestExecution should be re-attempted if one or more
-          # of its test cases fail for any reason.
-          # The maximum number of reruns allowed is 10.
-          #
-          # Default is 0, which implies no reruns.
-      &quot;state&quot;: &quot;A String&quot;, # Output only. Indicates the current progress of the test matrix.
-      &quot;clientInfo&quot;: { # Information about the client which invoked the test. # Information about the client which invoked the test.
-        &quot;clientInfoDetails&quot;: [ # The list of detailed information about client.
-          { # Key-value pair of detailed information about the client which invoked the
-              # test. Examples: {&#x27;Version&#x27;, &#x27;1.0&#x27;}, {&#x27;Release Track&#x27;, &#x27;BETA&#x27;}.
-            &quot;value&quot;: &quot;A String&quot;, # Required. The value of detailed client information.
-            &quot;key&quot;: &quot;A String&quot;, # Required. The key of detailed client information.
+        &quot;androidTestLoop&quot;: { # A test of an Android Application with a Test Loop. # An Android Application with a Test Loop.
+            # The intent \&lt;intent-name\&gt; will be implicitly added, since Games is the only
+            # user of this api, for the time being.
+          &quot;scenarioLabels&quot;: [ # The list of scenario labels that should be run during the test.
+              # The scenario labels should map to labels defined in the application&#x27;s
+              # manifest. For example, player_experience and
+              # com.google.test.loops.player_experience add all of the loops labeled in the
+              # manifest with the com.google.test.loops.player_experience name to the
+              # execution.
+              # Scenarios can also be specified in the scenarios field.
+            &quot;A String&quot;,
+          ],
+          &quot;appPackageId&quot;: &quot;A String&quot;, # The java package for the application under test.
+              # The default is determined by examining the application&#x27;s manifest.
+          &quot;appApk&quot;: { # A reference to a file, used for user inputs. # The APK for the application under test.
+              &quot;gcsPath&quot;: &quot;A String&quot;, # A path to a file in Google Cloud Storage.
+                  # Example: gs://build-app-1414623860166/app%40debug-unaligned.apk
+                  # These paths are expected to be url encoded (percent encoding)
+            },
+          &quot;appBundle&quot;: { # An Android App Bundle file format, containing a BundleConfig.pb file, # A multi-apk app bundle for the application under test.
+              # a base module directory, zero or more dynamic feature module directories.
+              # &lt;p&gt;See https://developer.android.com/guide/app-bundle/build for guidance on
+              # building App Bundles.
+            &quot;bundleLocation&quot;: { # A reference to a file, used for user inputs. # .aab file representing the app bundle under test.
+                &quot;gcsPath&quot;: &quot;A String&quot;, # A path to a file in Google Cloud Storage.
+                    # Example: gs://build-app-1414623860166/app%40debug-unaligned.apk
+                    # These paths are expected to be url encoded (percent encoding)
+              },
           },
-        ],
-        &quot;name&quot;: &quot;A String&quot;, # Required. Client name, such as gcloud.
+          &quot;scenarios&quot;: [ # The list of scenarios that should be run during the test.
+              # The default is all test loops, derived from the application&#x27;s
+              # manifest.
+            42,
+          ],
+        },
+        &quot;iosXcTest&quot;: { # A test of an iOS application that uses the XCTest framework. # An iOS XCTest, via an .xctestrun file.
+            # Xcode supports the option to &quot;build for testing&quot;, which generates an
+            # .xctestrun file that contains a test specification (arguments, test methods,
+            # etc). This test type accepts a zip file containing the .xctestrun file and
+            # the corresponding contents of the Build/Products directory that contains all
+            # the binaries needed to run the tests.
+          &quot;testsZip&quot;: { # A reference to a file, used for user inputs. # Required. The .zip containing the .xctestrun file and the contents of the
+              # DerivedData/Build/Products directory.
+              # The .xctestrun file in this zip is ignored if the xctestrun field is
+              # specified.
+              &quot;gcsPath&quot;: &quot;A String&quot;, # A path to a file in Google Cloud Storage.
+                  # Example: gs://build-app-1414623860166/app%40debug-unaligned.apk
+                  # These paths are expected to be url encoded (percent encoding)
+            },
+          &quot;xcodeVersion&quot;: &quot;A String&quot;, # The Xcode version that should be used for the test.
+              # Use the TestEnvironmentDiscoveryService to get supported options.
+              # Defaults to the latest Xcode version Firebase Test Lab supports.
+          &quot;testSpecialEntitlements&quot;: True or False, # The option to test special app entitlements. Setting this would re-sign the
+              # app having special entitlements with an explicit application-identifier.
+              # Currently supports testing aps-environment entitlement.
+          &quot;appBundleId&quot;: &quot;A String&quot;, # Output only. The bundle id for the application under test.
+          &quot;xctestrun&quot;: { # A reference to a file, used for user inputs. # An .xctestrun file that will override the .xctestrun file in the
+              # tests zip. Because the .xctestrun file contains environment variables along
+              # with test methods to run and/or ignore, this can be useful for sharding
+              # tests. Default is taken from the tests zip.
+              &quot;gcsPath&quot;: &quot;A String&quot;, # A path to a file in Google Cloud Storage.
+                  # Example: gs://build-app-1414623860166/app%40debug-unaligned.apk
+                  # These paths are expected to be url encoded (percent encoding)
+            },
+        },
+        &quot;testSetup&quot;: { # A description of how to set up the Android device prior to running the test. # Test setup requirements for Android e.g. files to install, bootstrap
+            # scripts.
+          &quot;environmentVariables&quot;: [ # Environment variables to set for the test (only applicable for
+              # instrumentation tests).
+            { # A key-value pair passed as an environment variable to the test.
+              &quot;value&quot;: &quot;A String&quot;, # Value for the environment variable.
+              &quot;key&quot;: &quot;A String&quot;, # Key for the environment variable.
+            },
+          ],
+          &quot;dontAutograntPermissions&quot;: True or False, # Whether to prevent all runtime permissions to be granted at app install
+          &quot;additionalApks&quot;: [ # APKs to install in addition to those being directly tested.
+              # Currently capped at 100.
+            { # An Android package file to install.
+              &quot;location&quot;: { # A reference to a file, used for user inputs. # The path to an APK to be installed on the device before the test begins.
+                  &quot;gcsPath&quot;: &quot;A String&quot;, # A path to a file in Google Cloud Storage.
+                      # Example: gs://build-app-1414623860166/app%40debug-unaligned.apk
+                      # These paths are expected to be url encoded (percent encoding)
+                },
+              &quot;packageName&quot;: &quot;A String&quot;, # The java package for the APK to be installed.
+                  # Value is determined by examining the application&#x27;s manifest.
+            },
+          ],
+          &quot;systrace&quot;: { # Systrace configuration for the run.
+              # If set a systrace will be taken, starting on test start and lasting for the
+              # configured duration. The systrace file thus obtained is put in the results
+              # bucket together with the other artifacts from the run.
+            &quot;durationSeconds&quot;: 42, # Systrace duration in seconds.
+                # Should be between 1 and 30 seconds. 0 disables systrace.
+          },
+          &quot;filesToPush&quot;: [ # List of files to push to the device before starting the test.
+            { # A single device file description.
+              &quot;regularFile&quot;: { # A file or directory to install on the device before the test starts. # A reference to a regular file.
+                &quot;devicePath&quot;: &quot;A String&quot;, # Required. Where to put the content on the device. Must be an absolute,
+                    # allowlisted path. If the file exists, it will be replaced.
+                    # The following device-side directories and any of their subdirectories are
+                    # allowlisted:
+                    # &lt;p&gt;${EXTERNAL_STORAGE}, /sdcard, or /storage&lt;/p&gt;
+                    # &lt;p&gt;${ANDROID_DATA}/local/tmp, or /data/local/tmp&lt;/p&gt;
+                    # &lt;p&gt;Specifying a path outside of these directory trees is invalid.
+                    #
+                    # &lt;p&gt; The paths /sdcard and /data will be made available and treated as
+                    # implicit path substitutions. E.g. if /sdcard on a particular device does
+                    # not map to external storage, the system will replace it with the external
+                    # storage path prefix for that device and copy the file there.
+                    #
+                    # &lt;p&gt; It is strongly advised to use the &lt;a href=
+                    # &quot;http://developer.android.com/reference/android/os/Environment.html&quot;&gt;
+                    # Environment API&lt;/a&gt; in app and test code to access files on the device in a
+                    # portable way.
+                &quot;content&quot;: { # A reference to a file, used for user inputs. # Required. The source file.
+                    &quot;gcsPath&quot;: &quot;A String&quot;, # A path to a file in Google Cloud Storage.
+                        # Example: gs://build-app-1414623860166/app%40debug-unaligned.apk
+                        # These paths are expected to be url encoded (percent encoding)
+                  },
+              },
+              &quot;obbFile&quot;: { # An opaque binary blob file to install on the device before the test starts. # A reference to an opaque binary blob file.
+                &quot;obb&quot;: { # A reference to a file, used for user inputs. # Required. Opaque Binary Blob (OBB) file(s) to install on the device.
+                    &quot;gcsPath&quot;: &quot;A String&quot;, # A path to a file in Google Cloud Storage.
+                        # Example: gs://build-app-1414623860166/app%40debug-unaligned.apk
+                        # These paths are expected to be url encoded (percent encoding)
+                  },
+                &quot;obbFileName&quot;: &quot;A String&quot;, # Required. OBB file name which must conform to the format as specified by
+                    # Android
+                    # e.g. [main|patch].0300110.com.example.android.obb
+                    # which will be installed into
+                    #   \&lt;shared-storage\&gt;/Android/obb/\&lt;package-name\&gt;/
+                    # on the device.
+              },
+            },
+          ],
+          &quot;networkProfile&quot;: &quot;A String&quot;, # The network traffic profile used for running the test.
+              # Available network profiles can be queried by using the
+              # NETWORK_CONFIGURATION environment type when calling
+              # TestEnvironmentDiscoveryService.GetTestEnvironmentCatalog.
+          &quot;directoriesToPull&quot;: [ # List of directories on the device to upload to GCS at the end of the test;
+              # they must be absolute paths under /sdcard, /storage or /data/local/tmp.
+              # Path names are restricted to characters a-z A-Z 0-9 _ - . + and /
+              #
+              # Note: The paths /sdcard and /data will be made available and treated as
+              # implicit path substitutions. E.g. if /sdcard on a particular device does
+              # not map to external storage, the system will replace it with the external
+              # storage path prefix for that device.
+            &quot;A String&quot;,
+          ],
+          &quot;account&quot;: { # Identifies an account and how to log into it. # The device will be logged in on this account for the duration of the test.
+            &quot;googleAuto&quot;: { # Enables automatic Google account login. # An automatic google login account.
+                # If set, the service automatically generates a Google test account and adds
+                # it to the device, before executing the test. Note that test accounts might be
+                # reused.
+                # Many applications show their full set of functionalities when an account is
+                # present on the device. Logging into the device with these generated accounts
+                # allows testing more functionalities.
+            },
+          },
+        },
+        &quot;testTimeout&quot;: &quot;A String&quot;, # Max time a test execution is allowed to run before it is
+            # automatically cancelled.
+            # The default value is 5 min.
+        &quot;iosTestSetup&quot;: { # A description of how to set up an iOS device prior to running the test. # Test setup requirements for iOS.
+          &quot;networkProfile&quot;: &quot;A String&quot;, # The network traffic profile used for running the test.
+              # Available network profiles can be queried by using the
+              # NETWORK_CONFIGURATION environment type when calling
+              # TestEnvironmentDiscoveryService.GetTestEnvironmentCatalog.
+        },
       },
+      &quot;state&quot;: &quot;A String&quot;, # Output only. Indicates the current progress of the test matrix.
       &quot;testExecutions&quot;: [ # Output only. The list of test executions that the service creates for
           # this matrix.
         { # A single test executed in a single environment.
+          &quot;shard&quot;: { # Output only. Details about the shard. # Output only. Details about the shard.
+            &quot;shardIndex&quot;: 42, # Output only. The index of the shard among all the shards.
+            &quot;testTargetsForShard&quot;: { # Test targets for a shard. # Output only. Test targets for each shard.
+              &quot;testTargets&quot;: [ # Group of packages, classes, and/or test methods to be run for each shard.
+                  # The targets need to be specified in AndroidJUnitRunner argument format. For
+                  # example, “package com.my.packages” “class com.my.package.MyClass”.
+                  #
+                  # The number of shard_test_targets must be greater than 0.
+                &quot;A String&quot;,
+              ],
+            },
+            &quot;numShards&quot;: 42, # Output only. The total number of shards.
+          },
+          &quot;timestamp&quot;: &quot;A String&quot;, # Output only. The time this test execution was initially created.
+          &quot;id&quot;: &quot;A String&quot;, # Output only. Unique id set by the service.
+          &quot;matrixId&quot;: &quot;A String&quot;, # Output only. Id of the containing TestMatrix.
+          &quot;projectId&quot;: &quot;A String&quot;, # Output only. The cloud project that owns the test execution.
           &quot;environment&quot;: { # The environment in which the test is run. # Output only. How the host machine(s) are configured.
             &quot;iosDevice&quot;: { # A single iOS device. # An iOS device which must be used with an iOS test.
+              &quot;iosModelId&quot;: &quot;A String&quot;, # Required. The id of the iOS device to be used.
+                  # Use the TestEnvironmentDiscoveryService to get supported options.
               &quot;orientation&quot;: &quot;A String&quot;, # Required. How the device is oriented during the test.
                   # Use the TestEnvironmentDiscoveryService to get supported options.
               &quot;iosVersionId&quot;: &quot;A String&quot;, # Required. The id of the iOS major software version to be used.
                   # Use the TestEnvironmentDiscoveryService to get supported options.
               &quot;locale&quot;: &quot;A String&quot;, # Required. The locale the test device used for testing.
                   # Use the TestEnvironmentDiscoveryService to get supported options.
-              &quot;iosModelId&quot;: &quot;A String&quot;, # Required. The id of the iOS device to be used.
-                  # Use the TestEnvironmentDiscoveryService to get supported options.
             },
             &quot;androidDevice&quot;: { # A single Android device. # An Android device which must be used with an Android test.
-              &quot;orientation&quot;: &quot;A String&quot;, # Required. How the device is oriented during the test.
-                  # Use the TestEnvironmentDiscoveryService to get supported options.
-              &quot;locale&quot;: &quot;A String&quot;, # Required. The locale the test device used for testing.
-                  # Use the TestEnvironmentDiscoveryService to get supported options.
               &quot;androidModelId&quot;: &quot;A String&quot;, # Required. The id of the Android device to be used.
                   # Use the TestEnvironmentDiscoveryService to get supported options.
               &quot;androidVersionId&quot;: &quot;A String&quot;, # Required. The id of the Android OS version to be used.
                   # Use the TestEnvironmentDiscoveryService to get supported options.
-            },
-          },
-          &quot;state&quot;: &quot;A String&quot;, # Output only. Indicates the current progress of the test execution
-              # (e.g., FINISHED).
-          &quot;toolResultsStep&quot;: { # Represents a tool results step resource. # Output only. Where the results for this execution are written.
-              #
-              # This has the results of a TestExecution.
-            &quot;projectId&quot;: &quot;A String&quot;, # Output only. The cloud project that owns the tool results step.
-            &quot;historyId&quot;: &quot;A String&quot;, # Output only. A tool results history ID.
-            &quot;executionId&quot;: &quot;A String&quot;, # Output only. A tool results execution ID.
-            &quot;stepId&quot;: &quot;A String&quot;, # Output only. A tool results step ID.
-          },
-          &quot;projectId&quot;: &quot;A String&quot;, # Output only. The cloud project that owns the test execution.
-          &quot;testSpecification&quot;: { # A description of how to run the test. # Output only. How to run the test.
-            &quot;iosXcTest&quot;: { # A test of an iOS application that uses the XCTest framework. # An iOS XCTest, via an .xctestrun file.
-                # Xcode supports the option to &quot;build for testing&quot;, which generates an
-                # .xctestrun file that contains a test specification (arguments, test methods,
-                # etc). This test type accepts a zip file containing the .xctestrun file and
-                # the corresponding contents of the Build/Products directory that contains all
-                # the binaries needed to run the tests.
-              &quot;xcodeVersion&quot;: &quot;A String&quot;, # The Xcode version that should be used for the test.
+              &quot;locale&quot;: &quot;A String&quot;, # Required. The locale the test device used for testing.
                   # Use the TestEnvironmentDiscoveryService to get supported options.
-                  # Defaults to the latest Xcode version Firebase Test Lab supports.
-              &quot;appBundleId&quot;: &quot;A String&quot;, # Output only. The bundle id for the application under test.
-              &quot;xctestrun&quot;: { # A reference to a file, used for user inputs. # An .xctestrun file that will override the .xctestrun file in the
-                  # tests zip. Because the .xctestrun file contains environment variables along
-                  # with test methods to run and/or ignore, this can be useful for sharding
-                  # tests. Default is taken from the tests zip.
-                  &quot;gcsPath&quot;: &quot;A String&quot;, # A path to a file in Google Cloud Storage.
-                      # Example: gs://build-app-1414623860166/app-debug-unaligned.apk
-                },
-              &quot;testSpecialEntitlements&quot;: True or False, # The option to test special app entitlements. Setting this would re-sign the
-                  # app having special entitlements with an explicit application-identifier.
-                  # Currently supports testing aps-environment entitlement.
-              &quot;testsZip&quot;: { # A reference to a file, used for user inputs. # Required. The .zip containing the .xctestrun file and the contents of the
-                  # DerivedData/Build/Products directory.
-                  # The .xctestrun file in this zip is ignored if the xctestrun field is
-                  # specified.
-                  &quot;gcsPath&quot;: &quot;A String&quot;, # A path to a file in Google Cloud Storage.
-                      # Example: gs://build-app-1414623860166/app-debug-unaligned.apk
-                },
+              &quot;orientation&quot;: &quot;A String&quot;, # Required. How the device is oriented during the test.
+                  # Use the TestEnvironmentDiscoveryService to get supported options.
             },
-            &quot;iosTestLoop&quot;: { # A test of an iOS application that implements one or more game loop scenarios. # An iOS application with a test loop.
-                # This test type accepts an archived application (.ipa file) and a list of
-                # integer scenarios that will be executed on the app sequentially.
-              &quot;scenarios&quot;: [ # The list of scenarios that should be run during the test. Defaults to the
-                  # single scenario 0 if unspecified.
-                42,
-              ],
-              &quot;appBundleId&quot;: &quot;A String&quot;, # Output only. The bundle id for the application under test.
-              &quot;appIpa&quot;: { # A reference to a file, used for user inputs. # Required. The .ipa of the application to test.
-                  &quot;gcsPath&quot;: &quot;A String&quot;, # A path to a file in Google Cloud Storage.
-                      # Example: gs://build-app-1414623860166/app-debug-unaligned.apk
-                },
-            },
-            &quot;testTimeout&quot;: &quot;A String&quot;, # Max time a test execution is allowed to run before it is
-                # automatically cancelled.
-                # The default value is 5 min.
-            &quot;iosTestSetup&quot;: { # A description of how to set up an iOS device prior to running the test. # Test setup requirements for iOS.
-              &quot;networkProfile&quot;: &quot;A String&quot;, # The network traffic profile used for running the test.
-                  # Available network profiles can be queried by using the
-                  # NETWORK_CONFIGURATION environment type when calling
-                  # TestEnvironmentDiscoveryService.GetTestEnvironmentCatalog.
-            },
-            &quot;androidTestLoop&quot;: { # A test of an Android Application with a Test Loop. # An Android Application with a Test Loop.
-                # The intent \&lt;intent-name\&gt; will be implicitly added, since Games is the only
-                # user of this api, for the time being.
-              &quot;appApk&quot;: { # A reference to a file, used for user inputs. # The APK for the application under test.
-                  &quot;gcsPath&quot;: &quot;A String&quot;, # A path to a file in Google Cloud Storage.
-                      # Example: gs://build-app-1414623860166/app-debug-unaligned.apk
-                },
-              &quot;appPackageId&quot;: &quot;A String&quot;, # The java package for the application under test.
-                  # The default is determined by examining the application&#x27;s manifest.
-              &quot;appBundle&quot;: { # An Android App Bundle file format, containing a BundleConfig.pb file, # A multi-apk app bundle for the application under test.
-                  # a base module directory, zero or more dynamic feature module directories.
-                  # &lt;p&gt;See https://developer.android.com/guide/app-bundle/build for guidance on
-                  # building App Bundles.
-                &quot;bundleLocation&quot;: { # A reference to a file, used for user inputs. # .aab file representing the app bundle under test.
-                    &quot;gcsPath&quot;: &quot;A String&quot;, # A path to a file in Google Cloud Storage.
-                        # Example: gs://build-app-1414623860166/app-debug-unaligned.apk
-                  },
-              },
-              &quot;scenarios&quot;: [ # The list of scenarios that should be run during the test.
-                  # The default is all test loops, derived from the application&#x27;s
-                  # manifest.
-                42,
-              ],
-              &quot;scenarioLabels&quot;: [ # The list of scenario labels that should be run during the test.
-                  # The scenario labels should map to labels defined in the application&#x27;s
-                  # manifest. For example, player_experience and
-                  # com.google.test.loops.player_experience add all of the loops labeled in the
-                  # manifest with the com.google.test.loops.player_experience name to the
-                  # execution.
-                  # Scenarios can also be specified in the scenarios field.
-                &quot;A String&quot;,
-              ],
-            },
-            &quot;testSetup&quot;: { # A description of how to set up the Android device prior to running the test. # Test setup requirements for Android e.g. files to install, bootstrap
-                # scripts.
-              &quot;filesToPush&quot;: [ # List of files to push to the device before starting the test.
-                { # A single device file description.
-                  &quot;obbFile&quot;: { # An opaque binary blob file to install on the device before the test starts. # A reference to an opaque binary blob file.
-                    &quot;obbFileName&quot;: &quot;A String&quot;, # Required. OBB file name which must conform to the format as specified by
-                        # Android
-                        # e.g. [main|patch].0300110.com.example.android.obb
-                        # which will be installed into
-                        #   \&lt;shared-storage\&gt;/Android/obb/\&lt;package-name\&gt;/
-                        # on the device.
-                    &quot;obb&quot;: { # A reference to a file, used for user inputs. # Required. Opaque Binary Blob (OBB) file(s) to install on the device.
-                        &quot;gcsPath&quot;: &quot;A String&quot;, # A path to a file in Google Cloud Storage.
-                            # Example: gs://build-app-1414623860166/app-debug-unaligned.apk
-                      },
-                  },
-                  &quot;regularFile&quot;: { # A file or directory to install on the device before the test starts. # A reference to a regular file.
-                    &quot;content&quot;: { # A reference to a file, used for user inputs. # Required. The source file.
-                        &quot;gcsPath&quot;: &quot;A String&quot;, # A path to a file in Google Cloud Storage.
-                            # Example: gs://build-app-1414623860166/app-debug-unaligned.apk
-                      },
-                    &quot;devicePath&quot;: &quot;A String&quot;, # Required. Where to put the content on the device. Must be an absolute,
-                        # whitelisted path. If the file exists, it will be replaced.
-                        # The following device-side directories and any of their subdirectories are
-                        # whitelisted:
-                        # &lt;p&gt;${EXTERNAL_STORAGE}, or /sdcard&lt;/p&gt;
-                        # &lt;p&gt;${ANDROID_DATA}/local/tmp, or /data/local/tmp&lt;/p&gt;
-                        # &lt;p&gt;Specifying a path outside of these directory trees is invalid.
-                        #
-                        # &lt;p&gt; The paths /sdcard and /data will be made available and treated as
-                        # implicit path substitutions. E.g. if /sdcard on a particular device does
-                        # not map to external storage, the system will replace it with the external
-                        # storage path prefix for that device and copy the file there.
-                        #
-                        # &lt;p&gt; It is strongly advised to use the &lt;a href=
-                        # &quot;http://developer.android.com/reference/android/os/Environment.html&quot;&gt;
-                        # Environment API&lt;/a&gt; in app and test code to access files on the device in a
-                        # portable way.
-                  },
-                },
-              ],
-              &quot;account&quot;: { # Identifies an account and how to log into it. # The device will be logged in on this account for the duration of the test.
-                &quot;googleAuto&quot;: { # Enables automatic Google account login. # An automatic google login account.
-                    # If set, the service automatically generates a Google test account and adds
-                    # it to the device, before executing the test. Note that test accounts might be
-                    # reused.
-                    # Many applications show their full set of functionalities when an account is
-                    # present on the device. Logging into the device with these generated accounts
-                    # allows testing more functionalities.
-                },
-              },
-              &quot;systrace&quot;: { # Systrace configuration for the run.
-                  # If set a systrace will be taken, starting on test start and lasting for the
-                  # configured duration. The systrace file thus obtained is put in the results
-                  # bucket together with the other artifacts from the run.
-                &quot;durationSeconds&quot;: 42, # Systrace duration in seconds.
-                    # Should be between 1 and 30 seconds. 0 disables systrace.
-              },
-              &quot;directoriesToPull&quot;: [ # List of directories on the device to upload to GCS at the end of the test;
-                  # they must be absolute paths under /sdcard or /data/local/tmp.
-                  # Path names are restricted to characters a-z A-Z 0-9 _ - . + and /
-                  #
-                  # Note: The paths /sdcard and /data will be made available and treated as
-                  # implicit path substitutions. E.g. if /sdcard on a particular device does
-                  # not map to external storage, the system will replace it with the external
-                  # storage path prefix for that device.
-                &quot;A String&quot;,
-              ],
-              &quot;networkProfile&quot;: &quot;A String&quot;, # The network traffic profile used for running the test.
-                  # Available network profiles can be queried by using the
-                  # NETWORK_CONFIGURATION environment type when calling
-                  # TestEnvironmentDiscoveryService.GetTestEnvironmentCatalog.
-              &quot;environmentVariables&quot;: [ # Environment variables to set for the test (only applicable for
-                  # instrumentation tests).
-                { # A key-value pair passed as an environment variable to the test.
-                  &quot;value&quot;: &quot;A String&quot;, # Value for the environment variable.
-                  &quot;key&quot;: &quot;A String&quot;, # Key for the environment variable.
-                },
-              ],
-              &quot;additionalApks&quot;: [ # APKs to install in addition to those being directly tested.
-                  # Currently capped at 100.
-                { # An Android package file to install.
-                  &quot;location&quot;: { # A reference to a file, used for user inputs. # The path to an APK to be installed on the device before the test begins.
-                      &quot;gcsPath&quot;: &quot;A String&quot;, # A path to a file in Google Cloud Storage.
-                          # Example: gs://build-app-1414623860166/app-debug-unaligned.apk
-                    },
-                  &quot;packageName&quot;: &quot;A String&quot;, # The java package for the APK to be installed.
-                      # Value is determined by examining the application&#x27;s manifest.
-                },
-              ],
-            },
-            &quot;androidRoboTest&quot;: { # A test of an android application that explores the application on a virtual # An Android robo test.
-                # or physical Android Device, finding culprits and crashes as it goes.
-              &quot;maxDepth&quot;: 42, # The max depth of the traversal stack Robo can explore. Needs to be at least
-                  # 2 to make Robo explore the app beyond the first activity.
-                  # Default is 50.
-              &quot;appPackageId&quot;: &quot;A String&quot;, # The java package for the application under test.
-                  # The default value is determined by examining the application&#x27;s manifest.
-              &quot;appApk&quot;: { # A reference to a file, used for user inputs. # The APK for the application under test.
-                  &quot;gcsPath&quot;: &quot;A String&quot;, # A path to a file in Google Cloud Storage.
-                      # Example: gs://build-app-1414623860166/app-debug-unaligned.apk
-                },
-              &quot;startingIntents&quot;: [ # The intents used to launch the app for the crawl.
-                  # If none are provided, then the main launcher activity is launched.
-                  # If some are provided, then only those provided are launched (the main
-                  # launcher activity must be provided explicitly).
-                { # Message for specifying the start activities to crawl.
-                  &quot;timeout&quot;: &quot;A String&quot;, # Timeout in seconds for each intent.
-                  &quot;startActivity&quot;: { # A starting intent specified by an action, uri, and categories. # An intent that starts an activity with specific details.
-                    &quot;uri&quot;: &quot;A String&quot;, # URI for the action.
-                    &quot;categories&quot;: [ # Intent categories to set on the intent.
-                      &quot;A String&quot;,
-                    ],
-                    &quot;action&quot;: &quot;A String&quot;, # Action name.
-                        # Required for START_ACTIVITY.
-                  },
-                  &quot;launcherActivity&quot;: { # Specifies an intent that starts the main launcher activity. # An intent that starts the main launcher activity.
-                  },
-                },
-              ],
-              &quot;maxSteps&quot;: 42, # The max number of steps Robo can execute.
-                  # Default is no limit.
-              &quot;appInitialActivity&quot;: &quot;A String&quot;, # The initial activity that should be used to start the app.
-              &quot;roboDirectives&quot;: [ # A set of directives Robo should apply during the crawl.
-                  # This allows users to customize the crawl. For example, the username and
-                  # password for a test account can be provided.
-                { # Directs Robo to interact with a specific UI element if it is encountered
-                    # during the crawl. Currently, Robo can perform text entry or element click.
-                  &quot;actionType&quot;: &quot;A String&quot;, # Required. The type of action that Robo should perform on the specified
-                      # element.
-                  &quot;resourceName&quot;: &quot;A String&quot;, # Required. The android resource name of the target UI element.
-                      # For example,
-                      #    in Java: R.string.foo
-                      #    in xml: @string/foo
-                      # Only the &quot;foo&quot; part is needed.
-                      # Reference doc:
-                      # https://developer.android.com/guide/topics/resources/accessing-resources.html
-                  &quot;inputText&quot;: &quot;A String&quot;, # The text that Robo is directed to set. If left empty, the directive will be
-                      # treated as a CLICK on the element matching the resource_name.
-                },
-              ],
-              &quot;appBundle&quot;: { # An Android App Bundle file format, containing a BundleConfig.pb file, # A multi-apk app bundle for the application under test.
-                  # a base module directory, zero or more dynamic feature module directories.
-                  # &lt;p&gt;See https://developer.android.com/guide/app-bundle/build for guidance on
-                  # building App Bundles.
-                &quot;bundleLocation&quot;: { # A reference to a file, used for user inputs. # .aab file representing the app bundle under test.
-                    &quot;gcsPath&quot;: &quot;A String&quot;, # A path to a file in Google Cloud Storage.
-                        # Example: gs://build-app-1414623860166/app-debug-unaligned.apk
-                  },
-              },
-              &quot;roboScript&quot;: { # A reference to a file, used for user inputs. # A JSON file with a sequence of actions Robo should perform as a prologue
-                  # for the crawl.
-                  &quot;gcsPath&quot;: &quot;A String&quot;, # A path to a file in Google Cloud Storage.
-                      # Example: gs://build-app-1414623860166/app-debug-unaligned.apk
-                },
-            },
+          },
+          &quot;testDetails&quot;: { # Additional details about the progress of the running test. # Output only. Additional details about the running test.
+            &quot;errorMessage&quot;: &quot;A String&quot;, # Output only. If the TestState is ERROR, then this string will contain
+                # human-readable details about the error.
+            &quot;progressMessages&quot;: [ # Output only. Human-readable, detailed descriptions of the test&#x27;s progress.
+                # For example: &quot;Provisioning a device&quot;, &quot;Starting Test&quot;.
+                #
+                # During the course of execution new data may be appended
+                # to the end of progress_messages.
+              &quot;A String&quot;,
+            ],
+          },
+          &quot;testSpecification&quot;: { # A description of how to run the test. # Output only. How to run the test.
             &quot;androidInstrumentationTest&quot;: { # A test of an Android application that can control an Android component # An Android instrumentation test.
                 # independently of its normal lifecycle.
                 # Android instrumentation tests run an application APK and test APK inside the
@@ -2448,15 +2312,11 @@
                 #
                 # See &lt;http://developer.android.com/tools/testing/testing_android.html&gt; for
                 # more information on types of Android tests.
-              &quot;appBundle&quot;: { # An Android App Bundle file format, containing a BundleConfig.pb file, # A multi-apk app bundle for the application under test.
-                  # a base module directory, zero or more dynamic feature module directories.
-                  # &lt;p&gt;See https://developer.android.com/guide/app-bundle/build for guidance on
-                  # building App Bundles.
-                &quot;bundleLocation&quot;: { # A reference to a file, used for user inputs. # .aab file representing the app bundle under test.
-                    &quot;gcsPath&quot;: &quot;A String&quot;, # A path to a file in Google Cloud Storage.
-                        # Example: gs://build-app-1414623860166/app-debug-unaligned.apk
-                  },
-              },
+              &quot;testApk&quot;: { # A reference to a file, used for user inputs. # Required. The APK containing the test code to be executed.
+                  &quot;gcsPath&quot;: &quot;A String&quot;, # A path to a file in Google Cloud Storage.
+                      # Example: gs://build-app-1414623860166/app%40debug-unaligned.apk
+                      # These paths are expected to be url encoded (percent encoding)
+                },
               &quot;orchestratorOption&quot;: &quot;A String&quot;, # The option of whether running each test within its own invocation of
                   # instrumentation with Android Test Orchestrator or not.
                   # ** Orchestrator is only compatible with AndroidJUnitRunner version 1.0 or
@@ -2471,29 +2331,9 @@
                   # for more information about Android Test Orchestrator.
                   #
                   # If not set, the test will be run without the orchestrator.
-              &quot;testTargets&quot;: [ # Each target must be fully qualified with the package name or class name,
-                  # in one of these formats:
-                  #  - &quot;package package_name&quot;
-                  #  - &quot;class package_name.class_name&quot;
-                  #  - &quot;class package_name.class_name#method_name&quot;
-                  #
-                  # If empty, all targets in the module will be run.
-                &quot;A String&quot;,
-              ],
-              &quot;testApk&quot;: { # A reference to a file, used for user inputs. # Required. The APK containing the test code to be executed.
-                  &quot;gcsPath&quot;: &quot;A String&quot;, # A path to a file in Google Cloud Storage.
-                      # Example: gs://build-app-1414623860166/app-debug-unaligned.apk
-                },
-              &quot;testRunnerClass&quot;: &quot;A String&quot;, # The InstrumentationTestRunner class.
+              &quot;testPackageId&quot;: &quot;A String&quot;, # The java package for the test to be executed.
                   # The default value is determined by examining the application&#x27;s manifest.
               &quot;shardingOption&quot;: { # Options for enabling sharding. # The option to run tests in multiple shards in parallel.
-                &quot;uniformSharding&quot;: { # Uniformly shards test cases given a total number of shards. # Uniformly shards test cases given a total number of shards.
-                    #
-                    # For Instrumentation test, it will be translated to “-e numShard” “-e
-                    # shardIndex” AndroidJUnitRunner arguments. With uniform sharding enabled,
-                    # specifying these sharding arguments via environment_variables is invalid.
-                  &quot;numShards&quot;: 42, # Required. Total number of shards. The number must be &gt;= 1 and &lt;= 50.
-                },
                 &quot;manualSharding&quot;: { # Shards test cases into the specified groups of packages, classes, and/or # Shards test cases into the specified groups of packages, classes, and/or
                     # methods.
                     # methods.
@@ -2501,7 +2341,9 @@
                     # With manual sharding enabled, specifying test targets via
                     # environment_variables or in InstrumentationTest is invalid.
                   &quot;testTargetsForShard&quot;: [ # Required. Group of packages, classes, and/or test methods to be run for
-                      # each shard. The number of shard_test_targets must be &gt;= 1 and &lt;= 50.
+                      # each shard. When any physical devices are selected,  the number of
+                      # test_targets_for_shard must be &gt;= 1 and &lt;= 50. When no physical devices are
+                      # selected, the number must be &gt;= 1 and &lt;= 250.
                     { # Test targets for a shard.
                       &quot;testTargets&quot;: [ # Group of packages, classes, and/or test methods to be run for each shard.
                           # The targets need to be specified in AndroidJUnitRunner argument format. For
@@ -2513,59 +2355,332 @@
                     },
                   ],
                 },
+                &quot;uniformSharding&quot;: { # Uniformly shards test cases given a total number of shards. # Uniformly shards test cases given a total number of shards.
+                    #
+                    # For Instrumentation test, it will be translated to “-e numShard” “-e
+                    # shardIndex” AndroidJUnitRunner arguments. With uniform sharding enabled,
+                    # specifying these sharding arguments via environment_variables is invalid.
+                  &quot;numShards&quot;: 42, # Required. Total number of shards. When any physical devices are selected,
+                      # the number must be &gt;= 1 and &lt;= 50. When no physical devices are selected,
+                      # the number must be &gt;= 1 and &lt;= 250.
+                },
               },
-              &quot;testPackageId&quot;: &quot;A String&quot;, # The java package for the test to be executed.
-                  # The default value is determined by examining the application&#x27;s manifest.
-              &quot;appPackageId&quot;: &quot;A String&quot;, # The java package for the application under test.
-                  # The default value is determined by examining the application&#x27;s manifest.
               &quot;appApk&quot;: { # A reference to a file, used for user inputs. # The APK for the application under test.
                   &quot;gcsPath&quot;: &quot;A String&quot;, # A path to a file in Google Cloud Storage.
-                      # Example: gs://build-app-1414623860166/app-debug-unaligned.apk
+                      # Example: gs://build-app-1414623860166/app%40debug-unaligned.apk
+                      # These paths are expected to be url encoded (percent encoding)
                 },
+              &quot;appPackageId&quot;: &quot;A String&quot;, # The java package for the application under test.
+                  # The default value is determined by examining the application&#x27;s manifest.
+              &quot;testRunnerClass&quot;: &quot;A String&quot;, # The InstrumentationTestRunner class.
+                  # The default value is determined by examining the application&#x27;s manifest.
+              &quot;testTargets&quot;: [ # Each target must be fully qualified with the package name or class name,
+                  # in one of these formats:
+                  #  - &quot;package package_name&quot;
+                  #  - &quot;class package_name.class_name&quot;
+                  #  - &quot;class package_name.class_name#method_name&quot;
+                  #
+                  # If empty, all targets in the module will be run.
+                &quot;A String&quot;,
+              ],
+              &quot;appBundle&quot;: { # An Android App Bundle file format, containing a BundleConfig.pb file, # A multi-apk app bundle for the application under test.
+                  # a base module directory, zero or more dynamic feature module directories.
+                  # &lt;p&gt;See https://developer.android.com/guide/app-bundle/build for guidance on
+                  # building App Bundles.
+                &quot;bundleLocation&quot;: { # A reference to a file, used for user inputs. # .aab file representing the app bundle under test.
+                    &quot;gcsPath&quot;: &quot;A String&quot;, # A path to a file in Google Cloud Storage.
+                        # Example: gs://build-app-1414623860166/app%40debug-unaligned.apk
+                        # These paths are expected to be url encoded (percent encoding)
+                  },
+              },
+            },
+            &quot;iosTestLoop&quot;: { # A test of an iOS application that implements one or more game loop scenarios. # An iOS application with a test loop.
+                # This test type accepts an archived application (.ipa file) and a list of
+                # integer scenarios that will be executed on the app sequentially.
+              &quot;appBundleId&quot;: &quot;A String&quot;, # Output only. The bundle id for the application under test.
+              &quot;appIpa&quot;: { # A reference to a file, used for user inputs. # Required. The .ipa of the application to test.
+                  &quot;gcsPath&quot;: &quot;A String&quot;, # A path to a file in Google Cloud Storage.
+                      # Example: gs://build-app-1414623860166/app%40debug-unaligned.apk
+                      # These paths are expected to be url encoded (percent encoding)
+                },
+              &quot;scenarios&quot;: [ # The list of scenarios that should be run during the test. Defaults to the
+                  # single scenario 0 if unspecified.
+                42,
+              ],
+            },
+            &quot;androidRoboTest&quot;: { # A test of an android application that explores the application on a virtual # An Android robo test.
+                # or physical Android Device, finding culprits and crashes as it goes.
+              &quot;appBundle&quot;: { # An Android App Bundle file format, containing a BundleConfig.pb file, # A multi-apk app bundle for the application under test.
+                  # a base module directory, zero or more dynamic feature module directories.
+                  # &lt;p&gt;See https://developer.android.com/guide/app-bundle/build for guidance on
+                  # building App Bundles.
+                &quot;bundleLocation&quot;: { # A reference to a file, used for user inputs. # .aab file representing the app bundle under test.
+                    &quot;gcsPath&quot;: &quot;A String&quot;, # A path to a file in Google Cloud Storage.
+                        # Example: gs://build-app-1414623860166/app%40debug-unaligned.apk
+                        # These paths are expected to be url encoded (percent encoding)
+                  },
+              },
+              &quot;roboScript&quot;: { # A reference to a file, used for user inputs. # A JSON file with a sequence of actions Robo should perform as a prologue
+                  # for the crawl.
+                  &quot;gcsPath&quot;: &quot;A String&quot;, # A path to a file in Google Cloud Storage.
+                      # Example: gs://build-app-1414623860166/app%40debug-unaligned.apk
+                      # These paths are expected to be url encoded (percent encoding)
+                },
+              &quot;maxDepth&quot;: 42, # The max depth of the traversal stack Robo can explore. Needs to be at least
+                  # 2 to make Robo explore the app beyond the first activity.
+                  # Default is 50.
+              &quot;appInitialActivity&quot;: &quot;A String&quot;, # The initial activity that should be used to start the app.
+              &quot;roboDirectives&quot;: [ # A set of directives Robo should apply during the crawl.
+                  # This allows users to customize the crawl. For example, the username and
+                  # password for a test account can be provided.
+                { # Directs Robo to interact with a specific UI element if it is encountered
+                    # during the crawl. Currently, Robo can perform text entry or element click.
+                  &quot;inputText&quot;: &quot;A String&quot;, # The text that Robo is directed to set. If left empty, the directive will be
+                      # treated as a CLICK on the element matching the resource_name.
+                  &quot;resourceName&quot;: &quot;A String&quot;, # Required. The android resource name of the target UI element.
+                      # For example,
+                      #    in Java: R.string.foo
+                      #    in xml: @string/foo
+                      # Only the &quot;foo&quot; part is needed.
+                      # Reference doc:
+                      # https://developer.android.com/guide/topics/resources/accessing-resources.html
+                  &quot;actionType&quot;: &quot;A String&quot;, # Required. The type of action that Robo should perform on the specified
+                      # element.
+                },
+              ],
+              &quot;appPackageId&quot;: &quot;A String&quot;, # The java package for the application under test.
+                  # The default value is determined by examining the application&#x27;s manifest.
+              &quot;startingIntents&quot;: [ # The intents used to launch the app for the crawl.
+                  # If none are provided, then the main launcher activity is launched.
+                  # If some are provided, then only those provided are launched (the main
+                  # launcher activity must be provided explicitly).
+                { # Message for specifying the start activities to crawl.
+                  &quot;startActivity&quot;: { # A starting intent specified by an action, uri, and categories. # An intent that starts an activity with specific details.
+                    &quot;categories&quot;: [ # Intent categories to set on the intent.
+                      &quot;A String&quot;,
+                    ],
+                    &quot;action&quot;: &quot;A String&quot;, # Action name.
+                        # Required for START_ACTIVITY.
+                    &quot;uri&quot;: &quot;A String&quot;, # URI for the action.
+                  },
+                  &quot;launcherActivity&quot;: { # Specifies an intent that starts the main launcher activity. # An intent that starts the main launcher activity.
+                  },
+                  &quot;timeout&quot;: &quot;A String&quot;, # Timeout in seconds for each intent.
+                },
+              ],
+              &quot;appApk&quot;: { # A reference to a file, used for user inputs. # The APK for the application under test.
+                  &quot;gcsPath&quot;: &quot;A String&quot;, # A path to a file in Google Cloud Storage.
+                      # Example: gs://build-app-1414623860166/app%40debug-unaligned.apk
+                      # These paths are expected to be url encoded (percent encoding)
+                },
+              &quot;maxSteps&quot;: 42, # The max number of steps Robo can execute.
+                  # Default is no limit.
             },
             &quot;disablePerformanceMetrics&quot;: True or False, # Disables performance metrics recording. May reduce test latency.
             &quot;disableVideoRecording&quot;: True or False, # Disables video recording. May reduce test latency.
-          },
-          &quot;id&quot;: &quot;A String&quot;, # Output only. Unique id set by the service.
-          &quot;timestamp&quot;: &quot;A String&quot;, # Output only. The time this test execution was initially created.
-          &quot;shard&quot;: { # Output only. Details about the shard. # Output only. Details about the shard.
-            &quot;shardIndex&quot;: 42, # Output only. The index of the shard among all the shards.
-            &quot;testTargetsForShard&quot;: { # Test targets for a shard. # Output only. Test targets for each shard.
-              &quot;testTargets&quot;: [ # Group of packages, classes, and/or test methods to be run for each shard.
-                  # The targets need to be specified in AndroidJUnitRunner argument format. For
-                  # example, “package com.my.packages” “class com.my.package.MyClass”.
-                  #
-                  # The number of shard_test_targets must be greater than 0.
+            &quot;androidTestLoop&quot;: { # A test of an Android Application with a Test Loop. # An Android Application with a Test Loop.
+                # The intent \&lt;intent-name\&gt; will be implicitly added, since Games is the only
+                # user of this api, for the time being.
+              &quot;scenarioLabels&quot;: [ # The list of scenario labels that should be run during the test.
+                  # The scenario labels should map to labels defined in the application&#x27;s
+                  # manifest. For example, player_experience and
+                  # com.google.test.loops.player_experience add all of the loops labeled in the
+                  # manifest with the com.google.test.loops.player_experience name to the
+                  # execution.
+                  # Scenarios can also be specified in the scenarios field.
                 &quot;A String&quot;,
               ],
+              &quot;appPackageId&quot;: &quot;A String&quot;, # The java package for the application under test.
+                  # The default is determined by examining the application&#x27;s manifest.
+              &quot;appApk&quot;: { # A reference to a file, used for user inputs. # The APK for the application under test.
+                  &quot;gcsPath&quot;: &quot;A String&quot;, # A path to a file in Google Cloud Storage.
+                      # Example: gs://build-app-1414623860166/app%40debug-unaligned.apk
+                      # These paths are expected to be url encoded (percent encoding)
+                },
+              &quot;appBundle&quot;: { # An Android App Bundle file format, containing a BundleConfig.pb file, # A multi-apk app bundle for the application under test.
+                  # a base module directory, zero or more dynamic feature module directories.
+                  # &lt;p&gt;See https://developer.android.com/guide/app-bundle/build for guidance on
+                  # building App Bundles.
+                &quot;bundleLocation&quot;: { # A reference to a file, used for user inputs. # .aab file representing the app bundle under test.
+                    &quot;gcsPath&quot;: &quot;A String&quot;, # A path to a file in Google Cloud Storage.
+                        # Example: gs://build-app-1414623860166/app%40debug-unaligned.apk
+                        # These paths are expected to be url encoded (percent encoding)
+                  },
+              },
+              &quot;scenarios&quot;: [ # The list of scenarios that should be run during the test.
+                  # The default is all test loops, derived from the application&#x27;s
+                  # manifest.
+                42,
+              ],
             },
-            &quot;numShards&quot;: 42, # Output only. The total number of shards.
+            &quot;iosXcTest&quot;: { # A test of an iOS application that uses the XCTest framework. # An iOS XCTest, via an .xctestrun file.
+                # Xcode supports the option to &quot;build for testing&quot;, which generates an
+                # .xctestrun file that contains a test specification (arguments, test methods,
+                # etc). This test type accepts a zip file containing the .xctestrun file and
+                # the corresponding contents of the Build/Products directory that contains all
+                # the binaries needed to run the tests.
+              &quot;testsZip&quot;: { # A reference to a file, used for user inputs. # Required. The .zip containing the .xctestrun file and the contents of the
+                  # DerivedData/Build/Products directory.
+                  # The .xctestrun file in this zip is ignored if the xctestrun field is
+                  # specified.
+                  &quot;gcsPath&quot;: &quot;A String&quot;, # A path to a file in Google Cloud Storage.
+                      # Example: gs://build-app-1414623860166/app%40debug-unaligned.apk
+                      # These paths are expected to be url encoded (percent encoding)
+                },
+              &quot;xcodeVersion&quot;: &quot;A String&quot;, # The Xcode version that should be used for the test.
+                  # Use the TestEnvironmentDiscoveryService to get supported options.
+                  # Defaults to the latest Xcode version Firebase Test Lab supports.
+              &quot;testSpecialEntitlements&quot;: True or False, # The option to test special app entitlements. Setting this would re-sign the
+                  # app having special entitlements with an explicit application-identifier.
+                  # Currently supports testing aps-environment entitlement.
+              &quot;appBundleId&quot;: &quot;A String&quot;, # Output only. The bundle id for the application under test.
+              &quot;xctestrun&quot;: { # A reference to a file, used for user inputs. # An .xctestrun file that will override the .xctestrun file in the
+                  # tests zip. Because the .xctestrun file contains environment variables along
+                  # with test methods to run and/or ignore, this can be useful for sharding
+                  # tests. Default is taken from the tests zip.
+                  &quot;gcsPath&quot;: &quot;A String&quot;, # A path to a file in Google Cloud Storage.
+                      # Example: gs://build-app-1414623860166/app%40debug-unaligned.apk
+                      # These paths are expected to be url encoded (percent encoding)
+                },
+            },
+            &quot;testSetup&quot;: { # A description of how to set up the Android device prior to running the test. # Test setup requirements for Android e.g. files to install, bootstrap
+                # scripts.
+              &quot;environmentVariables&quot;: [ # Environment variables to set for the test (only applicable for
+                  # instrumentation tests).
+                { # A key-value pair passed as an environment variable to the test.
+                  &quot;value&quot;: &quot;A String&quot;, # Value for the environment variable.
+                  &quot;key&quot;: &quot;A String&quot;, # Key for the environment variable.
+                },
+              ],
+              &quot;dontAutograntPermissions&quot;: True or False, # Whether to prevent all runtime permissions to be granted at app install
+              &quot;additionalApks&quot;: [ # APKs to install in addition to those being directly tested.
+                  # Currently capped at 100.
+                { # An Android package file to install.
+                  &quot;location&quot;: { # A reference to a file, used for user inputs. # The path to an APK to be installed on the device before the test begins.
+                      &quot;gcsPath&quot;: &quot;A String&quot;, # A path to a file in Google Cloud Storage.
+                          # Example: gs://build-app-1414623860166/app%40debug-unaligned.apk
+                          # These paths are expected to be url encoded (percent encoding)
+                    },
+                  &quot;packageName&quot;: &quot;A String&quot;, # The java package for the APK to be installed.
+                      # Value is determined by examining the application&#x27;s manifest.
+                },
+              ],
+              &quot;systrace&quot;: { # Systrace configuration for the run.
+                  # If set a systrace will be taken, starting on test start and lasting for the
+                  # configured duration. The systrace file thus obtained is put in the results
+                  # bucket together with the other artifacts from the run.
+                &quot;durationSeconds&quot;: 42, # Systrace duration in seconds.
+                    # Should be between 1 and 30 seconds. 0 disables systrace.
+              },
+              &quot;filesToPush&quot;: [ # List of files to push to the device before starting the test.
+                { # A single device file description.
+                  &quot;regularFile&quot;: { # A file or directory to install on the device before the test starts. # A reference to a regular file.
+                    &quot;devicePath&quot;: &quot;A String&quot;, # Required. Where to put the content on the device. Must be an absolute,
+                        # allowlisted path. If the file exists, it will be replaced.
+                        # The following device-side directories and any of their subdirectories are
+                        # allowlisted:
+                        # &lt;p&gt;${EXTERNAL_STORAGE}, /sdcard, or /storage&lt;/p&gt;
+                        # &lt;p&gt;${ANDROID_DATA}/local/tmp, or /data/local/tmp&lt;/p&gt;
+                        # &lt;p&gt;Specifying a path outside of these directory trees is invalid.
+                        #
+                        # &lt;p&gt; The paths /sdcard and /data will be made available and treated as
+                        # implicit path substitutions. E.g. if /sdcard on a particular device does
+                        # not map to external storage, the system will replace it with the external
+                        # storage path prefix for that device and copy the file there.
+                        #
+                        # &lt;p&gt; It is strongly advised to use the &lt;a href=
+                        # &quot;http://developer.android.com/reference/android/os/Environment.html&quot;&gt;
+                        # Environment API&lt;/a&gt; in app and test code to access files on the device in a
+                        # portable way.
+                    &quot;content&quot;: { # A reference to a file, used for user inputs. # Required. The source file.
+                        &quot;gcsPath&quot;: &quot;A String&quot;, # A path to a file in Google Cloud Storage.
+                            # Example: gs://build-app-1414623860166/app%40debug-unaligned.apk
+                            # These paths are expected to be url encoded (percent encoding)
+                      },
+                  },
+                  &quot;obbFile&quot;: { # An opaque binary blob file to install on the device before the test starts. # A reference to an opaque binary blob file.
+                    &quot;obb&quot;: { # A reference to a file, used for user inputs. # Required. Opaque Binary Blob (OBB) file(s) to install on the device.
+                        &quot;gcsPath&quot;: &quot;A String&quot;, # A path to a file in Google Cloud Storage.
+                            # Example: gs://build-app-1414623860166/app%40debug-unaligned.apk
+                            # These paths are expected to be url encoded (percent encoding)
+                      },
+                    &quot;obbFileName&quot;: &quot;A String&quot;, # Required. OBB file name which must conform to the format as specified by
+                        # Android
+                        # e.g. [main|patch].0300110.com.example.android.obb
+                        # which will be installed into
+                        #   \&lt;shared-storage\&gt;/Android/obb/\&lt;package-name\&gt;/
+                        # on the device.
+                  },
+                },
+              ],
+              &quot;networkProfile&quot;: &quot;A String&quot;, # The network traffic profile used for running the test.
+                  # Available network profiles can be queried by using the
+                  # NETWORK_CONFIGURATION environment type when calling
+                  # TestEnvironmentDiscoveryService.GetTestEnvironmentCatalog.
+              &quot;directoriesToPull&quot;: [ # List of directories on the device to upload to GCS at the end of the test;
+                  # they must be absolute paths under /sdcard, /storage or /data/local/tmp.
+                  # Path names are restricted to characters a-z A-Z 0-9 _ - . + and /
+                  #
+                  # Note: The paths /sdcard and /data will be made available and treated as
+                  # implicit path substitutions. E.g. if /sdcard on a particular device does
+                  # not map to external storage, the system will replace it with the external
+                  # storage path prefix for that device.
+                &quot;A String&quot;,
+              ],
+              &quot;account&quot;: { # Identifies an account and how to log into it. # The device will be logged in on this account for the duration of the test.
+                &quot;googleAuto&quot;: { # Enables automatic Google account login. # An automatic google login account.
+                    # If set, the service automatically generates a Google test account and adds
+                    # it to the device, before executing the test. Note that test accounts might be
+                    # reused.
+                    # Many applications show their full set of functionalities when an account is
+                    # present on the device. Logging into the device with these generated accounts
+                    # allows testing more functionalities.
+                },
+              },
+            },
+            &quot;testTimeout&quot;: &quot;A String&quot;, # Max time a test execution is allowed to run before it is
+                # automatically cancelled.
+                # The default value is 5 min.
+            &quot;iosTestSetup&quot;: { # A description of how to set up an iOS device prior to running the test. # Test setup requirements for iOS.
+              &quot;networkProfile&quot;: &quot;A String&quot;, # The network traffic profile used for running the test.
+                  # Available network profiles can be queried by using the
+                  # NETWORK_CONFIGURATION environment type when calling
+                  # TestEnvironmentDiscoveryService.GetTestEnvironmentCatalog.
+            },
           },
-          &quot;matrixId&quot;: &quot;A String&quot;, # Output only. Id of the containing TestMatrix.
-          &quot;testDetails&quot;: { # Additional details about the progress of the running test. # Output only. Additional details about the running test.
-            &quot;errorMessage&quot;: &quot;A String&quot;, # Output only. If the TestState is ERROR, then this string will contain
-                # human-readable details about the error.
-            &quot;progressMessages&quot;: [ # Output only. Human-readable, detailed descriptions of the test&#x27;s progress.
-                # For example: &quot;Provisioning a device&quot;, &quot;Starting Test&quot;.
-                #
-                # During the course of execution new data may be appended
-                # to the end of progress_messages.
-              &quot;A String&quot;,
-            ],
+          &quot;state&quot;: &quot;A String&quot;, # Output only. Indicates the current progress of the test execution
+              # (e.g., FINISHED).
+          &quot;toolResultsStep&quot;: { # Represents a tool results step resource. # Output only. Where the results for this execution are written.
+              #
+              # This has the results of a TestExecution.
+            &quot;stepId&quot;: &quot;A String&quot;, # Output only. A tool results step ID.
+            &quot;projectId&quot;: &quot;A String&quot;, # Output only. The cloud project that owns the tool results step.
+            &quot;historyId&quot;: &quot;A String&quot;, # Output only. A tool results history ID.
+            &quot;executionId&quot;: &quot;A String&quot;, # Output only. A tool results execution ID.
           },
         },
       ],
       &quot;environmentMatrix&quot;: { # The matrix of environments in which the test is to be executed. # Required. The devices the tests are being executed on.
+        &quot;iosDeviceList&quot;: { # A list of iOS device configurations in which the test is to be executed. # A list of iOS devices.
+          &quot;iosDevices&quot;: [ # Required. A list of iOS devices.
+            { # A single iOS device.
+              &quot;iosModelId&quot;: &quot;A String&quot;, # Required. The id of the iOS device to be used.
+                  # Use the TestEnvironmentDiscoveryService to get supported options.
+              &quot;orientation&quot;: &quot;A String&quot;, # Required. How the device is oriented during the test.
+                  # Use the TestEnvironmentDiscoveryService to get supported options.
+              &quot;iosVersionId&quot;: &quot;A String&quot;, # Required. The id of the iOS major software version to be used.
+                  # Use the TestEnvironmentDiscoveryService to get supported options.
+              &quot;locale&quot;: &quot;A String&quot;, # Required. The locale the test device used for testing.
+                  # Use the TestEnvironmentDiscoveryService to get supported options.
+            },
+          ],
+        },
         &quot;androidMatrix&quot;: { # A set of Android device configuration permutations is defined by the # A matrix of Android devices.
             # the cross-product of the given axes. Internally, the given AndroidMatrix
             # will be expanded into a set of AndroidDevices.
             #
             # Only supported permutations will be instantiated.  Invalid permutations
             # (e.g., incompatible models/versions) are ignored.
-          &quot;androidModelIds&quot;: [ # Required. The ids of the set of Android device to be used.
-              # Use the TestEnvironmentDiscoveryService to get supported options.
-            &quot;A String&quot;,
-          ],
           &quot;orientations&quot;: [ # Required. The set of orientations to test with.
               # Use the TestEnvironmentDiscoveryService to get supported options.
             &quot;A String&quot;,
@@ -2578,65 +2693,64 @@
               # Use the TestEnvironmentDiscoveryService to get supported options.
             &quot;A String&quot;,
           ],
-        },
-        &quot;iosDeviceList&quot;: { # A list of iOS device configurations in which the test is to be executed. # A list of iOS devices.
-          &quot;iosDevices&quot;: [ # Required. A list of iOS devices.
-            { # A single iOS device.
-              &quot;orientation&quot;: &quot;A String&quot;, # Required. How the device is oriented during the test.
-                  # Use the TestEnvironmentDiscoveryService to get supported options.
-              &quot;iosVersionId&quot;: &quot;A String&quot;, # Required. The id of the iOS major software version to be used.
-                  # Use the TestEnvironmentDiscoveryService to get supported options.
-              &quot;locale&quot;: &quot;A String&quot;, # Required. The locale the test device used for testing.
-                  # Use the TestEnvironmentDiscoveryService to get supported options.
-              &quot;iosModelId&quot;: &quot;A String&quot;, # Required. The id of the iOS device to be used.
-                  # Use the TestEnvironmentDiscoveryService to get supported options.
-            },
+          &quot;androidModelIds&quot;: [ # Required. The ids of the set of Android device to be used.
+              # Use the TestEnvironmentDiscoveryService to get supported options.
+            &quot;A String&quot;,
           ],
         },
         &quot;androidDeviceList&quot;: { # A list of Android device configurations in which the test is to be executed. # A list of Android devices; the test will be run only on the specified
             # devices.
           &quot;androidDevices&quot;: [ # Required. A list of Android devices.
             { # A single Android device.
-              &quot;orientation&quot;: &quot;A String&quot;, # Required. How the device is oriented during the test.
-                  # Use the TestEnvironmentDiscoveryService to get supported options.
-              &quot;locale&quot;: &quot;A String&quot;, # Required. The locale the test device used for testing.
-                  # Use the TestEnvironmentDiscoveryService to get supported options.
               &quot;androidModelId&quot;: &quot;A String&quot;, # Required. The id of the Android device to be used.
                   # Use the TestEnvironmentDiscoveryService to get supported options.
               &quot;androidVersionId&quot;: &quot;A String&quot;, # Required. The id of the Android OS version to be used.
                   # Use the TestEnvironmentDiscoveryService to get supported options.
+              &quot;locale&quot;: &quot;A String&quot;, # Required. The locale the test device used for testing.
+                  # Use the TestEnvironmentDiscoveryService to get supported options.
+              &quot;orientation&quot;: &quot;A String&quot;, # Required. How the device is oriented during the test.
+                  # Use the TestEnvironmentDiscoveryService to get supported options.
             },
           ],
         },
       },
+      &quot;outcomeSummary&quot;: &quot;A String&quot;, # Output Only. The overall outcome of the test.
+          # Only set when the test matrix state is FINISHED.
       &quot;resultStorage&quot;: { # Locations where the results of running the test are stored. # Required. Where the results for the matrix are written.
         &quot;toolResultsExecution&quot;: { # Represents a tool results execution resource. # Output only. The tool results execution that results are written to.
             #
             # This has the results of a TestMatrix.
+          &quot;executionId&quot;: &quot;A String&quot;, # Output only. A tool results execution ID.
           &quot;projectId&quot;: &quot;A String&quot;, # Output only. The cloud project that owns the tool results execution.
           &quot;historyId&quot;: &quot;A String&quot;, # Output only. A tool results history ID.
-          &quot;executionId&quot;: &quot;A String&quot;, # Output only. A tool results execution ID.
         },
         &quot;resultsUrl&quot;: &quot;A String&quot;, # Output only. URL to the results in the Firebase Web Console.
-        &quot;toolResultsHistory&quot;: { # Represents a tool results history resource. # The tool results history that contains the tool results execution that
-            # results are written to.
-            #
-            # If not provided, the service will choose an appropriate value.
-          &quot;projectId&quot;: &quot;A String&quot;, # Required. The cloud project that owns the tool results history.
-          &quot;historyId&quot;: &quot;A String&quot;, # Required. A tool results history ID.
-        },
         &quot;googleCloudStorage&quot;: { # A storage location within Google cloud storage (GCS). # Required.
           &quot;gcsPath&quot;: &quot;A String&quot;, # Required. The path to a directory in GCS that will
               # eventually contain the results for this test.
               # The requesting user must have write access on the bucket in the supplied
               # path.
         },
+        &quot;toolResultsHistory&quot;: { # Represents a tool results history resource. # The tool results history that contains the tool results execution that
+            # results are written to.
+            #
+            # If not provided, the service will choose an appropriate value.
+          &quot;historyId&quot;: &quot;A String&quot;, # Required. A tool results history ID.
+          &quot;projectId&quot;: &quot;A String&quot;, # Required. The cloud project that owns the tool results history.
+        },
       },
-      &quot;testMatrixId&quot;: &quot;A String&quot;, # Output only. Unique id set by the service.
       &quot;invalidMatrixDetails&quot;: &quot;A String&quot;, # Output only. Describes why the matrix is considered invalid.
           # Only useful for matrices in the INVALID state.
-      &quot;outcomeSummary&quot;: &quot;A String&quot;, # Output Only. The overall outcome of the test.
-          # Only set when the test matrix state is FINISHED.
+      &quot;clientInfo&quot;: { # Information about the client which invoked the test. # Information about the client which invoked the test.
+        &quot;clientInfoDetails&quot;: [ # The list of detailed information about client.
+          { # Key-value pair of detailed information about the client which invoked the
+              # test. Examples: {&#x27;Version&#x27;, &#x27;1.0&#x27;}, {&#x27;Release Track&#x27;, &#x27;BETA&#x27;}.
+            &quot;key&quot;: &quot;A String&quot;, # Required. The key of detailed client information.
+            &quot;value&quot;: &quot;A String&quot;, # Required. The value of detailed client information.
+          },
+        ],
+        &quot;name&quot;: &quot;A String&quot;, # Required. Client name, such as gcloud.
+      },
     }</pre>
 </div>