REST Resource: projects.histories.executions.steps

資源:步驟

步驟表示作為執行的一部分執行的單一操作。步驟可用於表示工具的執行(例如測試執行器執行或編譯器執行)。

步驟可以重疊(例如,如果某些操作並行完成,兩個步驟可能具有相同的開始時間)。

這是一個範例,讓我們考慮我們有一個連續構建,正在為每次迭代執行一個測試運行程式。工作流程如下所示: - 使用者建立 id 1 的 Execution - 使用者為 Execution 1 建立 id 100 的 TestExecutionStep - 使用者更新 id 100 的 TestExecutionStep 以新增原始 xml 日誌 + 服務解析 xml 日誌並傳回了測試結果。 - 使用者將 id 100 的 TestExecutionStep 的狀態更新為 COMPLETE

Step 可以更新,直到其狀態設定為 COMPLETE,此時它變得不可變。

JSON 表示
{
  "stepId": string,
  "creationTime": {
    object (Timestamp)
  },
  "completionTime": {
    object (Timestamp)
  },
  "name": string,
  "description": string,
  "state": enum (State),
  "outcome": {
    object (Outcome)
  },
  "hasImages": boolean,
  "labels": {
    string: string,
    ...
  },
  "dimensionValue": {
    string: string,
    ...
  },
  "runDuration": {
    object (Duration)
  },
  "deviceUsageDuration": {
    object (Duration)
  },
  "multiStep": {
    object (MultiStep)
  },

  // Union field step can be only one of the following:
  "testExecutionStep": {
    object (TestExecutionStep)
  },
  "toolExecutionStep": {
    object (ToolExecutionStep)
  }
  // End of list of possible types for union field step.
}
領域
stepId

string

此步驟的執行中的唯一識別碼。

如果呼叫者設定或覆寫該字段,則傳回 INVALID_ARGUMENT。

  • 響應:始終設定
  • 在建立/更新請求中:從不設定
creationTime

object ( Timestamp )

建立步驟的時間。

  • 響應:始終設定
  • 在建立/更新請求中:從不設定
completionTime

object ( Timestamp )

步驟狀態設定為完成的時間。

當狀態轉換為 COMPLETE 時,將自動設定該值。

  • 回應:如果執行狀態為 COMPLETE,則設定。
  • 在建立/更新請求中:從不設定
name

string

顯示在 UI 中的人類可讀的簡短名稱。最多 100 個字元。例如:乾淨的構建

如果新步驟與現有步驟共用其名稱和維度值,則在建立新步驟時將傳回 PRECONDITION_FAILED。如果兩個步驟表示相似的操作,但具有不同的維度值,則它們應共用相同的名稱。例如,如果同一組測試在兩個不同的平台上運行,則這兩個步驟應具有相同的名稱。

  • 響應:始終設定
  • 在建立請求中:始終設定
  • 在更新請求中:從未設定
description

string

該工具的說明例如:mvn clean package -DskipTests=true

  • 回應:如果由建立/更新請求設定則存在
  • 在建立/更新請求中:可選
state

enum ( State )

初始狀態為 IN_PROGRESS。唯一合法的狀態轉換是 * IN_PROGRESS -> COMPLETE

如果請求無效轉換,將傳回 PRECONDITION_FAILED。

建立狀態設定為 COMPLETE 的步驟是有效的。此狀態只能設定為 COMPLETE 一次。如果多次將狀態設為 COMPLETE,則會傳回 PRECONDITION_FAILED。

  • 響應:始終設定
  • 在建立/更新請求中:可選
outcome

object ( Outcome )

結果分類,例如成功或失敗

  • 回應:如果由建立/更新請求設定則存在
  • 在建立/更新請求中:可選
hasImages

boolean

此步驟的任何輸出是否是可以使用thumbnails.list 來取得其縮圖的圖像。

  • 響應:始終設定
  • 在建立/更新請求中:從不設定
labels

map (key: string, value: string)

使用者提供的與步驟關聯的任意鍵/值對。

使用者負責管理密鑰命名空間,以便密鑰不會意外衝突。

如果標籤數量超過 100 或任何鍵或值的長度超過 100 個字符,則會傳回 INVALID_ARGUMENT。

  • 響應:始終設定
  • 在建立請求中:可選
  • 更新請求中:可選;任何新的鍵/值對都會新增至映射中,並且現有鍵的任何新值都會更新該鍵的值

包含"key": value對。範例: { "name": "wrench", "mass": "1.3kg", "count": "3" }

dimensionValue

map (key: string, value: string)

如果包含此步驟的執行設定了任何dimension_definition,則此欄位允許子層級指定維度的值。

鍵必須與執行的維度定義完全匹配。

例如,如果執行具有dimension_definition = ['attempt', 'device'] ,則步驟必須定義這些維度的值,例如。 dimensionValue = ['attempt': '1', 'device': 'Nexus 6']

如果步驟不參與矩陣的某一維,則該維度的值應為空字串。例如,如果其中一項測試是由不支援重試的運行程序執行的,則該步驟可能具有dimensionValue = ['attempt': '', 'device': 'Nexus 6']

如果該步驟不參與矩陣的任何維度,則可能會保留未設定的DimensionValue。

如果執行的維度定義中不存在任何鍵,則會傳回 PRECONDITION_FAILED。

如果本次執行中的另一個步驟已經具有相同的名稱和維度值,但其他資料欄位不同,例如步驟欄位不同,則會傳回 PRECONDITION_FAILED。

如果設定了DimensionValue,且執行中存在未指定為鍵之一的dimension_definition,則會傳回PRECONDITION_FAILED。

  • 回應:如果由 create 設定則存在
  • 在建立請求中:可選
  • 在更新請求中:從未設定

包含"key": value對。範例: { "name": "wrench", "mass": "1.3kg", "count": "3" }

runDuration

object ( Duration )

這一步驟運行需要多長時間。

如果未設定,則當步驟設定為 COMPLETE 狀態時,此值將設定為creationTime 和completionTime 之間的差值。在某些情況下,單獨設定此值是合適的:例如,如果創建了一個步驟,但它所代表的操作在執行之前排隊了幾分鐘,那麼最好不要將排隊所花費的時間包含在其步驟中。運轉持續時間。

如果嘗試在已設定此欄位的步驟上設定 runDuration,則將傳回 PRECONDITION_FAILED。

  • 響應:如果之前設定則存在;始終出現在完成步驟中
  • 在建立請求中:可選
  • 更新請求中:可選
deviceUsageDuration

object ( Duration )

執行測試使用了多少設備資源。

這是用於計費目的的設備使用情況,與 runDuration 不同,例如,基礎設施故障不會對設備使用情況進行計費。

如果嘗試在已設定此欄位的步驟上設定 device_usage,則將傳回 PRECONDITION_FAILED。

  • 響應:如果之前設定則存在。
  • 在建立請求中:可選
  • 更新請求中:可選
multiStep

object ( MultiStep )

當多個步驟以相同的配置作為一個群組運行時的詳細資訊。這些詳細資訊可用於識別該步驟屬於哪一組。它還標識了對所有群組成員進行索引的群組“主要步驟”。

  • 響應:如果之前設定則存在。
  • 在建立請求中:可選,設定當且僅當此步驟執行多次。
  • 更新請求中:可選

聯盟田step

step只能是以下之一:

testExecutionStep

object ( TestExecutionStep )

測試運行程序的執行。

toolExecutionStep

object ( ToolExecutionStep )

工具的執行(用於我們未明確支援的步驟)。

測試執行步驟

代表運行測試的步驟。

它接受 ant-junit xml 文件,該文件將由服務解析為結構化測試結果。 Xml 文件路徑會更新以附加更多文件,但無法刪除它們。

使用者也可以使用 test_result 欄位手動新增測試結果。

JSON 表示
{
  "testSuiteOverviews": [
    {
      object (TestSuiteOverview)
    }
  ],
  "toolExecution": {
    object (ToolExecution)
  },
  "testIssues": [
    {
      object (TestIssue)
    }
  ],
  "testTiming": {
    object (TestTiming)
  }
}
領域
testSuiteOverviews[]

object ( TestSuiteOverview )

測試套件概述內容清單。這可以由伺服器從 xUnit XML 日誌中解析,也可以由使用者直接上傳。僅當測試套件完全解析或上傳時才應呼叫此引用。

每個步驟允許的最大測試套件概覽數量為 1000。

  • 響應:始終設定
  • 在建立請求中:可選
  • 在更新請求中:從不(使用publishXunitXmlFiles自訂方法取代)
toolExecution

object ( ToolExecution )

代表測試運行器的執行。

該工具的退出代碼將用於確定測試是否通過。

  • 響應:始終設定
  • 在建立/更新請求中:可選
testIssues[]

object ( TestIssue )

測試執行期間觀察到的問題。

例如,如果被測移動應用在測試過程中崩潰了,可以在這裡記錄錯誤訊息和堆疊追蹤內容以輔助偵錯。

  • 回應:如果透過建立或更新設定則存在
  • 在建立/更新請求中:可選
testTiming

object ( TestTiming )

測試執行的時間分解。

  • 回應:如果透過建立或更新設定則存在
  • 在建立/更新請求中:可選

工具執行

任意工具的執行。它可以是測試運行程式或複製工件或部署程式碼的工具。

JSON 表示
{
  "commandLineArguments": [
    string
  ],
  "toolLogs": [
    {
      object (FileReference)
    }
  ],
  "exitCode": {
    object (ToolExitCode)
  },
  "toolOutputs": [
    {
      object (ToolOutputReference)
    }
  ]
}
領域
commandLineArguments[]

string

完整的標記化命令列,包括程式名稱(相當於 C 程式中的 argv)。

  • 回應:如果由建立請求設定則存在
  • 在建立請求中:可選
  • 在更新請求中:從未設定
toolLogs[]

object ( FileReference )

對任何純文字日誌的引用都會輸出工具執行情況。

可以在工具退出之前設定此字段,以便能夠在工具運行時存取日誌的即時視圖。

每步驟允許的最大工具日誌數量為 1000。

  • 回應:如果由建立/更新請求設定則存在
  • 在建立請求中:可選
  • 在更新請求中:可選,提供的任何值都會附加到現有清單中
exitCode

object ( ToolExitCode )

工具執行退出程式碼。該工具退出後將設定該欄位。

  • 回應:如果由建立/更新請求設定則存在
  • 在建立請求中:可選
  • 在更新請求中:可選,如果已設定 exitCode,將傳回 FAILED_PRECONDITION 錯誤。
toolOutputs[]

object ( ToolOutputReference )

對工具執行輸出的任何格式的不透明檔案的參考。

每步允許的最大工具輸出數量為 1000。

  • 回應:如果由建立/更新請求設定則存在
  • 在建立請求中:可選
  • 在更新請求中:可選,提供的任何值都會附加到現有清單中

工具退出程式碼

從工具執行中退出程式碼。

JSON 表示
{
  "number": integer
}
領域
number

integer

工具執行退出程式碼。值為 0 表示執行成功。

  • 響應:始終設定
  • 在建立/更新請求中:始終設定

測試問題

在測試執行期間偵測到發生的問題。

JSON 表示
{
  "errorMessage": string,
  "stackTrace": {
    object (StackTrace)
  },
  "warning": {
    object (Any)
  },
  "severity": enum (Severity),
  "type": enum (Type),
  "category": enum (Category)
}
領域
errorMessage

string

描述問題的簡短的人類可讀訊息。必需的。

stackTrace
(deprecated)

object ( StackTrace )

已棄用,取而代之的是特定警告中的堆疊追蹤欄位。

warning

object ( Any )

帶有問題其他詳細資訊的警告訊息。應始終是來自 com.google.devtools.toolresults.v1.warnings 的訊息

severity

enum ( Severity )

問題的嚴重性。必需的。

type

enum ( Type )

問題類型。必需的。

category

enum ( Category )

問題類別。必需的。

任何

Any包含任意序列化協定緩衝區訊息以及描述序列化訊息類型的 URL。

Protobuf 函式庫支援以實用函數或 Any 類型的附加生成方法的形式打包/解包 Any 值。

範例 1:用 C++ 打包和解包訊息。

Foo foo = ...;
Any any;
any.PackFrom(foo);
...
if (any.UnpackTo(&foo)) {
  ...
}

範例 2:用 Java 打包和解包訊息。

Foo foo = ...;
Any any = Any.pack(foo);
...
if (any.is(Foo.class)) {
  foo = any.unpack(Foo.class);
}

範例 3:用 Python 打包和解包訊息。

foo = Foo(...)
any = Any()
any.Pack(foo)
...
if any.Is(Foo.DESCRIPTOR):
  any.Unpack(foo)
  ...

範例 4:在 Go 中打包和解包訊息

 foo := &pb.Foo{...}
 any, err := ptypes.MarshalAny(foo)
 ...
 foo := &pb.Foo{}
 if err := ptypes.UnmarshalAny(any, foo); err != nil {
   ...
 }

protobuf 庫提供的打包方法預設使用“type.googleapis.com/full.type.name”作為類型 URL,而解包方法僅使用類型 URL 中最後一個“/”之後的完全限定類型名稱,例如“foo. bar.com/x/yz”將產生類型名稱“yz”。

JSON

Any值的 JSON 表示形式使用反序列化的嵌入訊息的常規表示形式,以及包含類型 URL 的附加欄位@type 。例子:

package google.profile;
message Person {
  string first_name = 1;
  string last_name = 2;
}

{
  "@type": "type.googleapis.com/google.profile.Person",
  "firstName": <string>,
  "lastName": <string>
}

如果嵌入的訊息類型是眾所周知的並且具有自訂 JSON 表示形式,則該表示形式將​​被嵌入,並添加一個欄位value ,該欄位值除了@type欄位之外還保存自訂 JSON。範例(對於訊息google.protobuf.Duration ):

{
  "@type": "type.googleapis.com/google.protobuf.Duration",
  "value": "1.212s"
}
JSON 表示
{
  "typeUrl": string,
  "value": string
}
領域
typeUrl

string

唯一標識序列化協定緩衝區訊息類型的 URL/資源名稱。該字串必須至少包含一個“/”字元。 URL 路徑的最後一段必須表示類型的完全限定名稱(如path/google.protobuf.Duration )。此名稱應採用規範形式(例如,不接受前導“.”)。

在實踐中,團隊通常會將他們期望在 Any 上下文中使用的所有類型預先編譯到二進位檔案中。但是,對於使用httphttps或無方案的 URL,可以選擇設定一個類型伺服器,將類型 URL 對應到訊息定義,如下所示:

  • 如果未提供方案,則假定為https
  • URL 上的 HTTP GET 必須產生二進位格式的google.protobuf.Type值,否則會產生錯誤。
  • 應用程式可以根據 URL 快取查找結果,或將它們預先編譯成二進位檔案以避免任何查找。因此,在類型變更時需要保留二進位相容性。 (使用版本化類型名稱來管理重大變更。)

注意:此功能目前在官方 protobuf 版本中不可用,並且不用於以 type.googleapis.com 開頭的類型 URL。

除了httphttps (或空方案)之外的方案可以與實現特定的語意一起使用。

value

string ( bytes format)

必須是上述指定類型的有效序列化協定緩衝區。

Base64 編碼的字串。

嚴重性

問題的嚴重性。

列舉
unspecifiedSeverity預設未指定嚴重性。不使用。僅用於版本控制。
info非關鍵問題,為使用者提供一些有關測試運行的資訊。
suggestion非關鍵問題,為使用者提供一些改善測試體驗的提示,例如建議使用遊戲循環。
warning潛在的關鍵問題。
severe關鍵問題。

類型

問題類型。

列舉
unspecifiedType預設未指定類型。不使用。僅用於版本控制。
fatalException問題是一個致命的異常。
nativeCrash問題是本機崩潰。
anr問題是 ANR 崩潰。
unusedRoboDirective問題是未使用的機器人指令。
compatibleWithOrchestrator問題是使用orchestrator的建議。
launcherActivityNotFound尋找啟動器活動時出現問題
startActivityNotFound解決使用者提供的啟動活動意圖的問題
incompleteRoboScriptExecution Robo 腳本未完全執行。
completeRoboScriptExecution Robo 腳本已完全成功執行。
failedToInstall APK 安裝失敗。
nonSdkApiUsageViolation應用程式存取非 sdk Api。
nonSdkApiUsageReport應用程式存取了非sdk Api(新的詳細報告)
encounteredNonAndroidUiWidgetScreen Robo 抓取至少遇到一個螢幕,其中包含非 Android UI 小部件的元素。
encounteredLoginScreen Robo 抓取至少遇到一個可能的登入畫面。
performedGoogleLogin Robo 已登入 Google。
iosException iOS 應用程式因異常而崩潰。
iosCrash iOS 應用程式無異常崩潰(例如被殺死)。
performedMonkeyActions機器人爬行涉及執行一些猴子動作。
usedRoboDirective Robo 爬行使用 Robo 指令。
usedRoboIgnoreDirective Robo 爬行使用 Robo 指令來忽略 UI 元素。
insufficientCoverage Robo 沒有抓取應用程式的一些潛在重要部分。
inAppPurchases Robo 爬行涉及一些應用程式內購買。
crashDialogError測試執行期間偵測到崩潰對話框
uiElementsTooDeep UI元素深度大於閾值
blankScreen Robo 爬行中發現空白螢幕
overlappingUiElements Robo 爬行中發現重疊的 UI 元素
unityException偵測到未捕獲的 Unity 異常(這些異常不會導致應用程式崩潰)。
deviceOutOfMemory偵測到設備記憶體不足
logcatCollectionError收集 logcat 時偵測到的問題
detectedAppSplashScreen Robo 偵測到應用程式提供的啟動畫面(相對於 Android 作業系統啟動畫面)。

類別

問題的類別。

列舉
unspecifiedCategory預設未指定類別。不使用。僅用於版本控制。
common問題並不特定於特定的測試類型(例如,本機崩潰)。
robo問題是 Robo run 特有的。

測試計時

測試時間分解以了解階段。

JSON 表示
{
  "testProcessDuration": {
    object (Duration)
  }
}
領域
testProcessDuration

object ( Duration )

運行測試過程需要多長時間。

  • 響應:如果之前設定則存在。
  • 在建立/更新請求中:可選

工具執行步驟

用於我們未明確支援的二進位檔案的通用工具步驟。例如:執行 cp 將工件從一個位置複製到另一個位置。

JSON 表示
{
  "toolExecution": {
    object (ToolExecution)
  }
}
領域
toolExecution

object ( ToolExecution )

工具執行。

  • 回應:如果由建立/更新請求設定則存在
  • 在建立/更新請求中:可選

多重步驟

當多個步驟以相同的配置作為一個群組運行時的詳細資訊。

JSON 表示
{
  "primaryStepId": string,
  "multistepNumber": integer,
  "primaryStep": {
    object (PrimaryStep)
  }
}
領域
primaryStepId

string

主要(原始)步驟的步驟 ID,可能是此步驟。

multistepNumber

integer

賦予每個步驟的唯一整數。範圍從 0(含)到總步數(不含)。初級步長為 0。

primaryStep

object ( PrimaryStep )

如果它是主要(原始)步驟,則存在。

主要步驟

儲存作為一組運行的多個步驟的匯總測試狀態以及每個單獨步驟的結果。

JSON 表示
{
  "rollUp": enum (OutcomeSummary),
  "individualOutcome": [
    {
      object (IndividualOutcome)
    }
  ]
}
領域
rollUp

enum ( OutcomeSummary )

使用相同配置作為一個群組運行的多個步驟的匯總測試狀態。

individualOutcome[]

object ( IndividualOutcome )

步驟 ID 和每個步驟的結果。

個人成果

與具有相同配置的其他步驟作為一個群組運行的每個單獨步驟的步驟 ID 和結果。

JSON 表示
{
  "stepId": string,
  "outcomeSummary": enum (OutcomeSummary),
  "multistepNumber": integer,
  "runDuration": {
    object (Duration)
  }
}
領域
stepId

string

outcomeSummary

enum ( OutcomeSummary )

multistepNumber

integer

賦予每個步驟的唯一整數。範圍從 0(含)到總步數(不含)。初級步長為 0。

runDuration

object ( Duration )

這一步驟運行需要多長時間。

方法

accessibilityClusters

列出給定步驟的可訪問性集群

可能傳回以下任何規範錯誤代碼:

  • PERMISSION_DENIED - 如果用戶無權讀取項目
  • INVALID_ARGUMENT - 如果請求格式錯誤
  • FAILED_PRECONDITION - 如果請求中的參數碰巧無效;例如

create

建立一個步驟。

get

獲得一步。

getPerfMetricsSummary

檢索 PerfMetricsSummary。

list

列出給定執行的步驟。

patch

使用提供的部分實體更新現有步驟。

publishXunitXmlFiles

將 xml 檔案發佈到現有步驟。