- Ressource: Schritt
- Testausführungsschritt
- Werkzeugausführung
- ToolExitCode
- Testausgabe
- Beliebig
- Schwere
- Typ
- Kategorie
- TestTiming
- ToolExecutionStep
- MultiStep
- PrimaryStep
- Individuelles Ergebnis
- Methoden
Ressource: Schritt
Ein Schritt stellt einen einzelnen Vorgang dar, der im Rahmen der Ausführung ausgeführt wird. Ein Schritt kann verwendet werden, um die Ausführung eines Tools darzustellen (z. B. die Ausführung eines Testläufers oder die Ausführung eines Compilers).
Schritte können sich überschneiden (z. B. können zwei Schritte dieselbe Startzeit haben, wenn einige Vorgänge parallel ausgeführt werden).
Hier ist ein Beispiel: Nehmen wir an, wir haben einen kontinuierlichen Build, der für jede Iteration einen Testläufer ausführt. Der Workflow würde wie folgt aussehen: – Benutzer erstellt eine Ausführung mit der ID 1 – Benutzer erstellt einen TestExecutionStep mit der ID 100 für Ausführung 1 – Benutzer aktualisiert TestExecutionStep mit der ID 100, um ein rohes XML-Protokoll hinzuzufügen + der Dienst analysiert die XML-Protokolle und gibt einen TestExecutionStep mit zurück aktualisierte Testergebnisse. – Der Benutzer aktualisiert den Status von TestExecutionStep mit der ID 100 auf COMPLETE
Ein Schritt kann aktualisiert werden, bis sein Status auf ABGESCHLOSSEN gesetzt wird. Ab diesem Zeitpunkt wird er unveränderlich.
JSON-Darstellung |
---|
{ "stepId": string, "creationTime": { object ( |
Felder | |
---|---|
stepId | Eine eindeutige Kennung innerhalb einer Ausführung für diesen Schritt. Gibt INVALID_ARGUMENT zurück, wenn dieses Feld vom Aufrufer festgelegt oder überschrieben wird.
|
creationTime | Der Zeitpunkt, zu dem der Schritt erstellt wurde.
|
completionTime | Der Zeitpunkt, zu dem der Schrittstatus auf „Abgeschlossen“ gesetzt wurde. Dieser Wert wird automatisch festgelegt, wenn der Status in COMPLETE übergeht.
|
name | Ein kurzer, für Menschen lesbarer Name, der in der Benutzeroberfläche angezeigt wird. Maximal 100 Zeichen. Beispiel: Sauberer Build Beim Erstellen eines neuen Schritts wird ein PRECONDITION_FAILED zurückgegeben, wenn dieser seinen Namen und Dimensionswert mit einem vorhandenen Schritt teilt. Wenn zwei Schritte eine ähnliche Aktion darstellen, aber unterschiedliche Dimensionswerte haben, sollten sie denselben Namen haben. Wenn beispielsweise derselbe Testsatz auf zwei verschiedenen Plattformen ausgeführt wird, sollten die beiden Schritte denselben Namen haben.
|
description | Eine Beschreibung dieses Tools. Beispiel: mvn clean package -D skipTests=true
|
state | Der Ausgangszustand ist IN_PROGRESS. Die einzigen zulässigen Zustandsübergänge sind * IN_PROGRESS -> COMPLETE Wenn ein ungültiger Übergang angefordert wird, wird ein PRECONDITION_FAILED zurückgegeben. Es ist zulässig, einen Schritt mit dem Status „ABGESCHLOSSEN“ zu erstellen. Der Status kann nur einmal auf COMPLETE gesetzt werden. Eine PRECONDITION_FAILED wird zurückgegeben, wenn der Status mehrmals auf COMPLETE gesetzt wird.
|
outcome | Einstufung des Ergebnisses, beispielsweise in ERFOLGREICH oder FEHLER
|
hasImages | Ob es sich bei den Ausgaben dieses Schritts um Bilder handelt, deren Miniaturansichten mit „thumbnails.list“ abgerufen werden können.
|
labels | Beliebige, vom Benutzer bereitgestellte Schlüssel/Wert-Paare, die dem Schritt zugeordnet sind. Benutzer sind dafür verantwortlich, den Schlüssel-Namespace so zu verwalten, dass Schlüssel nicht versehentlich kollidieren. Ein INVALID_ARGUMENT wird zurückgegeben, wenn die Anzahl der Beschriftungen 100 überschreitet oder wenn die Länge eines der Schlüssel oder Werte 100 Zeichen überschreitet.
Ein Objekt, das eine Liste von |
dimensionValue | Wenn für die Ausführung, die diesen Schritt enthält, eine dimension_definition festgelegt ist, kann das Kind in diesem Feld die Werte der Dimensionen angeben. Die Schlüssel müssen genau mit der dimension_definition der Ausführung übereinstimmen. Wenn die Ausführung beispielsweise Wenn ein Schritt nicht an einer Dimension der Matrix teilnimmt, sollte der Wert für diese Dimension eine leere Zeichenfolge sein. Wenn beispielsweise einer der Tests von einem Läufer ausgeführt wird, der keine Wiederholungsversuche unterstützt, könnte der Schritt Wenn der Schritt an keiner Dimension der Matrix beteiligt ist, bleibt dimensionValue möglicherweise nicht festgelegt. Eine PRECONDITION_FAILED wird zurückgegeben, wenn einer der Schlüssel in der Dimensionsdefinition der Ausführung nicht vorhanden ist. Eine PRECONDITION_FAILED wird zurückgegeben, wenn ein anderer Schritt in dieser Ausführung bereits denselben Namen und denselben Dimensionswert hat, sich jedoch in anderen Datenfeldern unterscheidet, z. B. wenn das Schrittfeld unterschiedlich ist. Eine PRECONDITION_FAILED wird zurückgegeben, wenn dimensionValue festgelegt ist und in der Ausführung eine dimension_definition vorhanden ist, die nicht als einer der Schlüssel angegeben ist.
Ein Objekt, das eine Liste von |
runDuration | Wie lange hat es gedauert, bis dieser Schritt ausgeführt wurde? Wenn diese Option nicht festgelegt ist, wird sie auf die Differenz zwischen „creationTime“ und „CompletionTime“ festgelegt, wenn der Schritt auf den COMPLETE-Status gesetzt wird. In einigen Fällen ist es sinnvoll, diesen Wert separat festzulegen: Wenn beispielsweise ein Schritt erstellt wird, der Vorgang, den er darstellt, jedoch einige Minuten in der Warteschlange steht, bevor er ausgeführt wird, wäre es sinnvoll, die in der Warteschlange verbrachte Zeit nicht einzubeziehen Laufdauer. PRECONDITION_FAILED wird zurückgegeben, wenn versucht wird, eine runDuration für einen Schritt festzulegen, für den dieses Feld bereits festgelegt ist.
|
deviceUsageDuration | Wie viel Geräteressource zur Durchführung des Tests verwendet wird. Dabei handelt es sich um die Gerätenutzung, die zu Abrechnungszwecken verwendet wird. Sie unterscheidet sich von runDuration. Beispielsweise wird bei einem Infrastrukturausfall die Gerätenutzung nicht in Rechnung gestellt. PRECONDITION_FAILED wird zurückgegeben, wenn versucht wird, „device_usage“ für einen Schritt festzulegen, für den dieses Feld bereits festgelegt ist.
|
multiStep | Details, wenn mehrere Schritte mit derselben Konfiguration als Gruppe ausgeführt werden. Anhand dieser Details kann identifiziert werden, zu welcher Gruppe dieser Schritt gehört. Außerdem wird der „primäre Schritt“ der Gruppe identifiziert, der alle Gruppenmitglieder indiziert.
|
Union- | |
testExecutionStep | Eine Ausführung eines Testläufers. |
toolExecutionStep | Eine Ausführung eines Tools (wird für Schritte verwendet, die wir nicht explizit unterstützen). |
Testausführungsschritt
Ein Schritt, der das Ausführen von Tests darstellt.
Es akzeptiert Ant-Junit-XML-Dateien, die vom Dienst in strukturierte Testergebnisse analysiert werden. XML-Dateipfade werden aktualisiert, um weitere Dateien anzuhängen, sie können jedoch nicht gelöscht werden.
Benutzer können Testergebnisse auch manuell hinzufügen, indem sie das Feld test_result verwenden.
JSON-Darstellung |
---|
{ "testSuiteOverviews": [ { object ( |
Felder | |
---|---|
testSuiteOverviews[] | Liste der Inhalte der Testsuite-Übersicht. Dies kann vom Server aus dem xUnit-XML-Protokoll analysiert oder direkt vom Benutzer hochgeladen werden. Diese Referenzen sollten nur aufgerufen werden, wenn die Testsuiten vollständig analysiert oder hochgeladen wurden. Die maximal zulässige Anzahl von Testsuite-Übersichten pro Schritt beträgt 1000.
|
toolExecution | Stellt die Ausführung des Testläufers dar. Der Exit-Code dieses Tools wird verwendet, um festzustellen, ob der Test bestanden wurde.
|
testIssues[] | Während der Testausführung beobachtete Probleme. Wenn beispielsweise die zu testende mobile App während des Tests abstürzt, können die Fehlermeldung und der Stack-Trace-Inhalt hier aufgezeichnet werden, um das Debuggen zu unterstützen.
|
testTiming | Der zeitliche Ablauf der Testausführung.
|
Werkzeugausführung
Eine Ausführung eines beliebigen Werkzeugs. Dabei kann es sich um einen Testläufer oder ein Tool handeln, das Artefakte kopiert oder Code bereitstellt.
JSON-Darstellung |
---|
{ "commandLineArguments": [ string ], "toolLogs": [ { object ( |
Felder | |
---|---|
commandLineArguments[] | Die vollständige tokenisierte Befehlszeile einschließlich des Programmnamens (entspricht argv in einem C-Programm).
|
toolLogs[] | Verweise auf beliebige Nur-Text-Protokolle geben die Ausführung des Tools aus. Dieses Feld kann vor dem Beenden des Tools festgelegt werden, um während der Ausführung des Tools Zugriff auf eine Live-Ansicht der Protokolle zu haben. Die maximal zulässige Anzahl von Werkzeugprotokollen pro Schritt beträgt 1000.
|
exitCode | Exit-Code für die Toolausführung. Dieses Feld wird gesetzt, sobald das Tool beendet wurde.
|
toolOutputs[] | Verweise auf undurchsichtige Dateien eines beliebigen Formats, die von der Tool-Ausführung ausgegeben werden. Die maximal zulässige Anzahl von Werkzeugausgängen pro Schritt beträgt 1000.
|
ToolExitCode
Exit-Code aus einer Tool-Ausführung.
JSON-Darstellung |
---|
{ "number": integer } |
Felder | |
---|---|
number | Exit-Code für die Toolausführung. Ein Wert von 0 bedeutet, dass die Ausführung erfolgreich war.
|
Testausgabe
Während einer Testausführung wurde ein Problem festgestellt.
JSON-Darstellung |
---|
{ "errorMessage": string, "stackTrace": { object ( |
Felder | |
---|---|
errorMessage | Eine kurze, für Menschen lesbare Nachricht, die das Problem beschreibt. Erforderlich. |
stackTrace | Veraltet zugunsten von Stack-Trace-Feldern innerhalb bestimmter Warnungen. |
warning | Warnmeldung mit zusätzlichen Details zum Problem. Sollte immer eine Nachricht von com.google.devtools.toolresults.v1.warnings sein |
severity | Schwere des Problems. Erforderlich. |
type | Art der Ausgabe. Erforderlich. |
category | Problemkategorie. Erforderlich. |
Beliebig
Any
enthält eine beliebige serialisierte Protokollpuffernachricht zusammen mit einer URL, die den Typ der serialisierten Nachricht beschreibt.
Die Protobuf-Bibliothek bietet Unterstützung zum Packen/Entpacken von Any-Werten in Form von Dienstprogrammfunktionen oder zusätzlich generierten Methoden des Any-Typs.
Beispiel 1: Packen und Entpacken einer Nachricht in C++.
Foo foo = ...;
Any any;
any.PackFrom(foo);
...
if (any.UnpackTo(&foo)) {
...
}
Beispiel 2: Packen und entpacken Sie eine Nachricht in Java.
Foo foo = ...;
Any any = Any.pack(foo);
...
if (any.is(Foo.class)) {
foo = any.unpack(Foo.class);
}
Beispiel 3: Packen und entpacken Sie eine Nachricht in Python.
foo = Foo(...)
any = Any()
any.Pack(foo)
...
if any.Is(Foo.DESCRIPTOR):
any.Unpack(foo)
...
Beispiel 4: Packen und entpacken Sie eine Nachricht in Go
foo := &pb.Foo{...}
any, err := ptypes.MarshalAny(foo)
...
foo := &pb.Foo{}
if err := ptypes.UnmarshalAny(any, foo); err != nil {
...
}
Die von der Protobuf-Bibliothek bereitgestellten Packmethoden verwenden standardmäßig „type.googleapis.com/full.type.name“ als Typ-URL und die Entpackmethoden verwenden nur den vollständig qualifizierten Typnamen nach dem letzten „/“ in der Typ-URL. Beispielsweise ergibt „foo.bar.com/x/yz“ den Typnamen „yz“.
JSON
Die JSON-Darstellung eines Any
Werts verwendet die reguläre Darstellung der deserialisierten, eingebetteten Nachricht mit einem zusätzlichen Feld @type
, das die Typ-URL enthält. Beispiel:
package google.profile;
message Person {
string first_name = 1;
string last_name = 2;
}
{
"@type": "type.googleapis.com/google.profile.Person",
"firstName": <string>,
"lastName": <string>
}
Wenn der eingebettete Nachrichtentyp bekannt ist und über eine benutzerdefinierte JSON-Darstellung verfügt, wird diese Darstellung eingebettet, indem zusätzlich zum @type
Feld ein value
hinzugefügt wird, der den benutzerdefinierten JSON enthält. Beispiel (für die Nachricht google.protobuf.Duration
):
{
"@type": "type.googleapis.com/google.protobuf.Duration",
"value": "1.212s"
}
JSON-Darstellung |
---|
{ "typeUrl": string, "value": string } |
Felder | |
---|---|
typeUrl | Ein URL/Ressourcenname, der den Typ der serialisierten Protokollpuffernachricht eindeutig identifiziert. Diese Zeichenfolge muss mindestens ein „/“-Zeichen enthalten. Das letzte Segment des URL-Pfads muss den vollständig qualifizierten Namen des Typs darstellen (wie in In der Praxis kompilieren Teams in der Regel alle Typen in die Binärdatei vor, die sie voraussichtlich im Kontext von Any verwenden werden. Für URLs, die das Schema
Hinweis: Diese Funktionalität ist derzeit in der offiziellen Protobuf-Version nicht verfügbar und wird nicht für Typ-URLs verwendet, die mit type.googleapis.com beginnen. Andere Schemata als |
value | Muss ein gültiger serialisierter Protokollpuffer des oben angegebenen Typs sein. Eine Base64-codierte Zeichenfolge. |
Schwere
Schwere der Probleme.
Aufzählungen | |
---|---|
unspecifiedSeverity | Standardmäßiger, nicht angegebener Schweregrad. Verwende nicht. Nur zur Versionierung. |
info | Kein kritisches Problem, das Benutzern einige Informationen zum Testlauf bietet. |
suggestion | Nicht kritisches Problem, das den Benutzern einige Hinweise zur Verbesserung ihres Testerlebnisses gibt, z. B. die Empfehlung, Game Loops zu verwenden. |
warning | Möglicherweise kritisches Problem. |
severe | Kritisches Problem. |
Typ
Arten von Problemen.
Aufzählungen | |
---|---|
unspecifiedType | Standardmäßiger, nicht spezifizierter Typ. Verwende nicht. Nur zur Versionierung. |
fatalException | Das Problem ist eine fatale Ausnahme. |
nativeCrash | Das Problem ist ein nativer Absturz. |
anr | Das Problem ist ein ANR-Absturz. |
unusedRoboDirective | Das Problem ist eine ungenutzte Robo-Anweisung. |
compatibleWithOrchestrator | Es handelt sich um einen Vorschlag zur Verwendung des Orchestrators. |
launcherActivityNotFound | Problem beim Finden einer Launcher-Aktivität |
startActivityNotFound | Problem beim Lösen einer vom Benutzer bereitgestellten Absicht, eine Aktivität zu starten |
incompleteRoboScriptExecution | Ein Robo-Skript wurde nicht vollständig ausgeführt. |
completeRoboScriptExecution | Ein Robo-Skript wurde vollständig und erfolgreich ausgeführt. |
failedToInstall | Das APK konnte nicht installiert werden. |
availableDeepLinks | Die getestete App verfügt über Deep-Links, Robo wurden jedoch keine zur Verfügung gestellt. |
nonSdkApiUsageViolation | Die App hat auf eine Nicht-SDK-API zugegriffen. |
nonSdkApiUsageReport | App hat auf eine Nicht-SDK-API zugegriffen (neuer detaillierter Bericht) |
encounteredNonAndroidUiWidgetScreen | Der Robo-Crawl hat mindestens einen Bildschirm mit Elementen gefunden, die keine Android-UI-Widgets sind. |
encounteredLoginScreen | Beim Robo-Crawl ist mindestens ein möglicher Anmeldebildschirm aufgetreten. |
performedGoogleLogin | Robo hat sich bei Google angemeldet. |
iosException | Die iOS-App ist mit einer Ausnahme abgestürzt. |
iosCrash | Die iOS-App ist ausnahmslos abgestürzt (z. B. abgestürzt). |
performedMonkeyActions | Beim Robo-Crawl wurden einige Affenaktionen ausgeführt. |
usedRoboDirective | Beim Robo-Crawl wurde eine Robo-Anweisung verwendet. |
usedRoboIgnoreDirective | Robo-Crawl nutzte eine Robo-Anweisung, um ein UI-Element zu ignorieren. |
insufficientCoverage | Robo hat einige potenziell wichtige Teile der App nicht gecrawlt. |
inAppPurchases | Beim Robo-Crawl waren einige In-App-Käufe erforderlich. |
crashDialogError | Während der Testausführung wurde ein Absturzdialog erkannt |
uiElementsTooDeep | Die Tiefe des UI-Elements ist größer als der Schwellenwert |
blankScreen | Beim Robo-Crawl wird ein leerer Bildschirm gefunden |
overlappingUiElements | Überlappende UI-Elemente werden im Robo-Crawl gefunden |
unityException | Es wurde eine nicht abgefangene Unity-Ausnahme erkannt (diese Apps führen nicht zum Absturz). |
deviceOutOfMemory | Es wurde festgestellt, dass dem Gerät nicht mehr genügend Speicher zur Verfügung steht |
logcatCollectionError | Beim Sammeln von Logcat wurden Probleme festgestellt |
detectedAppSplashScreen | Robo hat einen von der App bereitgestellten Begrüßungsbildschirm erkannt (im Gegensatz zum Begrüßungsbildschirm des Android-Betriebssystems). |
Kategorie
Kategorien von Problemen.
Aufzählungen | |
---|---|
unspecifiedCategory | Standardmäßig nicht spezifizierte Kategorie. Verwende nicht. Nur zur Versionierung. |
common | Das Problem ist nicht spezifisch für eine bestimmte Testart (z. B. ein nativer Absturz). |
robo | Das Problem betrifft speziell Robo Run. |
TestTiming
Der Testzeitpunkt wird in verschiedene Phasen unterteilt.
JSON-Darstellung |
---|
{
"testProcessDuration": {
object ( |
Felder | |
---|---|
testProcessDuration | Wie lange es gedauert hat, den Testvorgang auszuführen.
|
ToolExecutionStep
Allgemeiner Toolschritt zur Verwendung für Binärdateien, die wir nicht explizit unterstützen. Beispiel: Führen Sie cp aus, um Artefakte von einem Ort an einen anderen zu kopieren.
JSON-Darstellung |
---|
{
"toolExecution": {
object ( |
Felder | |
---|---|
toolExecution | Eine Tool-Ausführung.
|
MultiStep
Details, wenn mehrere Schritte mit derselben Konfiguration als Gruppe ausgeführt werden.
JSON-Darstellung |
---|
{
"primaryStepId": string,
"multistepNumber": integer,
"primaryStep": {
object ( |
Felder | |
---|---|
primaryStepId | Schritt-ID des primären (ursprünglichen) Schritts, bei dem es sich möglicherweise um diesen Schritt handelt. |
multistepNumber | Eindeutiger int, der jedem Schritt zugewiesen wird. Der Bereich reicht von 0 (einschließlich) bis zur Gesamtzahl der Schritte (exklusiv). Der primäre Schritt ist 0. |
primaryStep | Vorhanden, wenn es sich um einen primären (ursprünglichen) Schritt handelt. |
PrimaryStep
Speichert den Rollup-Teststatus mehrerer Schritte, die als Gruppe ausgeführt wurden, sowie das Ergebnis jedes einzelnen Schritts.
JSON-Darstellung |
---|
{ "rollUp": enum ( |
Felder | |
---|---|
rollUp | Rollup-Teststatus mehrerer Schritte, die mit derselben Konfiguration als Gruppe ausgeführt wurden. |
individualOutcome[] | Schritt-ID und Ergebnis jedes einzelnen Schritts. |
Individuelles Ergebnis
Schritt-ID und Ergebnis jedes einzelnen Schritts, der als Gruppe mit anderen Schritten mit derselben Konfiguration ausgeführt wurde.
JSON-Darstellung |
---|
{ "stepId": string, "outcomeSummary": enum ( |
Felder | |
---|---|
stepId | |
outcomeSummary | |
multistepNumber | Eindeutiger int, der jedem Schritt zugewiesen wird. Der Bereich reicht von 0 (einschließlich) bis zur Gesamtzahl der Schritte (exklusiv). Der primäre Schritt ist 0. |
runDuration | Wie lange hat es gedauert, bis dieser Schritt ausgeführt wurde? |
Methoden | |
---|---|
| Listet Barrierefreiheitscluster für einen bestimmten Schritt auf Kann einen der folgenden kanonischen Fehlercodes zurückgeben:
|
| Erstellt einen Schritt. |
| Erhält einen Schritt. |
| Ruft eine PerfMetricsSummary ab. |
| Listet Schritte für eine bestimmte Ausführung auf. |
| Aktualisiert einen vorhandenen Schritt mit der bereitgestellten Teilentität. |
| Veröffentlichen Sie XML-Dateien in einem vorhandenen Schritt. |