Cloud Tool Results API . projects . histories . executions . environments

Instance Methods

get(projectId=*, historyId=*, executionId=*, environmentId=*)

Gets an Environment.

list(projectId=*, historyId=*, executionId=*, pageToken=None, pageSize=None)

Lists Environments for a given Execution.

list_next(previous_request=*, previous_response=*)

Retrieves the next page of results.

Method Details

get(projectId=*, historyId=*, executionId=*, environmentId=*)
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)

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).
    "environmentId": "A String", # Output only. An Environment id.
    "displayName": "A String", # A short human-readable name to display in the UI. Maximum of 100 characters. For example: Nexus 5, API 27.
    "projectId": "A String", # Output only. A Project id.
    "creationTime": { # A Timestamp represents a point in time independent of any time zone or local 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. # Output only. The time when the Environment was created.
        #
        # All minutes are 60 seconds long. Leap seconds are "smeared" 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.
        #
        # # Examples
        #
        # Example 1: Compute Timestamp from POSIX `time()`.
        #
        # Timestamp timestamp; timestamp.set_seconds(time(NULL)); timestamp.set_nanos(0);
        #
        # Example 2: Compute Timestamp from POSIX `gettimeofday()`.
        #
        # struct timeval tv; gettimeofday(&tv, NULL);
        #
        # Timestamp timestamp; timestamp.set_seconds(tv.tv_sec); timestamp.set_nanos(tv.tv_usec * 1000);
        #
        # Example 3: Compute Timestamp from Win32 `GetSystemTimeAsFileTime()`.
        #
        # FILETIME ft; GetSystemTimeAsFileTime(&ft); UINT64 ticks = (((UINT64)ft.dwHighDateTime) << 32) | ft.dwLowDateTime;
        #
        # // A Windows tick is 100 nanoseconds. Windows epoch 1601-01-01T00:00:00Z // is 11644473600 seconds before Unix epoch 1970-01-01T00:00:00Z. Timestamp timestamp; timestamp.set_seconds((INT64) ((ticks / 10000000) - 11644473600LL)); timestamp.set_nanos((INT32) ((ticks % 10000000) * 100));
        #
        # Example 4: Compute Timestamp from Java `System.currentTimeMillis()`.
        #
        # long millis = System.currentTimeMillis();
        #
        # Timestamp timestamp = Timestamp.newBuilder().setSeconds(millis / 1000) .setNanos((int) ((millis % 1000) * 1000000)).build();
        #
        #
        #
        # Example 5: Compute Timestamp from current time in Python.
        #
        # timestamp = Timestamp() timestamp.GetCurrentTime()
        #
        # # JSON Mapping
        #
        # In JSON format, the Timestamp type is encoded as a string in the [RFC 3339](https://www.ietf.org/rfc/rfc3339.txt) format. That is, the format is "{year}-{month}-{day}T{hour}:{min}:{sec}[.{frac_sec}]Z" where {year} is always expressed using four digits while {month}, {day}, {hour}, {min}, and {sec} are zero-padded to two digits each. The fractional seconds, which can go up to 9 digits (i.e. up to 1 nanosecond resolution), are optional. The "Z" suffix indicates the timezone ("UTC"); the timezone is required. A proto3 JSON serializer should always use UTC (as indicated by "Z") when printing the Timestamp type and a proto3 JSON parser should be able to accept both UTC and other timezones (as indicated by an offset).
        #
        # For example, "2017-01-15T01:30:15.01Z" encodes 15.01 seconds past 01:30 UTC on January 15, 2017.
        #
        # In JavaScript, one can convert a Date object to this format using the standard [toISOString()](https://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Global_Objects/Date/toISOString) method. In Python, a standard `datetime.datetime` object can be converted to this format using [`strftime`](https://docs.python.org/2/library/time.html#time.strftime) with the time format spec '%Y-%m-%dT%H:%M:%S.%fZ'. Likewise, in Java, one can use the Joda Time's [`ISODateTimeFormat.dateTime()`]( http://www.joda.org/joda-time/apidocs/org/joda/time/format/ISODateTimeFormat.html#dateTime%2D%2D ) to obtain a formatter capable of generating timestamps in this format.
      "nanos": 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.
      "seconds": "A String", # 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.
    },
    "shardSummaries": [ # 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.
        "shardResult": { # 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.
          "state": "A String", # State of the resource
          "outcome": { # Interprets a result so that humans and machines can act on it. # Outcome of the resource
            "inconclusiveDetail": { # 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
              "infrastructureFailure": 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.
              "hasErrorLogs": True or False, # If results are being provided to the user in certain cases of infrastructure failures
              "abortedByUser": 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.
            },
            "skippedDetail": { # 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
              "incompatibleAppVersion": True or False, # If the App doesn't support the specific API level.
              "incompatibleArchitecture": True or False, # If the App doesn't run on the specific architecture, for example, x86.
              "incompatibleDevice": True or False, # If the requested OS version doesn't run on the specific device model.
            },
            "successDetail": { # Details for an outcome with a SUCCESS outcome summary. LINT.IfChange # More information about a SUCCESS outcome.
                #
                # Returns INVALID_ARGUMENT if this field is set but the summary is not SUCCESS.
                #
                # Optional
              "otherNativeCrash": True or False, # If a native process other than the app crashed.
            },
            "failureDetail": { # 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
              "otherNativeCrash": True or False, # If a native process (including any other than the app) crashed.
              "crashed": True or False, # If the failure was severe because the system (app) under test crashed.
              "unableToCrawl": True or False, # If the robo was unable to crawl the app; perhaps because the app did not start.
              "notInstalled": 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.
              "timedOut": True or False, # If the test overran some time limit, and that is why it failed.
            },
            "summary": "A String", # The simplest way to interpret a result.
                #
                # Required
          },
          "testSuiteOverviews": [ # 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.
              "name": "A String", # The name of the test suite.
                  #
                  # - In create/response: always set - In update request: never
              "flakyCount": 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.
              "errorCount": 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
              "elapsedTime": { # 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 "day" or "month". 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. # Elapsed time of test suite.
                  #
                  # # Examples
                  #
                  # Example 1: Compute Duration from two Timestamps in pseudo code.
                  #
                  # Timestamp start = ...; Timestamp end = ...; Duration duration = ...;
                  #
                  # duration.seconds = end.seconds - start.seconds; duration.nanos = end.nanos - start.nanos;
                  #
                  # if (duration.seconds  0) { duration.seconds += 1; duration.nanos -= 1000000000; } else if (duration.seconds > 0 && duration.nanos < 0) { duration.seconds -= 1; duration.nanos += 1000000000; }
                  #
                  # Example 2: Compute Timestamp from Timestamp + Duration in pseudo code.
                  #
                  # Timestamp start = ...; Duration duration = ...; Timestamp end = ...;
                  #
                  # end.seconds = start.seconds + duration.seconds; end.nanos = start.nanos + duration.nanos;
                  #
                  # if (end.nanos = 1000000000) { end.seconds += 1; end.nanos -= 1000000000; }
                  #
                  # Example 3: Compute Duration from datetime.timedelta in Python.
                  #
                  # td = datetime.timedelta(days=3, minutes=10) duration = Duration() duration.FromTimedelta(td)
                  #
                  # # JSON Mapping
                  #
                  # In JSON format, the Duration type is encoded as a string rather than an object, where the string ends in the suffix "s" (indicating seconds) and is preceded by the number of seconds, with nanoseconds expressed as fractional seconds. For example, 3 seconds with 0 nanoseconds should be encoded in JSON format as "3s", while 3 seconds and 1 nanosecond should be expressed in JSON format as "3.000000001s", and 3 seconds and 1 microsecond should be expressed in JSON format as "3.000001s".
                "nanos": 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.
                "seconds": "A String", # 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
              },
              "totalCount": 42, # Number of test cases, typically set by the service by parsing the xml_source.
                  #
                  # - In create/response: always set - In update request: never
              "xmlSource": { # 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
                "fileUri": "A String", # 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
              },
              "failureCount": 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
              "skippedCount": 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
            },
          ],
        },
      },
    ],
    "historyId": "A String", # Output only. A History id.
    "environmentResult": { # 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.
      "state": "A String", # State of the resource
      "outcome": { # Interprets a result so that humans and machines can act on it. # Outcome of the resource
        "inconclusiveDetail": { # 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
          "infrastructureFailure": 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.
          "hasErrorLogs": True or False, # If results are being provided to the user in certain cases of infrastructure failures
          "abortedByUser": 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.
        },
        "skippedDetail": { # 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
          "incompatibleAppVersion": True or False, # If the App doesn't support the specific API level.
          "incompatibleArchitecture": True or False, # If the App doesn't run on the specific architecture, for example, x86.
          "incompatibleDevice": True or False, # If the requested OS version doesn't run on the specific device model.
        },
        "successDetail": { # Details for an outcome with a SUCCESS outcome summary. LINT.IfChange # More information about a SUCCESS outcome.
            #
            # Returns INVALID_ARGUMENT if this field is set but the summary is not SUCCESS.
            #
            # Optional
          "otherNativeCrash": True or False, # If a native process other than the app crashed.
        },
        "failureDetail": { # 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
          "otherNativeCrash": True or False, # If a native process (including any other than the app) crashed.
          "crashed": True or False, # If the failure was severe because the system (app) under test crashed.
          "unableToCrawl": True or False, # If the robo was unable to crawl the app; perhaps because the app did not start.
          "notInstalled": 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.
          "timedOut": True or False, # If the test overran some time limit, and that is why it failed.
        },
        "summary": "A String", # The simplest way to interpret a result.
            #
            # Required
      },
      "testSuiteOverviews": [ # 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.
          "name": "A String", # The name of the test suite.
              #
              # - In create/response: always set - In update request: never
          "flakyCount": 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.
          "errorCount": 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
          "elapsedTime": { # 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 "day" or "month". 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. # Elapsed time of test suite.
              #
              # # Examples
              #
              # Example 1: Compute Duration from two Timestamps in pseudo code.
              #
              # Timestamp start = ...; Timestamp end = ...; Duration duration = ...;
              #
              # duration.seconds = end.seconds - start.seconds; duration.nanos = end.nanos - start.nanos;
              #
              # if (duration.seconds  0) { duration.seconds += 1; duration.nanos -= 1000000000; } else if (duration.seconds > 0 && duration.nanos < 0) { duration.seconds -= 1; duration.nanos += 1000000000; }
              #
              # Example 2: Compute Timestamp from Timestamp + Duration in pseudo code.
              #
              # Timestamp start = ...; Duration duration = ...; Timestamp end = ...;
              #
              # end.seconds = start.seconds + duration.seconds; end.nanos = start.nanos + duration.nanos;
              #
              # if (end.nanos = 1000000000) { end.seconds += 1; end.nanos -= 1000000000; }
              #
              # Example 3: Compute Duration from datetime.timedelta in Python.
              #
              # td = datetime.timedelta(days=3, minutes=10) duration = Duration() duration.FromTimedelta(td)
              #
              # # JSON Mapping
              #
              # In JSON format, the Duration type is encoded as a string rather than an object, where the string ends in the suffix "s" (indicating seconds) and is preceded by the number of seconds, with nanoseconds expressed as fractional seconds. For example, 3 seconds with 0 nanoseconds should be encoded in JSON format as "3s", while 3 seconds and 1 nanosecond should be expressed in JSON format as "3.000000001s", and 3 seconds and 1 microsecond should be expressed in JSON format as "3.000001s".
            "nanos": 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.
            "seconds": "A String", # 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
          },
          "totalCount": 42, # Number of test cases, typically set by the service by parsing the xml_source.
              #
              # - In create/response: always set - In update request: never
          "xmlSource": { # 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
            "fileUri": "A String", # 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
          },
          "failureCount": 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
          "skippedCount": 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
        },
      ],
    },
    "executionId": "A String", # Output only. An Execution id.
    "completionTime": { # A Timestamp represents a point in time independent of any time zone or local 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. # Output only. The time when the Environment status was set to complete.
        #
        # This value will be set automatically when state transitions to COMPLETE.
        #
        # All minutes are 60 seconds long. Leap seconds are "smeared" 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.
        #
        # # Examples
        #
        # Example 1: Compute Timestamp from POSIX `time()`.
        #
        # Timestamp timestamp; timestamp.set_seconds(time(NULL)); timestamp.set_nanos(0);
        #
        # Example 2: Compute Timestamp from POSIX `gettimeofday()`.
        #
        # struct timeval tv; gettimeofday(&tv, NULL);
        #
        # Timestamp timestamp; timestamp.set_seconds(tv.tv_sec); timestamp.set_nanos(tv.tv_usec * 1000);
        #
        # Example 3: Compute Timestamp from Win32 `GetSystemTimeAsFileTime()`.
        #
        # FILETIME ft; GetSystemTimeAsFileTime(&ft); UINT64 ticks = (((UINT64)ft.dwHighDateTime) << 32) | ft.dwLowDateTime;
        #
        # // A Windows tick is 100 nanoseconds. Windows epoch 1601-01-01T00:00:00Z // is 11644473600 seconds before Unix epoch 1970-01-01T00:00:00Z. Timestamp timestamp; timestamp.set_seconds((INT64) ((ticks / 10000000) - 11644473600LL)); timestamp.set_nanos((INT32) ((ticks % 10000000) * 100));
        #
        # Example 4: Compute Timestamp from Java `System.currentTimeMillis()`.
        #
        # long millis = System.currentTimeMillis();
        #
        # Timestamp timestamp = Timestamp.newBuilder().setSeconds(millis / 1000) .setNanos((int) ((millis % 1000) * 1000000)).build();
        #
        #
        #
        # Example 5: Compute Timestamp from current time in Python.
        #
        # timestamp = Timestamp() timestamp.GetCurrentTime()
        #
        # # JSON Mapping
        #
        # In JSON format, the Timestamp type is encoded as a string in the [RFC 3339](https://www.ietf.org/rfc/rfc3339.txt) format. That is, the format is "{year}-{month}-{day}T{hour}:{min}:{sec}[.{frac_sec}]Z" where {year} is always expressed using four digits while {month}, {day}, {hour}, {min}, and {sec} are zero-padded to two digits each. The fractional seconds, which can go up to 9 digits (i.e. up to 1 nanosecond resolution), are optional. The "Z" suffix indicates the timezone ("UTC"); the timezone is required. A proto3 JSON serializer should always use UTC (as indicated by "Z") when printing the Timestamp type and a proto3 JSON parser should be able to accept both UTC and other timezones (as indicated by an offset).
        #
        # For example, "2017-01-15T01:30:15.01Z" encodes 15.01 seconds past 01:30 UTC on January 15, 2017.
        #
        # In JavaScript, one can convert a Date object to this format using the standard [toISOString()](https://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Global_Objects/Date/toISOString) method. In Python, a standard `datetime.datetime` object can be converted to this format using [`strftime`](https://docs.python.org/2/library/time.html#time.strftime) with the time format spec '%Y-%m-%dT%H:%M:%S.%fZ'. Likewise, in Java, one can use the Joda Time's [`ISODateTimeFormat.dateTime()`]( http://www.joda.org/joda-time/apidocs/org/joda/time/format/ISODateTimeFormat.html#dateTime%2D%2D ) to obtain a formatter capable of generating timestamps in this format.
      "nanos": 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.
      "seconds": "A String", # 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.
    },
    "resultsStorage": { # The storage for test results. # The location where output files are stored in the user bucket.
      "xunitXmlFile": { # A reference to a file. # The path to the Xunit XML file.
        "fileUri": "A String", # 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
      },
      "resultsStoragePath": { # A reference to a file. # The root directory for test results.
        "fileUri": "A String", # 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
      },
    },
    "dimensionValue": [ # Dimension values describing the environment. Dimension values always consist of "Model", "Version", "Locale", and "Orientation".
        #
        # - In response: always set - In create request: always set - In update request: never set
      {
        "value": "A String",
        "key": "A String",
      },
    ],
  }
list(projectId=*, historyId=*, executionId=*, pageToken=None, pageSize=None)
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.

Returns:
  An object of the form:

    { # Response message for EnvironmentService.ListEnvironments.
    "nextPageToken": "A String", # A continuation token to resume the query at the next item.
        #
        # Will only be set if there are more Environments to fetch.
    "projectId": "A String", # A Project id.
        #
        # Always set.
    "executionId": "A String", # A Execution id
        #
        # Always set.
    "historyId": "A String", # A History id.
        #
        # Always set.
    "environments": [ # 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).
        "environmentId": "A String", # Output only. An Environment id.
        "displayName": "A String", # A short human-readable name to display in the UI. Maximum of 100 characters. For example: Nexus 5, API 27.
        "projectId": "A String", # Output only. A Project id.
        "creationTime": { # A Timestamp represents a point in time independent of any time zone or local 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. # Output only. The time when the Environment was created.
            #
            # All minutes are 60 seconds long. Leap seconds are "smeared" 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.
            #
            # # Examples
            #
            # Example 1: Compute Timestamp from POSIX `time()`.
            #
            # Timestamp timestamp; timestamp.set_seconds(time(NULL)); timestamp.set_nanos(0);
            #
            # Example 2: Compute Timestamp from POSIX `gettimeofday()`.
            #
            # struct timeval tv; gettimeofday(&tv, NULL);
            #
            # Timestamp timestamp; timestamp.set_seconds(tv.tv_sec); timestamp.set_nanos(tv.tv_usec * 1000);
            #
            # Example 3: Compute Timestamp from Win32 `GetSystemTimeAsFileTime()`.
            #
            # FILETIME ft; GetSystemTimeAsFileTime(&ft); UINT64 ticks = (((UINT64)ft.dwHighDateTime) << 32) | ft.dwLowDateTime;
            #
            # // A Windows tick is 100 nanoseconds. Windows epoch 1601-01-01T00:00:00Z // is 11644473600 seconds before Unix epoch 1970-01-01T00:00:00Z. Timestamp timestamp; timestamp.set_seconds((INT64) ((ticks / 10000000) - 11644473600LL)); timestamp.set_nanos((INT32) ((ticks % 10000000) * 100));
            #
            # Example 4: Compute Timestamp from Java `System.currentTimeMillis()`.
            #
            # long millis = System.currentTimeMillis();
            #
            # Timestamp timestamp = Timestamp.newBuilder().setSeconds(millis / 1000) .setNanos((int) ((millis % 1000) * 1000000)).build();
            #
            #
            #
            # Example 5: Compute Timestamp from current time in Python.
            #
            # timestamp = Timestamp() timestamp.GetCurrentTime()
            #
            # # JSON Mapping
            #
            # In JSON format, the Timestamp type is encoded as a string in the [RFC 3339](https://www.ietf.org/rfc/rfc3339.txt) format. That is, the format is "{year}-{month}-{day}T{hour}:{min}:{sec}[.{frac_sec}]Z" where {year} is always expressed using four digits while {month}, {day}, {hour}, {min}, and {sec} are zero-padded to two digits each. The fractional seconds, which can go up to 9 digits (i.e. up to 1 nanosecond resolution), are optional. The "Z" suffix indicates the timezone ("UTC"); the timezone is required. A proto3 JSON serializer should always use UTC (as indicated by "Z") when printing the Timestamp type and a proto3 JSON parser should be able to accept both UTC and other timezones (as indicated by an offset).
            #
            # For example, "2017-01-15T01:30:15.01Z" encodes 15.01 seconds past 01:30 UTC on January 15, 2017.
            #
            # In JavaScript, one can convert a Date object to this format using the standard [toISOString()](https://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Global_Objects/Date/toISOString) method. In Python, a standard `datetime.datetime` object can be converted to this format using [`strftime`](https://docs.python.org/2/library/time.html#time.strftime) with the time format spec '%Y-%m-%dT%H:%M:%S.%fZ'. Likewise, in Java, one can use the Joda Time's [`ISODateTimeFormat.dateTime()`]( http://www.joda.org/joda-time/apidocs/org/joda/time/format/ISODateTimeFormat.html#dateTime%2D%2D ) to obtain a formatter capable of generating timestamps in this format.
          "nanos": 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.
          "seconds": "A String", # 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.
        },
        "shardSummaries": [ # 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.
            "shardResult": { # 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.
              "state": "A String", # State of the resource
              "outcome": { # Interprets a result so that humans and machines can act on it. # Outcome of the resource
                "inconclusiveDetail": { # 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
                  "infrastructureFailure": 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.
                  "hasErrorLogs": True or False, # If results are being provided to the user in certain cases of infrastructure failures
                  "abortedByUser": 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.
                },
                "skippedDetail": { # 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
                  "incompatibleAppVersion": True or False, # If the App doesn't support the specific API level.
                  "incompatibleArchitecture": True or False, # If the App doesn't run on the specific architecture, for example, x86.
                  "incompatibleDevice": True or False, # If the requested OS version doesn't run on the specific device model.
                },
                "successDetail": { # Details for an outcome with a SUCCESS outcome summary. LINT.IfChange # More information about a SUCCESS outcome.
                    #
                    # Returns INVALID_ARGUMENT if this field is set but the summary is not SUCCESS.
                    #
                    # Optional
                  "otherNativeCrash": True or False, # If a native process other than the app crashed.
                },
                "failureDetail": { # 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
                  "otherNativeCrash": True or False, # If a native process (including any other than the app) crashed.
                  "crashed": True or False, # If the failure was severe because the system (app) under test crashed.
                  "unableToCrawl": True or False, # If the robo was unable to crawl the app; perhaps because the app did not start.
                  "notInstalled": 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.
                  "timedOut": True or False, # If the test overran some time limit, and that is why it failed.
                },
                "summary": "A String", # The simplest way to interpret a result.
                    #
                    # Required
              },
              "testSuiteOverviews": [ # 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.
                  "name": "A String", # The name of the test suite.
                      #
                      # - In create/response: always set - In update request: never
                  "flakyCount": 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.
                  "errorCount": 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
                  "elapsedTime": { # 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 "day" or "month". 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. # Elapsed time of test suite.
                      #
                      # # Examples
                      #
                      # Example 1: Compute Duration from two Timestamps in pseudo code.
                      #
                      # Timestamp start = ...; Timestamp end = ...; Duration duration = ...;
                      #
                      # duration.seconds = end.seconds - start.seconds; duration.nanos = end.nanos - start.nanos;
                      #
                      # if (duration.seconds  0) { duration.seconds += 1; duration.nanos -= 1000000000; } else if (duration.seconds > 0 && duration.nanos < 0) { duration.seconds -= 1; duration.nanos += 1000000000; }
                      #
                      # Example 2: Compute Timestamp from Timestamp + Duration in pseudo code.
                      #
                      # Timestamp start = ...; Duration duration = ...; Timestamp end = ...;
                      #
                      # end.seconds = start.seconds + duration.seconds; end.nanos = start.nanos + duration.nanos;
                      #
                      # if (end.nanos = 1000000000) { end.seconds += 1; end.nanos -= 1000000000; }
                      #
                      # Example 3: Compute Duration from datetime.timedelta in Python.
                      #
                      # td = datetime.timedelta(days=3, minutes=10) duration = Duration() duration.FromTimedelta(td)
                      #
                      # # JSON Mapping
                      #
                      # In JSON format, the Duration type is encoded as a string rather than an object, where the string ends in the suffix "s" (indicating seconds) and is preceded by the number of seconds, with nanoseconds expressed as fractional seconds. For example, 3 seconds with 0 nanoseconds should be encoded in JSON format as "3s", while 3 seconds and 1 nanosecond should be expressed in JSON format as "3.000000001s", and 3 seconds and 1 microsecond should be expressed in JSON format as "3.000001s".
                    "nanos": 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.
                    "seconds": "A String", # 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
                  },
                  "totalCount": 42, # Number of test cases, typically set by the service by parsing the xml_source.
                      #
                      # - In create/response: always set - In update request: never
                  "xmlSource": { # 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
                    "fileUri": "A String", # 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
                  },
                  "failureCount": 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
                  "skippedCount": 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
                },
              ],
            },
          },
        ],
        "historyId": "A String", # Output only. A History id.
        "environmentResult": { # 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.
          "state": "A String", # State of the resource
          "outcome": { # Interprets a result so that humans and machines can act on it. # Outcome of the resource
            "inconclusiveDetail": { # 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
              "infrastructureFailure": 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.
              "hasErrorLogs": True or False, # If results are being provided to the user in certain cases of infrastructure failures
              "abortedByUser": 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.
            },
            "skippedDetail": { # 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
              "incompatibleAppVersion": True or False, # If the App doesn't support the specific API level.
              "incompatibleArchitecture": True or False, # If the App doesn't run on the specific architecture, for example, x86.
              "incompatibleDevice": True or False, # If the requested OS version doesn't run on the specific device model.
            },
            "successDetail": { # Details for an outcome with a SUCCESS outcome summary. LINT.IfChange # More information about a SUCCESS outcome.
                #
                # Returns INVALID_ARGUMENT if this field is set but the summary is not SUCCESS.
                #
                # Optional
              "otherNativeCrash": True or False, # If a native process other than the app crashed.
            },
            "failureDetail": { # 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
              "otherNativeCrash": True or False, # If a native process (including any other than the app) crashed.
              "crashed": True or False, # If the failure was severe because the system (app) under test crashed.
              "unableToCrawl": True or False, # If the robo was unable to crawl the app; perhaps because the app did not start.
              "notInstalled": 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.
              "timedOut": True or False, # If the test overran some time limit, and that is why it failed.
            },
            "summary": "A String", # The simplest way to interpret a result.
                #
                # Required
          },
          "testSuiteOverviews": [ # 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.
              "name": "A String", # The name of the test suite.
                  #
                  # - In create/response: always set - In update request: never
              "flakyCount": 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.
              "errorCount": 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
              "elapsedTime": { # 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 "day" or "month". 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. # Elapsed time of test suite.
                  #
                  # # Examples
                  #
                  # Example 1: Compute Duration from two Timestamps in pseudo code.
                  #
                  # Timestamp start = ...; Timestamp end = ...; Duration duration = ...;
                  #
                  # duration.seconds = end.seconds - start.seconds; duration.nanos = end.nanos - start.nanos;
                  #
                  # if (duration.seconds  0) { duration.seconds += 1; duration.nanos -= 1000000000; } else if (duration.seconds > 0 && duration.nanos < 0) { duration.seconds -= 1; duration.nanos += 1000000000; }
                  #
                  # Example 2: Compute Timestamp from Timestamp + Duration in pseudo code.
                  #
                  # Timestamp start = ...; Duration duration = ...; Timestamp end = ...;
                  #
                  # end.seconds = start.seconds + duration.seconds; end.nanos = start.nanos + duration.nanos;
                  #
                  # if (end.nanos = 1000000000) { end.seconds += 1; end.nanos -= 1000000000; }
                  #
                  # Example 3: Compute Duration from datetime.timedelta in Python.
                  #
                  # td = datetime.timedelta(days=3, minutes=10) duration = Duration() duration.FromTimedelta(td)
                  #
                  # # JSON Mapping
                  #
                  # In JSON format, the Duration type is encoded as a string rather than an object, where the string ends in the suffix "s" (indicating seconds) and is preceded by the number of seconds, with nanoseconds expressed as fractional seconds. For example, 3 seconds with 0 nanoseconds should be encoded in JSON format as "3s", while 3 seconds and 1 nanosecond should be expressed in JSON format as "3.000000001s", and 3 seconds and 1 microsecond should be expressed in JSON format as "3.000001s".
                "nanos": 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.
                "seconds": "A String", # 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
              },
              "totalCount": 42, # Number of test cases, typically set by the service by parsing the xml_source.
                  #
                  # - In create/response: always set - In update request: never
              "xmlSource": { # 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
                "fileUri": "A String", # 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
              },
              "failureCount": 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
              "skippedCount": 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
            },
          ],
        },
        "executionId": "A String", # Output only. An Execution id.
        "completionTime": { # A Timestamp represents a point in time independent of any time zone or local 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. # Output only. The time when the Environment status was set to complete.
            #
            # This value will be set automatically when state transitions to COMPLETE.
            #
            # All minutes are 60 seconds long. Leap seconds are "smeared" 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.
            #
            # # Examples
            #
            # Example 1: Compute Timestamp from POSIX `time()`.
            #
            # Timestamp timestamp; timestamp.set_seconds(time(NULL)); timestamp.set_nanos(0);
            #
            # Example 2: Compute Timestamp from POSIX `gettimeofday()`.
            #
            # struct timeval tv; gettimeofday(&tv, NULL);
            #
            # Timestamp timestamp; timestamp.set_seconds(tv.tv_sec); timestamp.set_nanos(tv.tv_usec * 1000);
            #
            # Example 3: Compute Timestamp from Win32 `GetSystemTimeAsFileTime()`.
            #
            # FILETIME ft; GetSystemTimeAsFileTime(&ft); UINT64 ticks = (((UINT64)ft.dwHighDateTime) << 32) | ft.dwLowDateTime;
            #
            # // A Windows tick is 100 nanoseconds. Windows epoch 1601-01-01T00:00:00Z // is 11644473600 seconds before Unix epoch 1970-01-01T00:00:00Z. Timestamp timestamp; timestamp.set_seconds((INT64) ((ticks / 10000000) - 11644473600LL)); timestamp.set_nanos((INT32) ((ticks % 10000000) * 100));
            #
            # Example 4: Compute Timestamp from Java `System.currentTimeMillis()`.
            #
            # long millis = System.currentTimeMillis();
            #
            # Timestamp timestamp = Timestamp.newBuilder().setSeconds(millis / 1000) .setNanos((int) ((millis % 1000) * 1000000)).build();
            #
            #
            #
            # Example 5: Compute Timestamp from current time in Python.
            #
            # timestamp = Timestamp() timestamp.GetCurrentTime()
            #
            # # JSON Mapping
            #
            # In JSON format, the Timestamp type is encoded as a string in the [RFC 3339](https://www.ietf.org/rfc/rfc3339.txt) format. That is, the format is "{year}-{month}-{day}T{hour}:{min}:{sec}[.{frac_sec}]Z" where {year} is always expressed using four digits while {month}, {day}, {hour}, {min}, and {sec} are zero-padded to two digits each. The fractional seconds, which can go up to 9 digits (i.e. up to 1 nanosecond resolution), are optional. The "Z" suffix indicates the timezone ("UTC"); the timezone is required. A proto3 JSON serializer should always use UTC (as indicated by "Z") when printing the Timestamp type and a proto3 JSON parser should be able to accept both UTC and other timezones (as indicated by an offset).
            #
            # For example, "2017-01-15T01:30:15.01Z" encodes 15.01 seconds past 01:30 UTC on January 15, 2017.
            #
            # In JavaScript, one can convert a Date object to this format using the standard [toISOString()](https://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Global_Objects/Date/toISOString) method. In Python, a standard `datetime.datetime` object can be converted to this format using [`strftime`](https://docs.python.org/2/library/time.html#time.strftime) with the time format spec '%Y-%m-%dT%H:%M:%S.%fZ'. Likewise, in Java, one can use the Joda Time's [`ISODateTimeFormat.dateTime()`]( http://www.joda.org/joda-time/apidocs/org/joda/time/format/ISODateTimeFormat.html#dateTime%2D%2D ) to obtain a formatter capable of generating timestamps in this format.
          "nanos": 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.
          "seconds": "A String", # 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.
        },
        "resultsStorage": { # The storage for test results. # The location where output files are stored in the user bucket.
          "xunitXmlFile": { # A reference to a file. # The path to the Xunit XML file.
            "fileUri": "A String", # 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
          },
          "resultsStoragePath": { # A reference to a file. # The root directory for test results.
            "fileUri": "A String", # 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
          },
        },
        "dimensionValue": [ # Dimension values describing the environment. Dimension values always consist of "Model", "Version", "Locale", and "Orientation".
            #
            # - In response: always set - In create request: always set - In update request: never set
          {
            "value": "A String",
            "key": "A String",
          },
        ],
      },
    ],
  }
list_next(previous_request=*, previous_response=*)
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 'execute()' on to request the next
  page. Returns None if there are no more items in the collection.