<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.testCases.html">testCases</a></h1>
<h2>Instance Methods</h2>
<p class="toc_element">
  <code><a href="#get">get(projectId, historyId, executionId, stepId, testCaseId, x__xgafv=None)</a></code></p>
<p class="firstline">Gets details of a Test Case for a Step.</p>
<p class="toc_element">
  <code><a href="#list">list(projectId, historyId, executionId, stepId, pageToken=None, pageSize=None, x__xgafv=None)</a></code></p>
<p class="firstline">Lists Test Cases attached to a Step.</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, stepId, testCaseId, x__xgafv=None)</code>
  <pre>Gets details of a Test Case for a Step.
Experimental test cases API. Still in active development.

May return any of the following canonical error codes:

- PERMISSION_DENIED - if the user is not authorized to write to project
- INVALID_ARGUMENT - if the request is malformed
- NOT_FOUND - if the containing Test Case does not exist

Args:
  projectId: string, A Project id.

Required. (required)
  historyId: string, A History id.

Required. (required)
  executionId: string, A Execution id

Required. (required)
  stepId: string, A Step id.
Note: This step must include a TestExecutionStep.

Required. (required)
  testCaseId: string, A Test Case id.

Required. (required)
  x__xgafv: string, V1 error format.
    Allowed values
      1 - v1 error format
      2 - v2 error format

Returns:
  An object of the form:

    {
    &quot;endTime&quot;: { # A Timestamp represents a point in time independent of any time zone or local # The end time of the test case.
        # 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;skippedMessage&quot;: &quot;A String&quot;, # Why the test case was skipped.
        #
        # Present only for skipped test case
    &quot;testCaseReference&quot;: { # A reference to a test case. # Test case reference, e.g. name, class name and test suite name.
        #
        # Required.
        #
        # Test case references are canonically ordered lexicographically by these three
        # factors:
        # * First, by test_suite_name.
        # * Second, by class_name.
        # * Third, by name.
      &quot;testSuiteName&quot;: &quot;A String&quot;, # The name of the test suite to which this test case belongs.
      &quot;className&quot;: &quot;A String&quot;, # The name of the class.
      &quot;name&quot;: &quot;A String&quot;, # The name of the test case.
          #
          # Required.
    },
    &quot;toolOutputs&quot;: [ # References to opaque files of any format output by the tool execution.
        #
        # @OutputOnly
      { # A reference to a ToolExecution output file.
        &quot;testCase&quot;: { # A reference to a test case. # The test case to which this output file belongs.
            #
            # - In response: present if set by create/update request
            # - In create/update request: optional
            #
            # Test case references are canonically ordered lexicographically by these three
            # factors:
            # * First, by test_suite_name.
            # * Second, by class_name.
            # * Third, by name.
          &quot;testSuiteName&quot;: &quot;A String&quot;, # The name of the test suite to which this test case belongs.
          &quot;className&quot;: &quot;A String&quot;, # The name of the class.
          &quot;name&quot;: &quot;A String&quot;, # The name of the test case.
              #
              # Required.
        },
        &quot;creationTime&quot;: { # A Timestamp represents a point in time independent of any time zone or local # The creation time of the file.
            #
            # - In response: present if set by create/update request
            # - In create/update request: optional
            # 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;output&quot;: { # A reference to a file. # A FileReference to an output file.
            #
            # - In response: always set
            # - In create/update request: always set
          &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;startTime&quot;: { # A Timestamp represents a point in time independent of any time zone or local # The start time of the test case.
        # 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;status&quot;: &quot;A String&quot;, # The status of the test case.
        #
        # Required.
    &quot;elapsedTime&quot;: { #  # The elapsed run time of the test case.
        #
        # Required.
        # 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;testCaseId&quot;: &quot;A String&quot;, # A unique identifier within a Step for this Test Case.
    &quot;stackTraces&quot;: [ # The stack trace details if the test case failed or encountered an error.
        #
        # The maximum size of the stack traces is 100KiB, beyond which the stack
        # track will be truncated.
        #
        # Zero if the test case passed.
      { # A stacktrace.
        &quot;exception&quot;: &quot;A String&quot;, # The stack trace message.
            #
            # Required
      },
    ],
  }</pre>
</div>

<div class="method">
    <code class="details" id="list">list(projectId, historyId, executionId, stepId, pageToken=None, pageSize=None, x__xgafv=None)</code>
  <pre>Lists Test Cases attached to a Step.
Experimental test cases API. Still in active development.

May return any of the following canonical error codes:

- PERMISSION_DENIED - if the user is not authorized to write to project
- INVALID_ARGUMENT - if the request is malformed
- NOT_FOUND - if the containing Step does not exist

Args:
  projectId: string, A Project id.

Required. (required)
  historyId: string, A History id.

Required. (required)
  executionId: string, A Execution id

Required. (required)
  stepId: string, A Step id.
Note: This step must include a TestExecutionStep.

Required. (required)
  pageToken: string, A continuation token to resume the query at the next item.

Optional.
  pageSize: integer, The maximum number of TestCases to fetch.

Default value: 100. The server will use this default if the field is not
set or has a value of 0.

Optional.
  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 StepService.ListTestCases.
    &quot;nextPageToken&quot;: &quot;A String&quot;,
    &quot;testCases&quot;: [ # List of test cases.
      {
        &quot;endTime&quot;: { # A Timestamp represents a point in time independent of any time zone or local # The end time of the test case.
            # 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;skippedMessage&quot;: &quot;A String&quot;, # Why the test case was skipped.
            #
            # Present only for skipped test case
        &quot;testCaseReference&quot;: { # A reference to a test case. # Test case reference, e.g. name, class name and test suite name.
            #
            # Required.
            #
            # Test case references are canonically ordered lexicographically by these three
            # factors:
            # * First, by test_suite_name.
            # * Second, by class_name.
            # * Third, by name.
          &quot;testSuiteName&quot;: &quot;A String&quot;, # The name of the test suite to which this test case belongs.
          &quot;className&quot;: &quot;A String&quot;, # The name of the class.
          &quot;name&quot;: &quot;A String&quot;, # The name of the test case.
              #
              # Required.
        },
        &quot;toolOutputs&quot;: [ # References to opaque files of any format output by the tool execution.
            #
            # @OutputOnly
          { # A reference to a ToolExecution output file.
            &quot;testCase&quot;: { # A reference to a test case. # The test case to which this output file belongs.
                #
                # - In response: present if set by create/update request
                # - In create/update request: optional
                #
                # Test case references are canonically ordered lexicographically by these three
                # factors:
                # * First, by test_suite_name.
                # * Second, by class_name.
                # * Third, by name.
              &quot;testSuiteName&quot;: &quot;A String&quot;, # The name of the test suite to which this test case belongs.
              &quot;className&quot;: &quot;A String&quot;, # The name of the class.
              &quot;name&quot;: &quot;A String&quot;, # The name of the test case.
                  #
                  # Required.
            },
            &quot;creationTime&quot;: { # A Timestamp represents a point in time independent of any time zone or local # The creation time of the file.
                #
                # - In response: present if set by create/update request
                # - In create/update request: optional
                # 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;output&quot;: { # A reference to a file. # A FileReference to an output file.
                #
                # - In response: always set
                # - In create/update request: always set
              &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;startTime&quot;: { # A Timestamp represents a point in time independent of any time zone or local # The start time of the test case.
            # 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;status&quot;: &quot;A String&quot;, # The status of the test case.
            #
            # Required.
        &quot;elapsedTime&quot;: { #  # The elapsed run time of the test case.
            #
            # Required.
            # 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;testCaseId&quot;: &quot;A String&quot;, # A unique identifier within a Step for this Test Case.
        &quot;stackTraces&quot;: [ # The stack trace details if the test case failed or encountered an error.
            #
            # The maximum size of the stack traces is 100KiB, beyond which the stack
            # track will be truncated.
            #
            # Zero if the test case passed.
          { # A stacktrace.
            &quot;exception&quot;: &quot;A String&quot;, # The stack trace message.
                #
                # Required
          },
        ],
      },
    ],
  }</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>