<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="toolresults_v1beta3.html">Cloud Tool Results API</a> . <a href="toolresults_v1beta3.environments.html">environments</a></h1>
<h2>Instance Methods</h2>
<p class="toc_element">
  <code><a href="#get">get(projectId, historyId, executionId, environmentId, x__xgafv=None)</a></code></p>
<p class="firstline">Gets an Environment.</p>
<p class="toc_element">
  <code><a href="#list">list(projectId, historyId, executionId, pageToken=None, pageSize=None, x__xgafv=None)</a></code></p>
<p class="firstline">Lists Environments for a given Execution.</p>
<p class="toc_element">
  <code><a href="#list_next">list_next(previous_request, previous_response)</a></code></p>
<p class="firstline">Retrieves the next page of results.</p>
<h3>Method Details</h3>
<div class="method">
    <code class="details" id="get">get(projectId, historyId, executionId, environmentId, x__xgafv=None)</code>
  <pre>Gets an Environment.

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 Environment does not exist

Args:
  projectId: string, Required. A Project id. (required)
  historyId: string, Required. A History id. (required)
  executionId: string, Required. An Execution id. (required)
  environmentId: string, Required. An Environment id. (required)
  x__xgafv: string, V1 error format.
    Allowed values
      1 - v1 error format
      2 - v2 error format

Returns:
  An object of the form:

    { # An Environment represents the set of test runs (Steps) from the parent
      # Execution that are configured with the same set of dimensions (Model,
      # Version, Locale, and Orientation). Multiple such runs occur particularly
      # because of features like sharding (splitting up a test suite to run in
      # parallel across devices) and reruns (running a test multiple times to check
      # for different outcomes).
    &quot;completionTime&quot;: { # A Timestamp represents a point in time independent of any time zone or local # Output only. The time when the Environment status was set to complete.
        #
        # This value will be set automatically when state transitions to
        # COMPLETE.
        # calendar, encoded as a count of seconds and fractions of seconds at
        # nanosecond resolution. The count is relative to an epoch at UTC midnight on
        # January 1, 1970, in the proleptic Gregorian calendar which extends the
        # Gregorian calendar backwards to year one.
        #
        # All minutes are 60 seconds long. Leap seconds are &quot;smeared&quot; so that no leap
        # second table is needed for interpretation, using a [24-hour linear
        # smear](https://developers.google.com/time/smear).
        #
        # The range is from 0001-01-01T00:00:00Z to 9999-12-31T23:59:59.999999999Z. By
        # restricting to that range, we ensure that we can convert to and from [RFC
        # 3339](https://www.ietf.org/rfc/rfc3339.txt) date strings.
      &quot;nanos&quot;: 42, # Non-negative fractions of a second at nanosecond resolution. Negative
          # second values with fractions must still have non-negative nanos values
          # that count forward in time. Must be from 0 to 999,999,999
          # inclusive.
      &quot;seconds&quot;: &quot;A String&quot;, # Represents seconds of UTC time since Unix epoch
          # 1970-01-01T00:00:00Z. Must be from 0001-01-01T00:00:00Z to
          # 9999-12-31T23:59:59Z inclusive.
    },
    &quot;shardSummaries&quot;: [ # Output only. Summaries of shards.
        #
        # Only one shard will present unless sharding feature is enabled in
        # TestExecutionService.
      { # Result summary for a shard in an environment.
        &quot;runs&quot;: [ # Summaries of the steps belonging to the shard.
            #
            # With flaky_test_attempts enabled from TestExecutionService, more than one
            # run (Step) can present. And the runs will be sorted by multistep_number.
          { # Lightweight summary of a step within this execution.
          },
        ],
        &quot;shardResult&quot;: { # Merged test result for environment. # Merged result of the shard.
            #
            # If the environment has only one step (no reruns or shards), then the merged
            # result is the same as the step result. If the environment has multiple shards
            # and/or reruns, then the results of shards and reruns that belong to the same
            # environment are merged into one environment result.
          &quot;testSuiteOverviews&quot;: [ # The combined and rolled-up result of each test suite that was run as part
              #  of this environment.
              #
              #  Combining:
              #  When the test cases from a suite are run in different steps (sharding),
              #  the results are added back together in one overview. (e.g., if shard1 has
              #  2 failures and shard2 has 1 failure than the overview failure_count = 3).
              #
              #  Rollup:
              #  When test cases from the same suite are run multiple times (flaky), the
              #  results are combined (e.g., if testcase1.run1 fails, testcase1.run2
              #  passes, and both testcase2.run1 and testcase2.run2 fail then the overview
              #  flaky_count = 1 and failure_count = 1).
            { # A summary of a test suite result either parsed from XML or uploaded
                # directly by a user.
                #
                # Note: the API related comments are for StepService only. This message is
                # also being used in ExecutionService in a read only mode for the corresponding
                # step.
              &quot;failureCount&quot;: 42, # Number of failed test cases, typically set by the service by parsing the
                  # xml_source. May also be set by the user.
                  #
                  # - In create/response: always set
                  # - In update request: never
              &quot;name&quot;: &quot;A String&quot;, # The name of the test suite.
                  #
                  # - In create/response: always set
                  # - In update request: never
              &quot;elapsedTime&quot;: { #  # Elapsed time of test suite.
                  # A Duration represents a signed, fixed-length span of time represented
                  # as a count of seconds and fractions of seconds at nanosecond
                  # resolution. It is independent of any calendar and concepts like &quot;day&quot;
                  # or &quot;month&quot;. It is related to Timestamp in that the difference between
                  # two Timestamp values is a Duration and it can be added or subtracted
                  # from a Timestamp. Range is approximately +-10,000 years.
                &quot;seconds&quot;: &quot;A String&quot;, # Signed seconds of the span of time. Must be from -315,576,000,000
                    # to +315,576,000,000 inclusive. Note: these bounds are computed from:
                    # 60 sec/min * 60 min/hr * 24 hr/day * 365.25 days/year * 10000 years
                &quot;nanos&quot;: 42, # Signed fractions of a second at nanosecond resolution of the span
                    # of time. Durations less than one second are represented with a 0
                    # `seconds` field and a positive or negative `nanos` field. For durations
                    # of one second or more, a non-zero value for the `nanos` field must be
                    # of the same sign as the `seconds` field. Must be from -999,999,999
                    # to +999,999,999 inclusive.
              },
              &quot;flakyCount&quot;: 42, # Number of flaky test cases, set by the service by rolling up flaky test
                  # attempts.
                  #
                  # Present only for rollup test suite overview at environment level. A step
                  # cannot have flaky test cases.
              &quot;errorCount&quot;: 42, # Number of test cases in error, typically set by the service by parsing the
                  # xml_source.
                  #
                  # - In create/response: always set
                  # - In update request: never
              &quot;totalCount&quot;: 42, # Number of test cases, typically set by the service by parsing the
                  # xml_source.
                  #
                  # - In create/response: always set
                  # - In update request: never
              &quot;skippedCount&quot;: 42, # Number of test cases not run, typically set by the service by parsing the
                  # xml_source.
                  #
                  # - In create/response: always set
                  # - In update request: never
              &quot;xmlSource&quot;: { # A reference to a file. # If this test suite was parsed from XML, this is the URI where the original
                  # XML file is stored.
                  #
                  # Note: Multiple test suites can share the same xml_source
                  #
                  # Returns INVALID_ARGUMENT if the uri format is not supported.
                  #
                  # - In create/response: optional
                  # - In update request: never
                &quot;fileUri&quot;: &quot;A String&quot;, # The URI of a file stored in Google Cloud Storage.
                    #
                    # For example: http://storage.googleapis.com/mybucket/path/to/test.xml
                    # or in gsutil format: gs://mybucket/path/to/test.xml
                    # with version-specific info,
                    # gs://mybucket/path/to/test.xml#1360383693690000
                    #
                    # An INVALID_ARGUMENT error will be returned if the URI format is not
                    # supported.
                    #
                    # - In response: always set
                    # - In create/update request: always set
              },
            },
          ],
          &quot;state&quot;: &quot;A String&quot;, # State of the resource
          &quot;outcome&quot;: { # Interprets a result so that humans and machines can act on it. # Outcome of the resource
            &quot;successDetail&quot;: { # Details for an outcome with a SUCCESS outcome summary. # More information about a SUCCESS outcome.
                #
                # Returns INVALID_ARGUMENT if this field is set
                # but the summary is not SUCCESS.
                #
                # Optional
                # LINT.IfChange
              &quot;otherNativeCrash&quot;: True or False, # If a native process other than the app crashed.
            },
            &quot;skippedDetail&quot;: { # Details for an outcome with a SKIPPED outcome summary. # More information about a SKIPPED outcome.
                #
                # Returns INVALID_ARGUMENT if this field is set
                # but the summary is not SKIPPED.
                #
                # Optional
              &quot;incompatibleAppVersion&quot;: True or False, # If the App doesn&#x27;t support the specific API level.
              &quot;incompatibleDevice&quot;: True or False, # If the requested OS version doesn&#x27;t run on the specific device model.
              &quot;incompatibleArchitecture&quot;: True or False, # If the App doesn&#x27;t run on the specific architecture, for example, x86.
            },
            &quot;summary&quot;: &quot;A String&quot;, # The simplest way to interpret a result.
                #
                # Required
            &quot;failureDetail&quot;: { # Details for an outcome with a FAILURE outcome summary. # More information about a FAILURE outcome.
                #
                # Returns INVALID_ARGUMENT if this field is set
                # but the summary is not FAILURE.
                #
                # Optional
              &quot;crashed&quot;: True or False, # If the failure was severe because the system (app) under test crashed.
              &quot;unableToCrawl&quot;: True or False, # If the robo was unable to crawl the app; perhaps because the app did not
                  # start.
              &quot;notInstalled&quot;: True or False, # If an app is not installed and thus no test can be run with the app.
                  # This might be caused by trying to run a test on an unsupported platform.
              &quot;timedOut&quot;: True or False, # If the test overran some time limit, and that is why it failed.
              &quot;otherNativeCrash&quot;: True or False, # If a native process (including any other than the app) crashed.
            },
            &quot;inconclusiveDetail&quot;: { # Details for an outcome with an INCONCLUSIVE outcome summary. # More information about an INCONCLUSIVE outcome.
                #
                # Returns INVALID_ARGUMENT if this field is set
                # but the summary is not INCONCLUSIVE.
                #
                # Optional
              &quot;hasErrorLogs&quot;: True or False, # If results are being provided to the user in certain cases of
                  # infrastructure failures
              &quot;infrastructureFailure&quot;: True or False, # If the test runner could not determine success or failure because the test
                  # depends on a component other than the system under test which failed.
                  #
                  # For example, a mobile test requires provisioning a device where the test
                  # executes, and that provisioning can fail.
              &quot;abortedByUser&quot;: True or False, # If the end user aborted the test execution before a pass or fail could be
                  # determined.
                  # For example, the user pressed ctrl-c which sent a kill signal to the test
                  # runner while the test was running.
            },
          },
        },
      },
    ],
    &quot;executionId&quot;: &quot;A String&quot;, # Output only. An Execution id.
    &quot;resultsStorage&quot;: { # The storage for test results. # The location where output files are stored in the user bucket.
      &quot;resultsStoragePath&quot;: { # A reference to a file. # The root directory for test results.
        &quot;fileUri&quot;: &quot;A String&quot;, # The URI of a file stored in Google Cloud Storage.
            #
            # For example: http://storage.googleapis.com/mybucket/path/to/test.xml
            # or in gsutil format: gs://mybucket/path/to/test.xml
            # with version-specific info,
            # gs://mybucket/path/to/test.xml#1360383693690000
            #
            # An INVALID_ARGUMENT error will be returned if the URI format is not
            # supported.
            #
            # - In response: always set
            # - In create/update request: always set
      },
      &quot;xunitXmlFile&quot;: { # A reference to a file. # The path to the Xunit XML file.
        &quot;fileUri&quot;: &quot;A String&quot;, # The URI of a file stored in Google Cloud Storage.
            #
            # For example: http://storage.googleapis.com/mybucket/path/to/test.xml
            # or in gsutil format: gs://mybucket/path/to/test.xml
            # with version-specific info,
            # gs://mybucket/path/to/test.xml#1360383693690000
            #
            # An INVALID_ARGUMENT error will be returned if the URI format is not
            # supported.
            #
            # - In response: always set
            # - In create/update request: always set
      },
    },
    &quot;displayName&quot;: &quot;A String&quot;, # A short human-readable name to display in the UI.
        # Maximum of 100 characters.
        # For example: Nexus 5, API 27.
    &quot;historyId&quot;: &quot;A String&quot;, # Output only. A History id.
    &quot;environmentId&quot;: &quot;A String&quot;, # Output only. An Environment id.
    &quot;creationTime&quot;: { # A Timestamp represents a point in time independent of any time zone or local # Output only. The time when the Environment was created.
        # calendar, encoded as a count of seconds and fractions of seconds at
        # nanosecond resolution. The count is relative to an epoch at UTC midnight on
        # January 1, 1970, in the proleptic Gregorian calendar which extends the
        # Gregorian calendar backwards to year one.
        #
        # All minutes are 60 seconds long. Leap seconds are &quot;smeared&quot; so that no leap
        # second table is needed for interpretation, using a [24-hour linear
        # smear](https://developers.google.com/time/smear).
        #
        # The range is from 0001-01-01T00:00:00Z to 9999-12-31T23:59:59.999999999Z. By
        # restricting to that range, we ensure that we can convert to and from [RFC
        # 3339](https://www.ietf.org/rfc/rfc3339.txt) date strings.
      &quot;nanos&quot;: 42, # Non-negative fractions of a second at nanosecond resolution. Negative
          # second values with fractions must still have non-negative nanos values
          # that count forward in time. Must be from 0 to 999,999,999
          # inclusive.
      &quot;seconds&quot;: &quot;A String&quot;, # Represents seconds of UTC time since Unix epoch
          # 1970-01-01T00:00:00Z. Must be from 0001-01-01T00:00:00Z to
          # 9999-12-31T23:59:59Z inclusive.
    },
    &quot;environmentResult&quot;: { # Merged test result for environment. # Merged result of the environment.
        #
        # If the environment has only one step (no reruns or shards), then the merged
        # result is the same as the step result. If the environment has multiple shards
        # and/or reruns, then the results of shards and reruns that belong to the same
        # environment are merged into one environment result.
      &quot;testSuiteOverviews&quot;: [ # The combined and rolled-up result of each test suite that was run as part
          #  of this environment.
          #
          #  Combining:
          #  When the test cases from a suite are run in different steps (sharding),
          #  the results are added back together in one overview. (e.g., if shard1 has
          #  2 failures and shard2 has 1 failure than the overview failure_count = 3).
          #
          #  Rollup:
          #  When test cases from the same suite are run multiple times (flaky), the
          #  results are combined (e.g., if testcase1.run1 fails, testcase1.run2
          #  passes, and both testcase2.run1 and testcase2.run2 fail then the overview
          #  flaky_count = 1 and failure_count = 1).
        { # A summary of a test suite result either parsed from XML or uploaded
            # directly by a user.
            #
            # Note: the API related comments are for StepService only. This message is
            # also being used in ExecutionService in a read only mode for the corresponding
            # step.
          &quot;failureCount&quot;: 42, # Number of failed test cases, typically set by the service by parsing the
              # xml_source. May also be set by the user.
              #
              # - In create/response: always set
              # - In update request: never
          &quot;name&quot;: &quot;A String&quot;, # The name of the test suite.
              #
              # - In create/response: always set
              # - In update request: never
          &quot;elapsedTime&quot;: { #  # Elapsed time of test suite.
              # A Duration represents a signed, fixed-length span of time represented
              # as a count of seconds and fractions of seconds at nanosecond
              # resolution. It is independent of any calendar and concepts like &quot;day&quot;
              # or &quot;month&quot;. It is related to Timestamp in that the difference between
              # two Timestamp values is a Duration and it can be added or subtracted
              # from a Timestamp. Range is approximately +-10,000 years.
            &quot;seconds&quot;: &quot;A String&quot;, # Signed seconds of the span of time. Must be from -315,576,000,000
                # to +315,576,000,000 inclusive. Note: these bounds are computed from:
                # 60 sec/min * 60 min/hr * 24 hr/day * 365.25 days/year * 10000 years
            &quot;nanos&quot;: 42, # Signed fractions of a second at nanosecond resolution of the span
                # of time. Durations less than one second are represented with a 0
                # `seconds` field and a positive or negative `nanos` field. For durations
                # of one second or more, a non-zero value for the `nanos` field must be
                # of the same sign as the `seconds` field. Must be from -999,999,999
                # to +999,999,999 inclusive.
          },
          &quot;flakyCount&quot;: 42, # Number of flaky test cases, set by the service by rolling up flaky test
              # attempts.
              #
              # Present only for rollup test suite overview at environment level. A step
              # cannot have flaky test cases.
          &quot;errorCount&quot;: 42, # Number of test cases in error, typically set by the service by parsing the
              # xml_source.
              #
              # - In create/response: always set
              # - In update request: never
          &quot;totalCount&quot;: 42, # Number of test cases, typically set by the service by parsing the
              # xml_source.
              #
              # - In create/response: always set
              # - In update request: never
          &quot;skippedCount&quot;: 42, # Number of test cases not run, typically set by the service by parsing the
              # xml_source.
              #
              # - In create/response: always set
              # - In update request: never
          &quot;xmlSource&quot;: { # A reference to a file. # If this test suite was parsed from XML, this is the URI where the original
              # XML file is stored.
              #
              # Note: Multiple test suites can share the same xml_source
              #
              # Returns INVALID_ARGUMENT if the uri format is not supported.
              #
              # - In create/response: optional
              # - In update request: never
            &quot;fileUri&quot;: &quot;A String&quot;, # The URI of a file stored in Google Cloud Storage.
                #
                # For example: http://storage.googleapis.com/mybucket/path/to/test.xml
                # or in gsutil format: gs://mybucket/path/to/test.xml
                # with version-specific info,
                # gs://mybucket/path/to/test.xml#1360383693690000
                #
                # An INVALID_ARGUMENT error will be returned if the URI format is not
                # supported.
                #
                # - In response: always set
                # - In create/update request: always set
          },
        },
      ],
      &quot;state&quot;: &quot;A String&quot;, # State of the resource
      &quot;outcome&quot;: { # Interprets a result so that humans and machines can act on it. # Outcome of the resource
        &quot;successDetail&quot;: { # Details for an outcome with a SUCCESS outcome summary. # More information about a SUCCESS outcome.
            #
            # Returns INVALID_ARGUMENT if this field is set
            # but the summary is not SUCCESS.
            #
            # Optional
            # LINT.IfChange
          &quot;otherNativeCrash&quot;: True or False, # If a native process other than the app crashed.
        },
        &quot;skippedDetail&quot;: { # Details for an outcome with a SKIPPED outcome summary. # More information about a SKIPPED outcome.
            #
            # Returns INVALID_ARGUMENT if this field is set
            # but the summary is not SKIPPED.
            #
            # Optional
          &quot;incompatibleAppVersion&quot;: True or False, # If the App doesn&#x27;t support the specific API level.
          &quot;incompatibleDevice&quot;: True or False, # If the requested OS version doesn&#x27;t run on the specific device model.
          &quot;incompatibleArchitecture&quot;: True or False, # If the App doesn&#x27;t run on the specific architecture, for example, x86.
        },
        &quot;summary&quot;: &quot;A String&quot;, # The simplest way to interpret a result.
            #
            # Required
        &quot;failureDetail&quot;: { # Details for an outcome with a FAILURE outcome summary. # More information about a FAILURE outcome.
            #
            # Returns INVALID_ARGUMENT if this field is set
            # but the summary is not FAILURE.
            #
            # Optional
          &quot;crashed&quot;: True or False, # If the failure was severe because the system (app) under test crashed.
          &quot;unableToCrawl&quot;: True or False, # If the robo was unable to crawl the app; perhaps because the app did not
              # start.
          &quot;notInstalled&quot;: True or False, # If an app is not installed and thus no test can be run with the app.
              # This might be caused by trying to run a test on an unsupported platform.
          &quot;timedOut&quot;: True or False, # If the test overran some time limit, and that is why it failed.
          &quot;otherNativeCrash&quot;: True or False, # If a native process (including any other than the app) crashed.
        },
        &quot;inconclusiveDetail&quot;: { # Details for an outcome with an INCONCLUSIVE outcome summary. # More information about an INCONCLUSIVE outcome.
            #
            # Returns INVALID_ARGUMENT if this field is set
            # but the summary is not INCONCLUSIVE.
            #
            # Optional
          &quot;hasErrorLogs&quot;: True or False, # If results are being provided to the user in certain cases of
              # infrastructure failures
          &quot;infrastructureFailure&quot;: True or False, # If the test runner could not determine success or failure because the test
              # depends on a component other than the system under test which failed.
              #
              # For example, a mobile test requires provisioning a device where the test
              # executes, and that provisioning can fail.
          &quot;abortedByUser&quot;: True or False, # If the end user aborted the test execution before a pass or fail could be
              # determined.
              # For example, the user pressed ctrl-c which sent a kill signal to the test
              # runner while the test was running.
        },
      },
    },
    &quot;dimensionValue&quot;: [ # Dimension values describing the environment. Dimension values always
        # consist of &quot;Model&quot;, &quot;Version&quot;, &quot;Locale&quot;, and &quot;Orientation&quot;.
        #
        # - In response: always set
        # - In create request: always set
        # - In update request: never set
      {
        &quot;value&quot;: &quot;A String&quot;,
        &quot;key&quot;: &quot;A String&quot;,
      },
    ],
    &quot;projectId&quot;: &quot;A String&quot;, # Output only. A Project id.
  }</pre>
</div>

<div class="method">
    <code class="details" id="list">list(projectId, historyId, executionId, pageToken=None, pageSize=None, x__xgafv=None)</code>
  <pre>Lists Environments for a given Execution.

The Environments are sorted by display name.

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 containing Execution does not exist

Args:
  projectId: string, Required. A Project id. (required)
  historyId: string, Required. A History id. (required)
  executionId: string, Required. An Execution id. (required)
  pageToken: string, A continuation token to resume the query at the next item.
  pageSize: integer, The maximum number of Environments to fetch.

Default value: 25. The server will use this default if the field is not set
or has a value of 0.
  x__xgafv: string, V1 error format.
    Allowed values
      1 - v1 error format
      2 - v2 error format

Returns:
  An object of the form:

    { # Response message for EnvironmentService.ListEnvironments.
    &quot;projectId&quot;: &quot;A String&quot;, # A Project id.
        #
        # Always set.
    &quot;historyId&quot;: &quot;A String&quot;, # A History id.
        #
        # Always set.
    &quot;executionId&quot;: &quot;A String&quot;, # A Execution id
        #
        # Always set.
    &quot;nextPageToken&quot;: &quot;A String&quot;, # A continuation token to resume the query at the next item.
        #
        # Will only be set if there are more Environments to fetch.
    &quot;environments&quot;: [ # Environments.
        #
        # Always set.
      { # An Environment represents the set of test runs (Steps) from the parent
          # Execution that are configured with the same set of dimensions (Model,
          # Version, Locale, and Orientation). Multiple such runs occur particularly
          # because of features like sharding (splitting up a test suite to run in
          # parallel across devices) and reruns (running a test multiple times to check
          # for different outcomes).
        &quot;completionTime&quot;: { # A Timestamp represents a point in time independent of any time zone or local # Output only. The time when the Environment status was set to complete.
            #
            # This value will be set automatically when state transitions to
            # COMPLETE.
            # calendar, encoded as a count of seconds and fractions of seconds at
            # nanosecond resolution. The count is relative to an epoch at UTC midnight on
            # January 1, 1970, in the proleptic Gregorian calendar which extends the
            # Gregorian calendar backwards to year one.
            #
            # All minutes are 60 seconds long. Leap seconds are &quot;smeared&quot; so that no leap
            # second table is needed for interpretation, using a [24-hour linear
            # smear](https://developers.google.com/time/smear).
            #
            # The range is from 0001-01-01T00:00:00Z to 9999-12-31T23:59:59.999999999Z. By
            # restricting to that range, we ensure that we can convert to and from [RFC
            # 3339](https://www.ietf.org/rfc/rfc3339.txt) date strings.
          &quot;nanos&quot;: 42, # Non-negative fractions of a second at nanosecond resolution. Negative
              # second values with fractions must still have non-negative nanos values
              # that count forward in time. Must be from 0 to 999,999,999
              # inclusive.
          &quot;seconds&quot;: &quot;A String&quot;, # Represents seconds of UTC time since Unix epoch
              # 1970-01-01T00:00:00Z. Must be from 0001-01-01T00:00:00Z to
              # 9999-12-31T23:59:59Z inclusive.
        },
        &quot;shardSummaries&quot;: [ # Output only. Summaries of shards.
            #
            # Only one shard will present unless sharding feature is enabled in
            # TestExecutionService.
          { # Result summary for a shard in an environment.
            &quot;runs&quot;: [ # Summaries of the steps belonging to the shard.
                #
                # With flaky_test_attempts enabled from TestExecutionService, more than one
                # run (Step) can present. And the runs will be sorted by multistep_number.
              { # Lightweight summary of a step within this execution.
              },
            ],
            &quot;shardResult&quot;: { # Merged test result for environment. # Merged result of the shard.
                #
                # If the environment has only one step (no reruns or shards), then the merged
                # result is the same as the step result. If the environment has multiple shards
                # and/or reruns, then the results of shards and reruns that belong to the same
                # environment are merged into one environment result.
              &quot;testSuiteOverviews&quot;: [ # The combined and rolled-up result of each test suite that was run as part
                  #  of this environment.
                  #
                  #  Combining:
                  #  When the test cases from a suite are run in different steps (sharding),
                  #  the results are added back together in one overview. (e.g., if shard1 has
                  #  2 failures and shard2 has 1 failure than the overview failure_count = 3).
                  #
                  #  Rollup:
                  #  When test cases from the same suite are run multiple times (flaky), the
                  #  results are combined (e.g., if testcase1.run1 fails, testcase1.run2
                  #  passes, and both testcase2.run1 and testcase2.run2 fail then the overview
                  #  flaky_count = 1 and failure_count = 1).
                { # A summary of a test suite result either parsed from XML or uploaded
                    # directly by a user.
                    #
                    # Note: the API related comments are for StepService only. This message is
                    # also being used in ExecutionService in a read only mode for the corresponding
                    # step.
                  &quot;failureCount&quot;: 42, # Number of failed test cases, typically set by the service by parsing the
                      # xml_source. May also be set by the user.
                      #
                      # - In create/response: always set
                      # - In update request: never
                  &quot;name&quot;: &quot;A String&quot;, # The name of the test suite.
                      #
                      # - In create/response: always set
                      # - In update request: never
                  &quot;elapsedTime&quot;: { #  # Elapsed time of test suite.
                      # A Duration represents a signed, fixed-length span of time represented
                      # as a count of seconds and fractions of seconds at nanosecond
                      # resolution. It is independent of any calendar and concepts like &quot;day&quot;
                      # or &quot;month&quot;. It is related to Timestamp in that the difference between
                      # two Timestamp values is a Duration and it can be added or subtracted
                      # from a Timestamp. Range is approximately +-10,000 years.
                    &quot;seconds&quot;: &quot;A String&quot;, # Signed seconds of the span of time. Must be from -315,576,000,000
                        # to +315,576,000,000 inclusive. Note: these bounds are computed from:
                        # 60 sec/min * 60 min/hr * 24 hr/day * 365.25 days/year * 10000 years
                    &quot;nanos&quot;: 42, # Signed fractions of a second at nanosecond resolution of the span
                        # of time. Durations less than one second are represented with a 0
                        # `seconds` field and a positive or negative `nanos` field. For durations
                        # of one second or more, a non-zero value for the `nanos` field must be
                        # of the same sign as the `seconds` field. Must be from -999,999,999
                        # to +999,999,999 inclusive.
                  },
                  &quot;flakyCount&quot;: 42, # Number of flaky test cases, set by the service by rolling up flaky test
                      # attempts.
                      #
                      # Present only for rollup test suite overview at environment level. A step
                      # cannot have flaky test cases.
                  &quot;errorCount&quot;: 42, # Number of test cases in error, typically set by the service by parsing the
                      # xml_source.
                      #
                      # - In create/response: always set
                      # - In update request: never
                  &quot;totalCount&quot;: 42, # Number of test cases, typically set by the service by parsing the
                      # xml_source.
                      #
                      # - In create/response: always set
                      # - In update request: never
                  &quot;skippedCount&quot;: 42, # Number of test cases not run, typically set by the service by parsing the
                      # xml_source.
                      #
                      # - In create/response: always set
                      # - In update request: never
                  &quot;xmlSource&quot;: { # A reference to a file. # If this test suite was parsed from XML, this is the URI where the original
                      # XML file is stored.
                      #
                      # Note: Multiple test suites can share the same xml_source
                      #
                      # Returns INVALID_ARGUMENT if the uri format is not supported.
                      #
                      # - In create/response: optional
                      # - In update request: never
                    &quot;fileUri&quot;: &quot;A String&quot;, # The URI of a file stored in Google Cloud Storage.
                        #
                        # For example: http://storage.googleapis.com/mybucket/path/to/test.xml
                        # or in gsutil format: gs://mybucket/path/to/test.xml
                        # with version-specific info,
                        # gs://mybucket/path/to/test.xml#1360383693690000
                        #
                        # An INVALID_ARGUMENT error will be returned if the URI format is not
                        # supported.
                        #
                        # - In response: always set
                        # - In create/update request: always set
                  },
                },
              ],
              &quot;state&quot;: &quot;A String&quot;, # State of the resource
              &quot;outcome&quot;: { # Interprets a result so that humans and machines can act on it. # Outcome of the resource
                &quot;successDetail&quot;: { # Details for an outcome with a SUCCESS outcome summary. # More information about a SUCCESS outcome.
                    #
                    # Returns INVALID_ARGUMENT if this field is set
                    # but the summary is not SUCCESS.
                    #
                    # Optional
                    # LINT.IfChange
                  &quot;otherNativeCrash&quot;: True or False, # If a native process other than the app crashed.
                },
                &quot;skippedDetail&quot;: { # Details for an outcome with a SKIPPED outcome summary. # More information about a SKIPPED outcome.
                    #
                    # Returns INVALID_ARGUMENT if this field is set
                    # but the summary is not SKIPPED.
                    #
                    # Optional
                  &quot;incompatibleAppVersion&quot;: True or False, # If the App doesn&#x27;t support the specific API level.
                  &quot;incompatibleDevice&quot;: True or False, # If the requested OS version doesn&#x27;t run on the specific device model.
                  &quot;incompatibleArchitecture&quot;: True or False, # If the App doesn&#x27;t run on the specific architecture, for example, x86.
                },
                &quot;summary&quot;: &quot;A String&quot;, # The simplest way to interpret a result.
                    #
                    # Required
                &quot;failureDetail&quot;: { # Details for an outcome with a FAILURE outcome summary. # More information about a FAILURE outcome.
                    #
                    # Returns INVALID_ARGUMENT if this field is set
                    # but the summary is not FAILURE.
                    #
                    # Optional
                  &quot;crashed&quot;: True or False, # If the failure was severe because the system (app) under test crashed.
                  &quot;unableToCrawl&quot;: True or False, # If the robo was unable to crawl the app; perhaps because the app did not
                      # start.
                  &quot;notInstalled&quot;: True or False, # If an app is not installed and thus no test can be run with the app.
                      # This might be caused by trying to run a test on an unsupported platform.
                  &quot;timedOut&quot;: True or False, # If the test overran some time limit, and that is why it failed.
                  &quot;otherNativeCrash&quot;: True or False, # If a native process (including any other than the app) crashed.
                },
                &quot;inconclusiveDetail&quot;: { # Details for an outcome with an INCONCLUSIVE outcome summary. # More information about an INCONCLUSIVE outcome.
                    #
                    # Returns INVALID_ARGUMENT if this field is set
                    # but the summary is not INCONCLUSIVE.
                    #
                    # Optional
                  &quot;hasErrorLogs&quot;: True or False, # If results are being provided to the user in certain cases of
                      # infrastructure failures
                  &quot;infrastructureFailure&quot;: True or False, # If the test runner could not determine success or failure because the test
                      # depends on a component other than the system under test which failed.
                      #
                      # For example, a mobile test requires provisioning a device where the test
                      # executes, and that provisioning can fail.
                  &quot;abortedByUser&quot;: True or False, # If the end user aborted the test execution before a pass or fail could be
                      # determined.
                      # For example, the user pressed ctrl-c which sent a kill signal to the test
                      # runner while the test was running.
                },
              },
            },
          },
        ],
        &quot;executionId&quot;: &quot;A String&quot;, # Output only. An Execution id.
        &quot;resultsStorage&quot;: { # The storage for test results. # The location where output files are stored in the user bucket.
          &quot;resultsStoragePath&quot;: { # A reference to a file. # The root directory for test results.
            &quot;fileUri&quot;: &quot;A String&quot;, # The URI of a file stored in Google Cloud Storage.
                #
                # For example: http://storage.googleapis.com/mybucket/path/to/test.xml
                # or in gsutil format: gs://mybucket/path/to/test.xml
                # with version-specific info,
                # gs://mybucket/path/to/test.xml#1360383693690000
                #
                # An INVALID_ARGUMENT error will be returned if the URI format is not
                # supported.
                #
                # - In response: always set
                # - In create/update request: always set
          },
          &quot;xunitXmlFile&quot;: { # A reference to a file. # The path to the Xunit XML file.
            &quot;fileUri&quot;: &quot;A String&quot;, # The URI of a file stored in Google Cloud Storage.
                #
                # For example: http://storage.googleapis.com/mybucket/path/to/test.xml
                # or in gsutil format: gs://mybucket/path/to/test.xml
                # with version-specific info,
                # gs://mybucket/path/to/test.xml#1360383693690000
                #
                # An INVALID_ARGUMENT error will be returned if the URI format is not
                # supported.
                #
                # - In response: always set
                # - In create/update request: always set
          },
        },
        &quot;displayName&quot;: &quot;A String&quot;, # A short human-readable name to display in the UI.
            # Maximum of 100 characters.
            # For example: Nexus 5, API 27.
        &quot;historyId&quot;: &quot;A String&quot;, # Output only. A History id.
        &quot;environmentId&quot;: &quot;A String&quot;, # Output only. An Environment id.
        &quot;creationTime&quot;: { # A Timestamp represents a point in time independent of any time zone or local # Output only. The time when the Environment was created.
            # calendar, encoded as a count of seconds and fractions of seconds at
            # nanosecond resolution. The count is relative to an epoch at UTC midnight on
            # January 1, 1970, in the proleptic Gregorian calendar which extends the
            # Gregorian calendar backwards to year one.
            #
            # All minutes are 60 seconds long. Leap seconds are &quot;smeared&quot; so that no leap
            # second table is needed for interpretation, using a [24-hour linear
            # smear](https://developers.google.com/time/smear).
            #
            # The range is from 0001-01-01T00:00:00Z to 9999-12-31T23:59:59.999999999Z. By
            # restricting to that range, we ensure that we can convert to and from [RFC
            # 3339](https://www.ietf.org/rfc/rfc3339.txt) date strings.
          &quot;nanos&quot;: 42, # Non-negative fractions of a second at nanosecond resolution. Negative
              # second values with fractions must still have non-negative nanos values
              # that count forward in time. Must be from 0 to 999,999,999
              # inclusive.
          &quot;seconds&quot;: &quot;A String&quot;, # Represents seconds of UTC time since Unix epoch
              # 1970-01-01T00:00:00Z. Must be from 0001-01-01T00:00:00Z to
              # 9999-12-31T23:59:59Z inclusive.
        },
        &quot;environmentResult&quot;: { # Merged test result for environment. # Merged result of the environment.
            #
            # If the environment has only one step (no reruns or shards), then the merged
            # result is the same as the step result. If the environment has multiple shards
            # and/or reruns, then the results of shards and reruns that belong to the same
            # environment are merged into one environment result.
          &quot;testSuiteOverviews&quot;: [ # The combined and rolled-up result of each test suite that was run as part
              #  of this environment.
              #
              #  Combining:
              #  When the test cases from a suite are run in different steps (sharding),
              #  the results are added back together in one overview. (e.g., if shard1 has
              #  2 failures and shard2 has 1 failure than the overview failure_count = 3).
              #
              #  Rollup:
              #  When test cases from the same suite are run multiple times (flaky), the
              #  results are combined (e.g., if testcase1.run1 fails, testcase1.run2
              #  passes, and both testcase2.run1 and testcase2.run2 fail then the overview
              #  flaky_count = 1 and failure_count = 1).
            { # A summary of a test suite result either parsed from XML or uploaded
                # directly by a user.
                #
                # Note: the API related comments are for StepService only. This message is
                # also being used in ExecutionService in a read only mode for the corresponding
                # step.
              &quot;failureCount&quot;: 42, # Number of failed test cases, typically set by the service by parsing the
                  # xml_source. May also be set by the user.
                  #
                  # - In create/response: always set
                  # - In update request: never
              &quot;name&quot;: &quot;A String&quot;, # The name of the test suite.
                  #
                  # - In create/response: always set
                  # - In update request: never
              &quot;elapsedTime&quot;: { #  # Elapsed time of test suite.
                  # A Duration represents a signed, fixed-length span of time represented
                  # as a count of seconds and fractions of seconds at nanosecond
                  # resolution. It is independent of any calendar and concepts like &quot;day&quot;
                  # or &quot;month&quot;. It is related to Timestamp in that the difference between
                  # two Timestamp values is a Duration and it can be added or subtracted
                  # from a Timestamp. Range is approximately +-10,000 years.
                &quot;seconds&quot;: &quot;A String&quot;, # Signed seconds of the span of time. Must be from -315,576,000,000
                    # to +315,576,000,000 inclusive. Note: these bounds are computed from:
                    # 60 sec/min * 60 min/hr * 24 hr/day * 365.25 days/year * 10000 years
                &quot;nanos&quot;: 42, # Signed fractions of a second at nanosecond resolution of the span
                    # of time. Durations less than one second are represented with a 0
                    # `seconds` field and a positive or negative `nanos` field. For durations
                    # of one second or more, a non-zero value for the `nanos` field must be
                    # of the same sign as the `seconds` field. Must be from -999,999,999
                    # to +999,999,999 inclusive.
              },
              &quot;flakyCount&quot;: 42, # Number of flaky test cases, set by the service by rolling up flaky test
                  # attempts.
                  #
                  # Present only for rollup test suite overview at environment level. A step
                  # cannot have flaky test cases.
              &quot;errorCount&quot;: 42, # Number of test cases in error, typically set by the service by parsing the
                  # xml_source.
                  #
                  # - In create/response: always set
                  # - In update request: never
              &quot;totalCount&quot;: 42, # Number of test cases, typically set by the service by parsing the
                  # xml_source.
                  #
                  # - In create/response: always set
                  # - In update request: never
              &quot;skippedCount&quot;: 42, # Number of test cases not run, typically set by the service by parsing the
                  # xml_source.
                  #
                  # - In create/response: always set
                  # - In update request: never
              &quot;xmlSource&quot;: { # A reference to a file. # If this test suite was parsed from XML, this is the URI where the original
                  # XML file is stored.
                  #
                  # Note: Multiple test suites can share the same xml_source
                  #
                  # Returns INVALID_ARGUMENT if the uri format is not supported.
                  #
                  # - In create/response: optional
                  # - In update request: never
                &quot;fileUri&quot;: &quot;A String&quot;, # The URI of a file stored in Google Cloud Storage.
                    #
                    # For example: http://storage.googleapis.com/mybucket/path/to/test.xml
                    # or in gsutil format: gs://mybucket/path/to/test.xml
                    # with version-specific info,
                    # gs://mybucket/path/to/test.xml#1360383693690000
                    #
                    # An INVALID_ARGUMENT error will be returned if the URI format is not
                    # supported.
                    #
                    # - In response: always set
                    # - In create/update request: always set
              },
            },
          ],
          &quot;state&quot;: &quot;A String&quot;, # State of the resource
          &quot;outcome&quot;: { # Interprets a result so that humans and machines can act on it. # Outcome of the resource
            &quot;successDetail&quot;: { # Details for an outcome with a SUCCESS outcome summary. # More information about a SUCCESS outcome.
                #
                # Returns INVALID_ARGUMENT if this field is set
                # but the summary is not SUCCESS.
                #
                # Optional
                # LINT.IfChange
              &quot;otherNativeCrash&quot;: True or False, # If a native process other than the app crashed.
            },
            &quot;skippedDetail&quot;: { # Details for an outcome with a SKIPPED outcome summary. # More information about a SKIPPED outcome.
                #
                # Returns INVALID_ARGUMENT if this field is set
                # but the summary is not SKIPPED.
                #
                # Optional
              &quot;incompatibleAppVersion&quot;: True or False, # If the App doesn&#x27;t support the specific API level.
              &quot;incompatibleDevice&quot;: True or False, # If the requested OS version doesn&#x27;t run on the specific device model.
              &quot;incompatibleArchitecture&quot;: True or False, # If the App doesn&#x27;t run on the specific architecture, for example, x86.
            },
            &quot;summary&quot;: &quot;A String&quot;, # The simplest way to interpret a result.
                #
                # Required
            &quot;failureDetail&quot;: { # Details for an outcome with a FAILURE outcome summary. # More information about a FAILURE outcome.
                #
                # Returns INVALID_ARGUMENT if this field is set
                # but the summary is not FAILURE.
                #
                # Optional
              &quot;crashed&quot;: True or False, # If the failure was severe because the system (app) under test crashed.
              &quot;unableToCrawl&quot;: True or False, # If the robo was unable to crawl the app; perhaps because the app did not
                  # start.
              &quot;notInstalled&quot;: True or False, # If an app is not installed and thus no test can be run with the app.
                  # This might be caused by trying to run a test on an unsupported platform.
              &quot;timedOut&quot;: True or False, # If the test overran some time limit, and that is why it failed.
              &quot;otherNativeCrash&quot;: True or False, # If a native process (including any other than the app) crashed.
            },
            &quot;inconclusiveDetail&quot;: { # Details for an outcome with an INCONCLUSIVE outcome summary. # More information about an INCONCLUSIVE outcome.
                #
                # Returns INVALID_ARGUMENT if this field is set
                # but the summary is not INCONCLUSIVE.
                #
                # Optional
              &quot;hasErrorLogs&quot;: True or False, # If results are being provided to the user in certain cases of
                  # infrastructure failures
              &quot;infrastructureFailure&quot;: True or False, # If the test runner could not determine success or failure because the test
                  # depends on a component other than the system under test which failed.
                  #
                  # For example, a mobile test requires provisioning a device where the test
                  # executes, and that provisioning can fail.
              &quot;abortedByUser&quot;: True or False, # If the end user aborted the test execution before a pass or fail could be
                  # determined.
                  # For example, the user pressed ctrl-c which sent a kill signal to the test
                  # runner while the test was running.
            },
          },
        },
        &quot;dimensionValue&quot;: [ # Dimension values describing the environment. Dimension values always
            # consist of &quot;Model&quot;, &quot;Version&quot;, &quot;Locale&quot;, and &quot;Orientation&quot;.
            #
            # - In response: always set
            # - In create request: always set
            # - In update request: never set
          {
            &quot;value&quot;: &quot;A String&quot;,
            &quot;key&quot;: &quot;A String&quot;,
          },
        ],
        &quot;projectId&quot;: &quot;A String&quot;, # Output only. A Project id.
      },
    ],
  }</pre>
</div>

<div class="method">
    <code class="details" id="list_next">list_next(previous_request, previous_response)</code>
  <pre>Retrieves the next page of results.

Args:
  previous_request: The request for the previous page. (required)
  previous_response: The response from the request for the previous page. (required)

Returns:
  A request object that you can call &#x27;execute()&#x27; on to request the next
  page. Returns None if there are no more items in the collection.
    </pre>
</div>

</body></html>