<html><body>
<style>

body, h1, h2, h3, div, span, p, pre, a {
  margin: 0;
  padding: 0;
  border: 0;
  font-weight: inherit;
  font-style: inherit;
  font-size: 100%;
  font-family: inherit;
  vertical-align: baseline;
}

body {
  font-size: 13px;
  padding: 1em;
}

h1 {
  font-size: 26px;
  margin-bottom: 1em;
}

h2 {
  font-size: 24px;
  margin-bottom: 1em;
}

h3 {
  font-size: 20px;
  margin-bottom: 1em;
  margin-top: 1em;
}

pre, code {
  line-height: 1.5;
  font-family: Monaco, 'DejaVu Sans Mono', 'Bitstream Vera Sans Mono', 'Lucida Console', monospace;
}

pre {
  margin-top: 0.5em;
}

h1, h2, h3, p {
  font-family: Arial, sans serif;
}

h1, h2, h3 {
  border-bottom: solid #CCC 1px;
}

.toc_element {
  margin-top: 0.5em;
}

.firstline {
  margin-left: 2 em;
}

.method  {
  margin-top: 1em;
  border: solid 1px #CCC;
  padding: 1em;
  background: #EEE;
}

.details {
  font-weight: bold;
  font-size: 14px;
}

</style>

<h1><a href="testing_v1.html">Cloud Testing API</a> . <a href="testing_v1.projects.html">projects</a> . <a href="testing_v1.projects.testMatrices.html">testMatrices</a></h1>
<h2>Instance Methods</h2>
<p class="toc_element">
  <code><a href="#cancel">cancel(projectId, testMatrixId, x__xgafv=None)</a></code></p>
<p class="firstline">Cancels unfinished test executions in a test matrix.</p>
<p class="toc_element">
  <code><a href="#create">create(projectId, body=None, requestId=None, x__xgafv=None)</a></code></p>
<p class="firstline">Creates and runs a matrix of tests according to the given specifications.</p>
<p class="toc_element">
  <code><a href="#get">get(projectId, testMatrixId, x__xgafv=None)</a></code></p>
<p class="firstline">Checks the status of a test matrix.</p>
<h3>Method Details</h3>
<div class="method">
    <code class="details" id="cancel">cancel(projectId, testMatrixId, x__xgafv=None)</code>
  <pre>Cancels unfinished test executions in a test matrix.
This call returns immediately and cancellation proceeds asychronously.
If the matrix is already final, this operation will have no effect.

May return any of the following canonical error codes:

- PERMISSION_DENIED - if the user is not authorized to read project
- INVALID_ARGUMENT - if the request is malformed
- NOT_FOUND - if the Test Matrix does not exist

Args:
  projectId: string, Cloud project that owns the test. (required)
  testMatrixId: string, Test matrix that will be canceled. (required)
  x__xgafv: string, V1 error format.
    Allowed values
      1 - v1 error format
      2 - v2 error format

Returns:
  An object of the form:

    { # Response containing the current state of the specified test matrix.
    &quot;testState&quot;: &quot;A String&quot;, # The current rolled-up state of the test matrix.
        # If this state is already final, then the cancelation request will
        # have no effect.
  }</pre>
</div>

<div class="method">
    <code class="details" id="create">create(projectId, body=None, requestId=None, x__xgafv=None)</code>
  <pre>Creates and runs a matrix of tests according to the given specifications.
Unsupported environments will be returned in the state UNSUPPORTED.
Matrices are limited to at most 200 supported executions.

May return any of the following canonical error codes:

- PERMISSION_DENIED - if the user is not authorized to write to project
- INVALID_ARGUMENT - if the request is malformed or if the matrix expands
                     to more than 200 supported executions

Args:
  projectId: string, The GCE project under which this job will run. (required)
  body: object, The request body.
    The object takes the form of:

{ # TestMatrix captures all details about a test. It contains the environment
      # configuration, test specification, test executions and overall state and
      # outcome.
    &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;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;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;scenarios&quot;: [ # The list of scenarios that should be run during the test. Defaults to the
            # single scenario 0 if unspecified.
          42,
        ],
      },
      &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;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;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 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;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;action&quot;: &quot;A String&quot;, # Action name.
                  # Required for START_ACTIVITY.
              &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;launcherActivity&quot;: { # Specifies an intent that starts the main launcher activity. # An intent that starts the main launcher activity.
            },
          },
        ],
        &quot;appInitialActivity&quot;: &quot;A String&quot;, # The initial activity that should be used to start the app.
        &quot;maxSteps&quot;: 42, # The max number of steps Robo can execute.
            # Default is no limit.
        &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;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;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;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;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;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;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;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;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;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;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;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;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;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,
                  # 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;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;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;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
          # same process on a virtual or physical AndroidDevice.  They also specify
          # a test runner class, such as com.google.GoogleTestRunner, which can vary
          # on the specific instrumentation framework chosen.
          #
          # See &lt;http://developer.android.com/tools/testing/testing_android.html&gt; for
          # more information on types of Android tests.
        &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
            # higher! **
            # Orchestrator offers the following benefits:
            #  - No shared state
            #  - Crashes are isolated
            #  - Logs are scoped per test
            #
            # See
            # &lt;https://developer.android.com/training/testing/junit-runner.html#using-android-test-orchestrator&gt;
            # for more information about Android Test Orchestrator.
            #
            # If not set, the test will be run without the orchestrator.
        &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;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.
            # 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;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.
              #
              # 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.
              { # 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
                    # 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;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;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
          },
      },
      &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;name&quot;: &quot;A String&quot;, # Required. Client name, such as gcloud.
    },
    &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;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;A String&quot;,
            ],
          },
          &quot;numShards&quot;: 42, # Output only. The total number of shards.
        },
        &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;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;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;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;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;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;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;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;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 tool results step.
          &quot;historyId&quot;: &quot;A String&quot;, # Output only. A tool results history 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.
                # 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;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;scenarios&quot;: [ # The list of scenarios that should be run during the test. Defaults to the
                # single scenario 0 if unspecified.
              42,
            ],
          },
          &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;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;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 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;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;action&quot;: &quot;A String&quot;, # Action name.
                      # Required for START_ACTIVITY.
                  &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;launcherActivity&quot;: { # Specifies an intent that starts the main launcher activity. # An intent that starts the main launcher activity.
                },
              },
            ],
            &quot;appInitialActivity&quot;: &quot;A String&quot;, # The initial activity that should be used to start the app.
            &quot;maxSteps&quot;: 42, # The max number of steps Robo can execute.
                # Default is no limit.
            &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;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;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;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;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;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;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;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;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;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;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;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;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;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,
                      # 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;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;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;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
              # same process on a virtual or physical AndroidDevice.  They also specify
              # a test runner class, such as com.google.GoogleTestRunner, which can vary
              # on the specific instrumentation framework chosen.
              #
              # See &lt;http://developer.android.com/tools/testing/testing_android.html&gt; for
              # more information on types of Android tests.
            &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
                # higher! **
                # Orchestrator offers the following benefits:
                #  - No shared state
                #  - Crashes are isolated
                #  - Logs are scoped per test
                #
                # See
                # &lt;https://developer.android.com/training/testing/junit-runner.html#using-android-test-orchestrator&gt;
                # for more information about Android Test Orchestrator.
                #
                # If not set, the test will be run without the orchestrator.
            &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;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.
                # 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;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.
                  #
                  # 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.
                  { # 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
                        # 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;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;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
              },
          },
          &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;environmentMatrix&quot;: { # The matrix of environments in which the test is to be executed. # Required. The devices the tests are being executed on.
      &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;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;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;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;,
        ],
        &quot;androidVersionIds&quot;: [ # Required. The ids of the set of Android OS version to be used.
            # Use the TestEnvironmentDiscoveryService to get supported options.
          &quot;A String&quot;,
        ],
        &quot;locales&quot;: [ # Required. The set of locales the test device will enable for testing.
            # 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;resultStorage&quot;: { # Locations where the results of running the test are stored. # Required. Where the results for the matrix are written.
      &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;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;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;testMatrixId&quot;: &quot;A String&quot;, # Output only. Unique id set by the service.
  }

  requestId: string, A string id used to detect duplicated requests.
Ids are automatically scoped to a project, so
users should ensure the ID is unique per-project.
A UUID is recommended.

Optional, but strongly recommended.
  x__xgafv: string, V1 error format.
    Allowed values
      1 - v1 error format
      2 - v2 error format

Returns:
  An object of the form:

    { # TestMatrix captures all details about a test. It contains the environment
        # configuration, test specification, test executions and overall state and
        # outcome.
      &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;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;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;scenarios&quot;: [ # The list of scenarios that should be run during the test. Defaults to the
              # single scenario 0 if unspecified.
            42,
          ],
        },
        &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;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;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 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;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;action&quot;: &quot;A String&quot;, # Action name.
                    # Required for START_ACTIVITY.
                &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;launcherActivity&quot;: { # Specifies an intent that starts the main launcher activity. # An intent that starts the main launcher activity.
              },
            },
          ],
          &quot;appInitialActivity&quot;: &quot;A String&quot;, # The initial activity that should be used to start the app.
          &quot;maxSteps&quot;: 42, # The max number of steps Robo can execute.
              # Default is no limit.
          &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;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;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;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;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;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;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;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;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;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;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;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;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;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,
                    # 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;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;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;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
            # same process on a virtual or physical AndroidDevice.  They also specify
            # a test runner class, such as com.google.GoogleTestRunner, which can vary
            # on the specific instrumentation framework chosen.
            #
            # See &lt;http://developer.android.com/tools/testing/testing_android.html&gt; for
            # more information on types of Android tests.
          &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
              # higher! **
              # Orchestrator offers the following benefits:
              #  - No shared state
              #  - Crashes are isolated
              #  - Logs are scoped per test
              #
              # See
              # &lt;https://developer.android.com/training/testing/junit-runner.html#using-android-test-orchestrator&gt;
              # for more information about Android Test Orchestrator.
              #
              # If not set, the test will be run without the orchestrator.
          &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;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.
              # 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;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.
                #
                # 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.
                { # 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
                      # 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;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;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
            },
        },
        &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;name&quot;: &quot;A String&quot;, # Required. Client name, such as gcloud.
      },
      &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;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;A String&quot;,
              ],
            },
            &quot;numShards&quot;: 42, # Output only. The total number of shards.
          },
          &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;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;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;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;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;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;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;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;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 tool results step.
            &quot;historyId&quot;: &quot;A String&quot;, # Output only. A tool results history 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.
                  # 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;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;scenarios&quot;: [ # The list of scenarios that should be run during the test. Defaults to the
                  # single scenario 0 if unspecified.
                42,
              ],
            },
            &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;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;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 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;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;action&quot;: &quot;A String&quot;, # Action name.
                        # Required for START_ACTIVITY.
                    &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;launcherActivity&quot;: { # Specifies an intent that starts the main launcher activity. # An intent that starts the main launcher activity.
                  },
                },
              ],
              &quot;appInitialActivity&quot;: &quot;A String&quot;, # The initial activity that should be used to start the app.
              &quot;maxSteps&quot;: 42, # The max number of steps Robo can execute.
                  # Default is no limit.
              &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;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;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;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;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;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;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;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;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;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;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;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;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;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,
                        # 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;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;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;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
                # same process on a virtual or physical AndroidDevice.  They also specify
                # a test runner class, such as com.google.GoogleTestRunner, which can vary
                # on the specific instrumentation framework chosen.
                #
                # See &lt;http://developer.android.com/tools/testing/testing_android.html&gt; for
                # more information on types of Android tests.
              &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
                  # higher! **
                  # Orchestrator offers the following benefits:
                  #  - No shared state
                  #  - Crashes are isolated
                  #  - Logs are scoped per test
                  #
                  # See
                  # &lt;https://developer.android.com/training/testing/junit-runner.html#using-android-test-orchestrator&gt;
                  # for more information about Android Test Orchestrator.
                  #
                  # If not set, the test will be run without the orchestrator.
              &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;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.
                  # 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;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.
                    #
                    # 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.
                    { # 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
                          # 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;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;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
                },
            },
            &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;environmentMatrix&quot;: { # The matrix of environments in which the test is to be executed. # Required. The devices the tests are being executed on.
        &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;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;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;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;,
          ],
          &quot;androidVersionIds&quot;: [ # Required. The ids of the set of Android OS version to be used.
              # Use the TestEnvironmentDiscoveryService to get supported options.
            &quot;A String&quot;,
          ],
          &quot;locales&quot;: [ # Required. The set of locales the test device will enable for testing.
              # 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;resultStorage&quot;: { # Locations where the results of running the test are stored. # Required. Where the results for the matrix are written.
        &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;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;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;testMatrixId&quot;: &quot;A String&quot;, # Output only. Unique id set by the service.
    }</pre>
</div>

<div class="method">
    <code class="details" id="get">get(projectId, testMatrixId, x__xgafv=None)</code>
  <pre>Checks the status of a test matrix.

May return any of the following canonical error codes:

- PERMISSION_DENIED - if the user is not authorized to read project
- INVALID_ARGUMENT - if the request is malformed
- NOT_FOUND - if the Test Matrix does not exist

Args:
  projectId: string, Cloud project that owns the test matrix. (required)
  testMatrixId: string, Unique test matrix id which was assigned by the service. (required)
  x__xgafv: string, V1 error format.
    Allowed values
      1 - v1 error format
      2 - v2 error format

Returns:
  An object of the form:

    { # TestMatrix captures all details about a test. It contains the environment
        # configuration, test specification, test executions and overall state and
        # outcome.
      &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;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;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;scenarios&quot;: [ # The list of scenarios that should be run during the test. Defaults to the
              # single scenario 0 if unspecified.
            42,
          ],
        },
        &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;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;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 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;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;action&quot;: &quot;A String&quot;, # Action name.
                    # Required for START_ACTIVITY.
                &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;launcherActivity&quot;: { # Specifies an intent that starts the main launcher activity. # An intent that starts the main launcher activity.
              },
            },
          ],
          &quot;appInitialActivity&quot;: &quot;A String&quot;, # The initial activity that should be used to start the app.
          &quot;maxSteps&quot;: 42, # The max number of steps Robo can execute.
              # Default is no limit.
          &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;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;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;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;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;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;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;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;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;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;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;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;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;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,
                    # 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;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;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;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
            # same process on a virtual or physical AndroidDevice.  They also specify
            # a test runner class, such as com.google.GoogleTestRunner, which can vary
            # on the specific instrumentation framework chosen.
            #
            # See &lt;http://developer.android.com/tools/testing/testing_android.html&gt; for
            # more information on types of Android tests.
          &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
              # higher! **
              # Orchestrator offers the following benefits:
              #  - No shared state
              #  - Crashes are isolated
              #  - Logs are scoped per test
              #
              # See
              # &lt;https://developer.android.com/training/testing/junit-runner.html#using-android-test-orchestrator&gt;
              # for more information about Android Test Orchestrator.
              #
              # If not set, the test will be run without the orchestrator.
          &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;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.
              # 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;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.
                #
                # 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.
                { # 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
                      # 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;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;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
            },
        },
        &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;name&quot;: &quot;A String&quot;, # Required. Client name, such as gcloud.
      },
      &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;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;A String&quot;,
              ],
            },
            &quot;numShards&quot;: 42, # Output only. The total number of shards.
          },
          &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;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;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;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;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;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;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;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;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 tool results step.
            &quot;historyId&quot;: &quot;A String&quot;, # Output only. A tool results history 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.
                  # 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;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;scenarios&quot;: [ # The list of scenarios that should be run during the test. Defaults to the
                  # single scenario 0 if unspecified.
                42,
              ],
            },
            &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;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;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 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;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;action&quot;: &quot;A String&quot;, # Action name.
                        # Required for START_ACTIVITY.
                    &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;launcherActivity&quot;: { # Specifies an intent that starts the main launcher activity. # An intent that starts the main launcher activity.
                  },
                },
              ],
              &quot;appInitialActivity&quot;: &quot;A String&quot;, # The initial activity that should be used to start the app.
              &quot;maxSteps&quot;: 42, # The max number of steps Robo can execute.
                  # Default is no limit.
              &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;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;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;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;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;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;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;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;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;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;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;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;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;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,
                        # 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;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;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;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
                # same process on a virtual or physical AndroidDevice.  They also specify
                # a test runner class, such as com.google.GoogleTestRunner, which can vary
                # on the specific instrumentation framework chosen.
                #
                # See &lt;http://developer.android.com/tools/testing/testing_android.html&gt; for
                # more information on types of Android tests.
              &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
                  # higher! **
                  # Orchestrator offers the following benefits:
                  #  - No shared state
                  #  - Crashes are isolated
                  #  - Logs are scoped per test
                  #
                  # See
                  # &lt;https://developer.android.com/training/testing/junit-runner.html#using-android-test-orchestrator&gt;
                  # for more information about Android Test Orchestrator.
                  #
                  # If not set, the test will be run without the orchestrator.
              &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;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.
                  # 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;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.
                    #
                    # 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.
                    { # 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
                          # 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;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;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
                },
            },
            &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;environmentMatrix&quot;: { # The matrix of environments in which the test is to be executed. # Required. The devices the tests are being executed on.
        &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;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;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;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;,
          ],
          &quot;androidVersionIds&quot;: [ # Required. The ids of the set of Android OS version to be used.
              # Use the TestEnvironmentDiscoveryService to get supported options.
            &quot;A String&quot;,
          ],
          &quot;locales&quot;: [ # Required. The set of locales the test device will enable for testing.
              # 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;resultStorage&quot;: { # Locations where the results of running the test are stored. # Required. Where the results for the matrix are written.
        &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;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;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;testMatrixId&quot;: &quot;A String&quot;, # Output only. Unique id set by the service.
    }</pre>
</div>

</body></html>