資源:步驟
步驟表示作為執行的一部分執行的單一操作。步驟可用於表示工具的執行(例如測試執行器執行或編譯器執行)。
步驟可以重疊(例如,如果某些操作並行完成,兩個步驟可能具有相同的開始時間)。
這是一個範例,讓我們考慮我們有一個連續構建,正在為每次迭代執行一個測試運行程式。工作流程如下所示: - 使用者建立 id 1 的 Execution - 使用者為 Execution 1 建立 id 100 的 TestExecutionStep - 使用者更新 id 100 的 TestExecutionStep 以新增原始 xml 日誌 + 服務解析 xml 日誌並傳回了測試結果。 - 使用者將 id 100 的 TestExecutionStep 的狀態更新為 COMPLETE
Step 可以更新,直到其狀態設定為 COMPLETE,此時它變得不可變。
JSON 表示 |
---|
{ "stepId": string, "creationTime": { object ( |
領域 | |
---|---|
stepId | 此步驟的執行中的唯一識別碼。 如果呼叫者設定或覆寫該字段,則傳回 INVALID_ARGUMENT。
|
creationTime | 建立步驟的時間。
|
completionTime | 步驟狀態設定為完成的時間。 當狀態轉換為 COMPLETE 時,將自動設定該值。
|
name | 顯示在 UI 中的人類可讀的簡短名稱。最多 100 個字元。例如:乾淨的構建 如果新步驟與現有步驟共用其名稱和維度值,則在建立新步驟時將傳回 PRECONDITION_FAILED。如果兩個步驟表示相似的操作,但具有不同的維度值,則它們應共用相同的名稱。例如,如果同一組測試在兩個不同的平台上運行,則這兩個步驟應具有相同的名稱。
|
description | 該工具的說明例如:mvn clean package -DskipTests=true
|
state | 初始狀態為 IN_PROGRESS。唯一合法的狀態轉換是 * IN_PROGRESS -> COMPLETE 如果請求無效轉換,將傳回 PRECONDITION_FAILED。 建立狀態設定為 COMPLETE 的步驟是有效的。此狀態只能設定為 COMPLETE 一次。如果多次將狀態設為 COMPLETE,則會傳回 PRECONDITION_FAILED。
|
outcome | 結果分類,例如成功或失敗
|
hasImages | 此步驟的任何輸出是否是可以使用thumbnails.list 來取得其縮圖的圖像。
|
labels | 使用者提供的與步驟關聯的任意鍵/值對。 使用者負責管理密鑰命名空間,以便密鑰不會意外衝突。 如果標籤數量超過 100 或任何鍵或值的長度超過 100 個字符,則會傳回 INVALID_ARGUMENT。
包含 |
dimensionValue | 如果包含此步驟的執行設定了任何dimension_definition,則此欄位允許子層級指定維度的值。 鍵必須與執行的維度定義完全匹配。 例如,如果執行具有 如果步驟不參與矩陣的某一維,則該維度的值應為空字串。例如,如果其中一項測試是由不支援重試的運行程序執行的,則該步驟可能具有 如果該步驟不參與矩陣的任何維度,則可能會保留未設定的DimensionValue。 如果執行的維度定義中不存在任何鍵,則會傳回 PRECONDITION_FAILED。 如果本次執行中的另一個步驟已經具有相同的名稱和維度值,但其他資料欄位不同,例如步驟欄位不同,則會傳回 PRECONDITION_FAILED。 如果設定了DimensionValue,且執行中存在未指定為鍵之一的dimension_definition,則會傳回PRECONDITION_FAILED。
包含 |
runDuration | 這一步驟運行需要多長時間。 如果未設定,則當步驟設定為 COMPLETE 狀態時,此值將設定為creationTime 和completionTime 之間的差值。在某些情況下,單獨設定此值是合適的:例如,如果創建了一個步驟,但它所代表的操作在執行之前排隊了幾分鐘,那麼最好不要將排隊所花費的時間包含在其步驟中。運轉持續時間。 如果嘗試在已設定此欄位的步驟上設定 runDuration,則將傳回 PRECONDITION_FAILED。
|
deviceUsageDuration | 執行測試使用了多少設備資源。 這是用於計費目的的設備使用情況,與 runDuration 不同,例如,基礎設施故障不會對設備使用情況進行計費。 如果嘗試在已設定此欄位的步驟上設定 device_usage,則將傳回 PRECONDITION_FAILED。
|
multiStep | 當多個步驟以相同的配置作為一個群組運行時的詳細資訊。這些詳細資訊可用於識別該步驟屬於哪一組。它還標識了對所有群組成員進行索引的群組“主要步驟”。
|
聯盟田 | |
testExecutionStep | 測試運行程序的執行。 |
toolExecutionStep | 工具的執行(用於我們未明確支援的步驟)。 |
測試執行步驟
代表運行測試的步驟。
它接受 ant-junit xml 文件,該文件將由服務解析為結構化測試結果。 Xml 文件路徑會更新以附加更多文件,但無法刪除它們。
使用者也可以使用 test_result 欄位手動新增測試結果。
JSON 表示 |
---|
{ "testSuiteOverviews": [ { object ( |
領域 | |
---|---|
testSuiteOverviews[] | 測試套件概述內容清單。這可以由伺服器從 xUnit XML 日誌中解析,也可以由使用者直接上傳。僅當測試套件完全解析或上傳時才應呼叫此引用。 每個步驟允許的最大測試套件概覽數量為 1000。
|
toolExecution | 代表測試運行器的執行。 該工具的退出代碼將用於確定測試是否通過。
|
testIssues[] | 測試執行期間觀察到的問題。 例如,如果被測移動應用在測試過程中崩潰了,可以在這裡記錄錯誤訊息和堆疊追蹤內容以輔助偵錯。
|
testTiming | 測試執行的時間分解。
|
工具執行
任意工具的執行。它可以是測試運行程式或複製工件或部署程式碼的工具。
JSON 表示 |
---|
{ "commandLineArguments": [ string ], "toolLogs": [ { object ( |
領域 | |
---|---|
commandLineArguments[] | 完整的標記化命令列,包括程式名稱(相當於 C 程式中的 argv)。
|
toolLogs[] | 對任何純文字日誌的引用都會輸出工具執行情況。 可以在工具退出之前設定此字段,以便能夠在工具運行時存取日誌的即時視圖。 每步驟允許的最大工具日誌數量為 1000。
|
exitCode | 工具執行退出程式碼。該工具退出後將設定該欄位。
|
toolOutputs[] | 對工具執行輸出的任何格式的不透明檔案的參考。 每步允許的最大工具輸出數量為 1000。
|
工具退出程式碼
從工具執行中退出程式碼。
JSON 表示 |
---|
{ "number": integer } |
領域 | |
---|---|
number | 工具執行退出程式碼。值為 0 表示執行成功。
|
測試問題
在測試執行期間偵測到發生的問題。
JSON 表示 |
---|
{ "errorMessage": string, "stackTrace": { object ( |
領域 | |
---|---|
errorMessage | 描述問題的簡短的人類可讀訊息。必需的。 |
stackTrace | 已棄用,取而代之的是特定警告中的堆疊追蹤欄位。 |
warning | 帶有問題其他詳細資訊的警告訊息。應始終是來自 com.google.devtools.toolresults.v1.warnings 的訊息 |
severity | 問題的嚴重性。必需的。 |
type | 問題類型。必需的。 |
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 | 唯一標識序列化協定緩衝區訊息類型的 URL/資源名稱。該字串必須至少包含一個“/”字元。 URL 路徑的最後一段必須表示類型的完全限定名稱(如 在實踐中,團隊通常會將他們期望在 Any 上下文中使用的所有類型預先編譯到二進位檔案中。但是,對於使用
注意:此功能目前在官方 protobuf 版本中不可用,並且不用於以 type.googleapis.com 開頭的類型 URL。 除了 |
value | 必須是上述指定類型的有效序列化協定緩衝區。 Base64 編碼的字串。 |
嚴重性
問題的嚴重性。
列舉 | |
---|---|
unspecifiedSeverity | 預設未指定嚴重性。不使用。僅用於版本控制。 |
info | 非關鍵問題,為使用者提供一些有關測試運行的資訊。 |
suggestion | 非關鍵問題,為使用者提供一些改善測試體驗的提示,例如建議使用遊戲循環。 |
warning | 潛在的關鍵問題。 |
severe | 關鍵問題。 |
類型
問題類型。
列舉 | |
---|---|
unspecifiedType | 預設未指定類型。不使用。僅用於版本控制。 |
fatalException | 問題是一個致命的異常。 |
nativeCrash | 問題是本機崩潰。 |
anr | 問題是 ANR 崩潰。 |
unusedRoboDirective | 問題是未使用的機器人指令。 |
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 | 機器人爬行涉及執行一些猴子動作。 |
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 ( |
領域 | |
---|---|
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 檔案發佈到現有步驟。 |