- 資源:Step
- TestExecutionStep
- 工具執行
- ToolExitCode (工具結束程式碼)
- 測試問題
- 不限
- 嚴重性
- 類型
- Category (類別)
- 測試時間
- ToolExecutionStep
- 多步驟
- 主要步驟
- 個人結果
- 方法
資源:Step
「步驟」代表在「執行」中執行的單一作業。步驟可用來代表工具的執行作業 ( 例如測試執行器或編譯器的執行作業)。
步驟可以重疊 (舉例來說,如果某些作業同時進行,兩個步驟的開始時間可能會相同)。
以下範例說明,我們有持續的建構作業會在每次疊代時執行測試執行器。工作流程看起來會像這樣:- 使用者建立 ID 1 的 Execution - 使用者建立 ID 為 100 的 TestExecutionStep,使用者更新 ID 為 100 的 TestExecutionStep,以便新增原始 XML 紀錄 + 服務剖析 XML 紀錄,並傳回含更新 TestResult 的 TestExecutionStep。- 使用者將 TestExecutionStep (ID 100) 的狀態更新為 COMPLETE (完成)
步驟可以更新,直到狀態設為 COMPLETE 且不可變動時。
JSON 表示法 |
---|
{ "stepId": string, "creationTime": { object ( |
欄位 | |
---|---|
stepId |
此步驟執行作業執行中的唯一 ID。 如果呼叫端設定或覆寫這個欄位,則傳回 INVALID_src。
|
creationTime |
步驟的建立時間。
|
completionTime |
步驟狀態設為完成的時間。 當狀態轉換為 COMPLETE 時,系統會自動設定這個值。
|
name |
使用者可理解的簡短名稱,會顯示在 UI 中。最多 100 個字元。例如:清理 如果新步驟與現有步驟使用相同的 nameValue 和 dimensionValue,系統將在建立新步驟時傳回 PRECONDITION_FAILED。如果兩個步驟代表相似的動作,但維度值不同,這兩個步驟應使用相同的名稱。舉例來說,如果在兩個不同的平台上執行同一組測試,這兩個步驟的名稱應相同。
|
description |
此工具的說明,例如:mvn clean package -DSkipTests=true
|
state |
初始狀態為 IN_PROGRESS。唯一法律狀態轉換的結果是 * IN_PROGRESS ->完成 如果要求無效的轉換,則會傳回 PRECONDITION_FAILED。 建立步驟時,狀態會設為 COMPLETE。狀態只能設為 COMPLETE 一次。如果狀態設為 COMPLETE 多次,系統會傳回 PRECONDITION_FAILED。
|
outcome |
結果的分類,例如「成功」或「失敗」
|
hasImages |
這個步驟的輸出內容是否為可擷取縮圖的圖片。
|
labels |
任意由使用者提供的步驟/值組合,且該鍵/值組合與步驟相關聯。 使用者必須負責管理鍵命名空間,這樣鍵就不會意外相互衝突。 如果標籤數量超過 100,或是任一鍵/值的長度超出 100 個字元,系統就會傳回 INVALID_src。
包含 |
dimensionValue |
如果包含此步驟的執行程序設有任何 dimension_definition 值,則這個欄位可讓子項指定維度值。 這些鍵必須與執行作業的 dimension_definition 完全相符。 舉例來說,如果執行作業包含 如果某個步驟未參與矩陣的某個維度,該維度的值必須為空字串。舉例來說,如果其中一項測試是由不支援重試的執行器執行,則該步驟可能會有 如果步驟沒有參與矩陣的任何維度,可能會使 sizeValue 保持未設定狀態。 如果執行作業的 Dimensions_definition 中沒有任何鍵,就會傳回 PRECONDITION_FAILED。 如果此執行作業中的另一個步驟的名稱和 dimensionValue 相同,但其他資料欄位不同 (例如步驟欄位不同),系統會傳回 PRECONDITION_FAILED。 如果設定 dimensionValue 且在執行時有 dimension_definition 未指定為其中一個鍵,則會傳回 PRECONDITION_FAILED。
包含 |
runDuration |
執行這個步驟花費的時間。 如未設定,這會在步驟設為 COMPLETE 狀態時,將 createTime 和 completeTime 時間差。在某些情況下,您可以個別設定這個值。舉例來說,如果步驟已經建立,但代表作業會在執行前幾分鐘排入佇列,就不合適的做法在其 runDuration 中納入佇列所花費的時間。 如果嘗試在已設定這個欄位的步數上設定 runDuration,則會傳回 PRECONDITION_FAILED。
|
deviceUsageDuration |
使用多少裝置資源執行測試。 這是用於計費的裝置使用情況,與 runDuration 不同。舉例來說,基礎架構錯誤不會產生裝置使用費。 如果嘗試在已經設定這個欄位的步數上設定 device_usage,則會傳回 PRECONDITION_FAILED。
|
multiStep |
以群組相同的設定執行多個步驟時的詳細資料。你可以使用這些詳細資料,找出這個步驟所屬的群組。它也會指出群組的「主要步驟」這個索引會為所有群組成員建立索引
|
聯集欄位
|
|
testExecutionStep |
執行測試執行器。 |
toolExecutionStep |
執行工具 (用於我們未明確支援的步驟)。 |
TestExecutionStep
代表執行測試的步驟。
它可接受 ant-junit xml 檔案,服務將剖析為結構化測試結果。XML 檔案路徑會更新,以便附加更多檔案,但無法刪除。
使用者也可以使用 test_result 欄位手動新增測試結果。
JSON 表示法 |
---|
{ "testSuiteOverviews": [ { object ( |
欄位 | |
---|---|
testSuiteOverviews[] |
測試套件總覽內容清單。原因可能是伺服器在 xUnit XML 記錄檔中剖析,或是由使用者直接上傳。只有在測試套件已完整剖析或上傳完畢時,您才能呼叫這項參照。 每個步驟的測試套件總覽數量上限為 1,000 個。
|
toolExecution |
代表測試執行器的執行作業。 系統會使用這項工具的結束程式碼來判斷測試是否通過。
|
testIssues[] |
在測試執行期間發現的問題。 舉例來說,如果受測試的行動應用程式在測試期間異常終止,系統可能會在此記錄錯誤訊息和堆疊追蹤內容,以協助偵錯。
|
testTiming |
測試執行的時間細目。
|
工具執行
執行任意工具。可能是測試執行器,或是複製構件或部署程式碼的工具。
JSON 表示法 |
---|
{ "commandLineArguments": [ string ], "toolLogs": [ { object ( |
欄位 | |
---|---|
commandLineArguments[] |
完整的權杖化指令列,包括程式名稱 (相當於 C 程式中的 argv )。
|
toolLogs[] |
參照任何純文字記錄而輸出的工具執行記錄。 這個欄位可在工具結束之前設定,這樣才能在工具執行期間即時查看記錄。 每個步驟允許的工具記錄檔數量上限為 1,000 筆。
|
exitCode |
工具執行結束程式碼。這個欄位會在工具退出後設定。
|
toolOutputs[] |
參照工具執行時任何格式的不透明檔案。 每個步驟允許的工具輸出數量上限為 1,000 個。
|
工具結束程式碼
結束工具執行作業的程式碼。
JSON 表示法 |
---|
{ "number": integer } |
欄位 | |
---|---|
number |
工具執行結束程式碼。如果值為 0,表示執行成功。
|
測試問題
在測試執行期間偵測到問題。
JSON 表示法 |
---|
{ "errorMessage": string, "stackTrace": { object ( |
欄位 | |
---|---|
errorMessage |
簡短易懂的訊息說明問題。必填。 |
stackTrace |
已淘汰,改用特定警告中的堆疊追蹤欄位。 |
warning |
警告訊息,提供問題的其他詳細資料。應一律為來自 com.google.devtools.toolresults.v1.warnings 的訊息 |
severity |
問題的嚴重性。必填。 |
type |
問題類型。必填。 |
category |
問題類別。必填。 |
不限
Any
包含任意序列化通訊協定緩衝區訊息,以及描述序列化訊息類型的網址。
Protobuf 程式庫支援將任何值以公用程式函式的形式,或任意型別的其他產生方法封裝/解除封裝。
範例 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 程式庫提供的 pack 方法預設會使用「type.googleapis.com/full.type.name」做為類型網址,而解壓縮方法只會使用最後一個「/」之後的完整類型名稱類型網址,例如「foo.bar.com/x/y.z」產生的類型名稱為「y.z」
JSON
Any
值的 JSON 表示法使用已反序列化的內嵌訊息的一般表示法,且另有包含類型網址的額外欄位 @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 |
可明確識別序列化通訊協定緩衝區訊息類型的網址/資源名稱。此字串必須包含至少一個「/」字元。網址路徑的最後一個部分必須代表該類型的完整名稱 (例如 實務上,團隊通常會在「任何」情境中,將預期使用的所有型別預先編譯為二進位檔。不過,如果網址使用
注意:這項功能目前無法在官方 protobuf 版本中提供,並且不適用於開頭為 type.googleapis.com 的類型網址。
|
value |
必須是上述指定類型的有效序列化通訊協定緩衝區。 Base64 編碼字串。 |
嚴重性
問題嚴重性。
列舉 | |
---|---|
unspecifiedSeverity |
未指定的預設嚴重性。請勿使用。僅適用於版本管理。 |
info |
非重大問題,為使用者提供測試執行的部分資訊。 |
suggestion |
非重大問題:為使用者提供一些有助於提升測試體驗的提示,例如建議使用遊戲迴圈。 |
warning |
可能是重大問題。 |
severe |
重大問題。 |
類型
問題類型。
列舉 | |
---|---|
unspecifiedType |
未指定的預設類型。請勿使用。僅適用於版本管理。 |
fatalException |
問題為嚴重例外狀況。 |
nativeCrash |
問題為原生程式碼發生錯誤。 |
anr |
問題為 ANR 當機情形。 |
unusedRoboDirective |
問題是未使用的 Robo 指令。 |
compatibleWithOrchestrator |
問題是使用 Orchestrator 的建議。 |
launcherActivityNotFound |
尋找啟動器活動時發生問題 |
startActivityNotFound |
無法解決使用者提供的意圖以啟動活動的問題 |
incompleteRoboScriptExecution |
Robo 指令碼未完整執行。 |
completeRoboScriptExecution |
Robo 指令碼已完整執行並成功執行。 |
failedToInstall |
無法安裝 APK。 |
availableDeepLinks |
應用程式背後測試含有深層連結,但您並未向 Robo 提供任何連結。 |
nonSdkApiUsageViolation |
應用程式已存取非 SDK API。 |
nonSdkApiUsageReport |
應用程式存取了非 SDK API (新版詳細報表) |
encounteredNonAndroidUiWidgetScreen |
Robo 檢索作業偵測到至少一個畫面含有非 Android UI 小工具的元素。 |
encounteredLoginScreen |
Robo 檢索至少偵測到一個疑似登入畫面。 |
performedGoogleLogin |
Robo 已登入 Google 帳戶。 |
iosException |
iOS 應用程式因例外狀況而異常終止。 |
iosCrash |
iOS 應用程式在沒有例外狀況的情況下異常終止 (例如已終止)。 |
performedMonkeyActions |
包含執行一些隨機式動作的 Robo 檢索作業。 |
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 作業系統啟動畫面)。 |
assetIssue |
這項測試中的素材資源發生問題。 |
類別
問題類別。
列舉 | |
---|---|
unspecifiedCategory |
預設未指定類別。請勿使用。僅適用於版本管理。 |
common |
問題不限於特定測試種類 (例如原生程式碼發生錯誤)。 |
robo |
問題只適用於 Robo 執行。 |
TestTiming
測試時間細項以掌握各個階段。
JSON 表示法 |
---|
{
"testProcessDuration": {
object ( |
欄位 | |
---|---|
testProcessDuration |
執行測試程序所需的時間。
|
工具執行步驟
一般工具步驟,適用於我們未明確支援的二進位檔。例如:執行 cp 將構件從某個位置複製到另一個位置。
JSON 表示法 |
---|
{
"toolExecution": {
object ( |
欄位 | |
---|---|
toolExecution |
工具執行。
|
多步驟
以群組相同的設定執行多個步驟時的詳細資料。
JSON 表示法 |
---|
{
"primaryStepId": string,
"multistepNumber": integer,
"primaryStep": {
object ( |
欄位 | |
---|---|
primaryStepId |
主要 (原始) 步驟的步驟 ID,可能是這個步驟。 |
multistepNumber |
每個步驟中的不重複整數。範圍從 0(含) 到總步數(不含)。主要步驟為 0。 |
primaryStep |
在主要 (原始) 步驟時顯示。 |
主要步驟
儲存多個步驟以群組形式執行的匯總測試狀態,以及每個步驟的結果。
JSON 表示法 |
---|
{ "rollUp": enum ( |
欄位 | |
---|---|
rollUp |
透過群組使用相同設定執行的多個步驟的綜覽測試狀態。 |
individualOutcome[] |
每個步驟的步驟 ID 和結果。 |
個人成果
以群組形式透過其他步驟 (具有相同設定) 執行的個別步驟,其步驟 ID 和結果。
JSON 表示法 |
---|
{ "stepId": string, "outcomeSummary": enum ( |
欄位 | |
---|---|
stepId |
|
outcomeSummary |
|
multistepNumber |
每個步驟中的不重複整數。範圍從 0(含) 到總步數(不含)。主要步驟為 0。 |
runDuration |
執行這個步驟花費的時間。 |
方法 |
|
---|---|
|
列出特定步驟的無障礙叢集 可能會傳回下列任一標準錯誤代碼:
|
|
可建立步驟。 |
|
取得步數。 |
|
擷取 PerfMetricsSummary。 |
|
列出特定執行作業的步驟。 |
|
使用提供的部分實體更新現有的步驟。 |
|
將 XML 檔案發布至現有步驟。 |