リソース: ステップ
ステップは、実行の一部として実行される単一の操作を表します。ステップは、ツールの実行 (テスト ランナーの実行やコンパイラの実行など) を表すために使用できます。
ステップは重複する可能性があります (たとえば、一部の操作が並行して実行される場合、2 つのステップの開始時間が同じになる可能性があります)。
以下に例を示します。反復ごとにテスト ランナーを実行する継続的なビルドがあると考えてみましょう。ワークフローは次のようになります。 - ユーザーが ID 1 の実行を作成します - ユーザーが実行 1 に対して ID 100 の TestExecutionStep を作成します - ユーザーが ID 100 の TestExecutionStep を更新して生の XML ログを追加します + サービスは XML ログを解析し、次のような TestExecutionStep を返しますTestResult を更新しました。 - ユーザーは、ID 100 の TestExecutionStep のステータスを COMPLETE に更新します。
ステップは、状態が COMPLETE に設定されるまで更新でき、その時点で不変になります。
JSON表現 |
---|
{ "stepId": string, "creationTime": { object ( |
田畑 | |
---|---|
stepId | このステップの実行内の一意の識別子。 このフィールドが呼び出し元によって設定または上書きされた場合は、INVALID_ARGUMENT を返します。
|
creationTime | ステップが作成された時刻。
|
completionTime | ステップのステータスが完了に設定された時刻。 この値は、状態が COMPLETE に移行すると自動的に設定されます。
|
name | UI に表示される人間が判読できる短い名前。最大 100 文字。例: クリーンビルド 新しいステップの名前と次元値が既存のステップと共有されている場合、新しいステップの作成時に PRECONDITION_FAILED が返されます。 2 つのステップが同様のアクションを表しているが、ディメンション値が異なる場合、それらは同じ名前を共有する必要があります。たとえば、同じテスト セットを 2 つの異なるプラットフォームで実行する場合、2 つのステップは同じ名前を持つ必要があります。
|
description | このツールの説明 例: mvn clean package -D stopTests=true
|
state | 初期状態は IN_PROGRESS です。正当な状態遷移は * IN_PROGRESS -> COMPLETE のみです。 無効な遷移が要求された場合は、PRECONDITION_FAILED が返されます。 状態を COMPLETE に設定してステップを作成することは有効です。状態を COMPLETE に設定できるのは 1 回だけです。状態が COMPLETE に複数回設定されると、PRECONDITION_FAILED が返されます。
|
outcome | 結果の分類 (成功または失敗など)
|
hasImages | このステップの出力のいずれかが、thumbnails.list でサムネイルを取得できる画像であるかどうか。
|
labels | ステップに関連付けられた任意のユーザー指定のキーと値のペア。 ユーザーは、キーが誤って衝突しないようにキーの名前空間を管理する責任があります。 ラベルの数が 100 を超える場合、またはいずれかのキーまたは値の長さが 100 文字を超える場合は、INVALID_ARGUMENT が返されます。
|
dimensionValue | このステップを含む実行に次元定義セットがある場合、このフィールドを使用して子が次元の値を指定できるようになります。 キーは実行の次元定義と正確に一致する必要があります。 たとえば、実行に ステップが行列の 1 つの次元に参加していない場合、その次元の値は空の文字列である必要があります。たとえば、テストの 1 つが再試行をサポートしていないランナーによって実行される場合、ステップ ステップが行列のどの次元にも関与していない場合は、dimensionValue を設定しないままにすることができます。 実行の次元定義にキーが存在しない場合は、PRECONDITION_FAILED が返されます。 この実行の別のステップがすでに同じ名前と次元値を持っているが、他のデータ フィールドでは異なる場合 (たとえば、ステップ フィールドが異なる場合)、PRECONDITION_FAILED が返されます。 ディメンション値が設定されており、実行中にキーの 1 つとして指定されていないディメンション定義がある場合は、PRECONDITION_FAILED が返されます。
|
runDuration | このステップの実行にかかった時間。 設定されていない場合、これは、ステップが COMPLETE 状態に設定されたときの CreationTime と completedTime の差に設定されます。場合によっては、この値を個別に設定することが適切な場合があります。たとえば、ステップが作成されたが、それが表す操作が実行前に数分間キューに入れられる場合、キューに費やされた時間をそのステップに含めないことが適切です。 runDuration。 すでにこのフィールドが設定されているステップに 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 ライブラリによって提供されるパック メソッドは、デフォルトでタイプ URL として「type.googleapis.com/full.type.name」を使用し、アンパック メソッドはタイプ 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 表現がある場合、その表現は@type
フィールドに加えてカスタム JSON を保持するフィールドvalue
を追加して埋め込まれます。例 (メッセージgoogle.protobuf.Duration
の場合):
{
"@type": "type.googleapis.com/google.protobuf.Duration",
"value": "1.212s"
}
JSON表現 |
---|
{ "typeUrl": string, "value": string } |
田畑 | |
---|---|
typeUrl | シリアル化されたプロトコル バッファ メッセージのタイプを一意に識別する URL/リソース名。この文字列には少なくとも 1 つの「/」文字が含まれている必要があります。 URL のパスの最後のセグメントは、タイプの完全修飾名を表す必要があります ( 実際には、チームは通常、Any のコンテキストで使用すると予想されるすべての型をバイナリにプリコンパイルします。ただし、スキーム
注: この機能は現在、公式の protobuf リリースでは使用できません。また、type.googleapis.com で始まるタイプの URL には使用されません。 |
value | 上記で指定されたタイプの有効なシリアル化されたプロトコル バッファーである必要があります。 Base64 でエンコードされた文字列。 |
重大度
問題の重大度。
列挙型 | |
---|---|
unspecifiedSeverity | デフォルトの未指定の重大度。使ってはいけません。バージョン管理のみ。 |
info | 重要ではない問題ですが、テスト実行に関する情報をユーザーに提供します。 |
suggestion | 重要ではない問題。テスト エクスペリエンスを向上させるためのヒントをユーザーに提供します。たとえば、ゲーム ループの使用を提案します。 |
warning | 潜在的に重大な問題。 |
severe | 重要な問題。 |
タイプ
問題の種類。
列挙型 | |
---|---|
unspecifiedType | デフォルトの未指定タイプ。使ってはいけません。バージョン管理のみ。 |
fatalException | 問題は致命的な例外です。 |
nativeCrash | 問題はネイティブクラッシュです。 |
anr | 問題は ANR クラッシュです。 |
unusedRoboDirective | 問題は未使用の robo ディレクティブです。 |
compatibleWithOrchestrator | 問題は、オーケストレーターを使用するという提案です。 |
launcherActivityNotFound | ランチャーアクティビティの検索に関する問題 |
startActivityNotFound | アクティビティを開始するためのユーザー指定のインテントの解決に関する問題 |
incompleteRoboScriptExecution | Robo スクリプトが完全には実行されませんでした。 |
completeRoboScriptExecution | Robo スクリプトが完全に正常に実行されました。 |
failedToInstall | APK のインストールに失敗しました。 |
availableDeepLinks | テスト中のアプリにはディープリンクがありますが、Robo には何も提供されていませんでした。 |
nonSdkApiUsageViolation | アプリが非 SDK API にアクセスしました。 |
nonSdkApiUsageReport | アプリが非 SDK API にアクセスしました (新しい詳細レポート) |
encounteredNonAndroidUiWidgetScreen | ロボ クロールで、Android UI ウィジェットではない要素を含む画面が少なくとも 1 つ見つかりました。 |
encounteredLoginScreen | ロボ クロールで少なくとも 1 つのログイン画面が発生した可能性があります。 |
performedGoogleLogin | ロボは Google にサインインしました。 |
iosException | iOS アプリが例外によりクラッシュしました。 |
iosCrash | iOS アプリが例外なくクラッシュしました (強制終了など)。 |
performedMonkeyActions | ロボクロールには、いくつかの猿のアクションの実行が含まれていました。 |
usedRoboDirective | ロボ クロールでは Robo ディレクティブが使用されました。 |
usedRoboIgnoreDirective | Robo クロールでは、Robo ディレクティブを使用して UI 要素を無視しました。 |
insufficientCoverage | Robo は、アプリの潜在的に重要な部分の一部をクロールしませんでした。 |
inAppPurchases | ロボ クロールにはアプリ内購入が含まれていました。 |
crashDialogError | テスト実行中にクラッシュ ダイアログが検出されました |
uiElementsTooDeep | UI 要素の深さがしきい値を超えています |
blankScreen | Robo クロールで空白の画面が見つかる |
overlappingUiElements | Robo クロールで重複する UI 要素が見つかる |
unityException | キャッチされなかった Unity 例外が検出されました (アプリはクラッシュしません)。 |
deviceOutOfMemory | メモリ不足のデバイスが検出されました |
logcatCollectionError | logcat の収集中に検出された問題 |
detectedAppSplashScreen | Robo は、アプリによって提供されるスプラッシュ スクリーンを検出しました (Android OS のスプラッシュ スクリーンと比較)。 |
カテゴリー
問題のカテゴリ。
列挙型 | |
---|---|
unspecifiedCategory | デフォルトの未指定カテゴリ。使ってはいけません。バージョン管理のみ。 |
common | 問題は特定のテストの種類に固有のものではありません (ネイティブ クラッシュなど)。 |
robo | 問題は Robo の実行に固有のものです。 |
テストタイミング
テストのタイミングをブレークダウンしてフェーズを把握します。
JSON表現 |
---|
{
"testProcessDuration": {
object ( |
田畑 | |
---|---|
testProcessDuration | テストプロセスの実行にかかった時間。
|
ツール実行ステップ
明示的にサポートしていないバイナリに使用される汎用ツール ステップ。たとえば、cp を実行してアーティファクトをある場所から別の場所にコピーします。
JSON表現 |
---|
{
"toolExecution": {
object ( |
田畑 | |
---|---|
toolExecution | ツールの実行。
|
マルチステップ
複数のステップをグループとして同じ構成で実行する場合の詳細。
JSON表現 |
---|
{
"primaryStepId": string,
"multistepNumber": integer,
"primaryStep": {
object ( |
田畑 | |
---|---|
primaryStepId | プライマリ (元の) ステップのステップ ID (このステップである可能性があります)。 |
multistepNumber | 各ステップに与えられる一意の int。範囲は 0 (両端を含む) から合計ステップ数 (両端を含まない) までです。プライマリステップは 0 です。 |
primaryStep | プライマリ (オリジナル) ステップの場合に存在します。 |
プライマリーステップ
グループとして実行された複数のステップのロールアップ テストのステータスと、個々のステップの結果を保存します。
JSON表現 |
---|
{ "rollUp": enum ( |
田畑 | |
---|---|
rollUp | グループとして同じ構成で実行された複数のステップのロールアップ テスト ステータス。 |
individualOutcome[] | ステップ ID と各ステップの結果。 |
個人の成果
同じ構成の他のステップとグループとして実行された個々のステップのステップ ID と結果。
JSON表現 |
---|
{ "stepId": string, "outcomeSummary": enum ( |
田畑 | |
---|---|
stepId | |
outcomeSummary | |
multistepNumber | 各ステップに与えられる一意の int。範囲は 0 (両端を含む) から合計ステップ数 (両端を含まない) までです。プライマリステップは 0 です。 |
runDuration | このステップの実行にかかった時間。 |
メソッド | |
---|---|
| 特定のステップのアクセシビリティ クラスタをリストします。 次の正規エラー コードのいずれかを返す場合があります。
|
| ステップを作成します。 |
| ステップを取得します。 |
| PerfMetricssummary を取得します。 |
| 特定の実行のステップをリストします。 |
| 指定された部分エンティティを使用して既存のステップを更新します。 |
| XML ファイルを既存のステップにパブリッシュします。 |