- Zasób: Step
- TestExecutionStep
- ToolExecution,
- ToolExitCode
- Problem testowy
- Dowolna
- Waga
- Typ
- Kategoria
- TestTime
- ToolExecutionStep
- Tryb wieloetapowy
- PrimaryStep
- Wynik indywidualny
- Metody
Zasób: Step
Krok reprezentuje pojedynczą operację wykonywaną w ramach wykonania. Etap może odzwierciedlić wykonanie narzędzia ( np. wykonanie testu uruchamiającego testy lub kompilatora).
Kroki mogą się nakładać (na przykład 2 kroki mogą mieć ten sam czas rozpoczęcia, jeśli niektóre operacje są wykonywane równolegle).
Oto przykład. Weźmy pod uwagę, że w ramach ciągłej kompilacji wykonywany jest test uruchamiający się dla każdej iteracji. Przepływ pracy wygląda tak: – użytkownik tworzy wykonanie „Execution o identyfikatorze 1” – użytkownik tworzy element TestExecutionStep o identyfikatorze 100 na potrzeby wykonania 1 – użytkownik zaktualizuje TestExecutionStep o identyfikatorze 100, aby dodać nieprzetworzony log XML, a usługa analizuje logi XML i zwraca element TestExecutionStep ze zaktualizowanymi wynikami TestResult(s). – użytkownik zaktualizował stan TestExecutionStep o identyfikatorze 100 na COMPLETE
Krok może być aktualizowany, dopóki jego stan nie zostanie ustawiony na ZAKOŃCZONO, co spowoduje jego zmianę na stałe.
Zapis JSON |
---|
{ "stepId": string, "creationTime": { object ( |
Pola | |
---|---|
stepId |
Unikalny identyfikator w ramach wykonania tego kroku. Zwraca wartość Niepoprawny błąd – jeśli to pole zostało ustawione lub zastąpione przez element wywołujący.
|
creationTime |
Czas utworzenia kroku.
|
completionTime |
Czas, kiedy stan kroku miał być ukończony. Ta wartość zostanie ustawiona automatycznie po zmianie stanu na UKOŃCZONO.
|
name |
Krótka, zrozumiała dla człowieka nazwa wyświetlana w UI. Maksymalnie 100 znaków. Na przykład: Czysta kompilacja Gdy utworzysz nowy krok, zostanie zwrócony stan PRECondition_FAILED, jeśli nazwa i wartość parametru są takie same jak w istniejącym kroku. Jeśli 2 kroki odpowiadają podobnemu działaniu, ale mają różne wartości wymiarów, powinny mieć taką samą nazwę. Jeśli np. ten sam zestaw testów jest uruchamiany na 2 różnych platformach, oba kroki powinny mieć taką samą nazwę.
|
description |
Opis tego narzędzia Na przykład: mvn clean package -D skipTests=true
|
state |
Stan początkowy to IN_PROGRESS. Jedyne zmiany stanu prawnego to * IN_PROGRESS -> ZAKOŃCZ Jeśli zostanie wysłane nieprawidłowe przeniesienie, zostanie zwrócony stan PRECondition_FAILED. Można utworzyć krok ze stanem ustawionym na ZAKOŃCZONO. Stan można ustawić na ZAKOŃCZ tylko raz. Jeśli stan zostanie ustawiony na COMPLETE kilka razy, zostanie zwrócony warunek PRECondition_FAILED.
|
outcome |
klasyfikacja wyniku, np. SUKCES lub NIEPOWODZENIE;
|
hasImages |
Określa, czy wynik tego kroku to obrazy, których miniatury można pobrać z funkcją miniatur.list.
|
labels |
Przypadkowe pary klucz/wartość podane przez użytkownika, powiązane z danym krokiem. Użytkownicy są odpowiedzialni za zarządzanie przestrzenią nazw klucza w taki sposób, by klucze nie doszło do zderzenia przypadkowo. Jeśli liczba etykiet przekracza 100 lub dowolny z kluczy bądź wartości przekracza 100 znaków, zostanie zwrócony błąd Niepoprawny_argument.
Obiekt zawierający listę par |
dimensionValue |
Jeśli w wykonaniu zawierającym ten krok ustawiono wymiar wymiar_definition, w tym polu można określić wartości wymiarów. Klucze muszą dokładnie pasować do definicji parametrudimension_definition wykonania. Jeśli np. wykonanie obejmuje funkcję Jeśli krok nie należy do żadnego wymiaru macierzy, wartość tego wymiaru powinna być pustym ciągiem znaków. Jeśli na przykład jeden z testów zostanie wykonany przez biegacza, który nie obsługuje ponownych prób, ten krok może mieć atrybut Jeśli krok nie jest związany z żadnymi wymiarami macierzy, może pozostawać nieskonfigurowana. Jeśli któregoś z kluczy nie ma w definicji wymiaru w wykonaniu, zostanie zwrócony warunek PRECondition_FAILED. Jeśli inny krok w tym wykonaniu ma już taką samą nazwę i wartość wymiarValue, ale różni się od innych pól danych, np. gdy pole kroku jest inne, zostanie zwrócony warunek PRECondition_FAILED. Jeśli ustawiono wartość levelValue, a wykonanie zawiera definitywną definicję wymiaru, która nie jest określona jako jeden z kluczy, zostanie zwrócony warunek PRECondition_FAILED.
Obiekt zawierający listę par |
runDuration |
Czas trwania tego kroku. Jeśli zasada nie jest skonfigurowana, w przypadku wartości COMPLETETime dla kroku jest ustawiona różnica między createTime i completeTime. W niektórych przypadkach można ustawić tę wartość oddzielnie. Jeśli na przykład podczas tworzenia kroku reprezentowana przez niego operacja znajduje się w kolejce na kilka minut przed wykonaniem, lepiej nie uwzględniać czasu w kolejce w parametrze runDuration. Wartość PRECondition_FAILED zostanie zwrócona, jeśli ktoś spróbuje ustawić wartość runDuration w kroku, który ma już ustawione to pole.
|
deviceUsageDuration |
Ilość zasobu urządzenia używanego do przeprowadzenia testu. Jest to wykorzystanie urządzenia w celach rozliczeniowych, które różni się od wartości runDuration (na przykład użycie urządzenia nie będzie obciążane opłatami za awarie infrastruktury). Wartość PRECondition_FAILED zostanie zwrócona, jeśli zostanie podjęta próba ustawienia parametru device_usage w kroku, który ma już ustawione to pole.
|
multiStep |
Szczegółowe informacje o uruchamianiu wielu kroków z tą samą konfiguracją co grupa. Te informacje pozwolą Ci ustalić, do której grupy należy dany krok. Określa też „podstawowy krok” grup który powoduje indeksowanie wszystkich członków grupy.
|
Pole sumy
|
|
testExecutionStep |
Wykonanie uruchomionego testu. |
toolExecutionStep |
Wykonanie narzędzia (używane w przypadku czynności, których nie obsługujemy). |
Etap wykonywania testu
Krok reprezentujący wykonywanie testów.
Akceptuje pliki XML typu ant-junit, które są analizowane przez usługę jako uporządkowane wyniki testu. Ścieżki do plików XML są aktualizowane w celu dołączenia większej liczby plików, ale nie można ich usunąć.
Użytkownicy mogą też dodawać wyniki testu ręcznie za pomocą pola test_result.
Zapis JSON |
---|
{ "testSuiteOverviews": [ { object ( |
Pola | |
---|---|
testSuiteOverviews[] |
Lista przeglądów zestawu testów. Może zostać przeanalizowany z dziennika XML xUnit przez serwer lub przesłany bezpośrednio przez użytkownika. Odwołania należy wywoływać tylko wtedy, gdy zestawy testowe zostaną w pełni przeanalizowane lub przesłane. Maksymalna dozwolona liczba przeglądów pakietu testowego na krok to 1000.
|
toolExecution |
Reprezentuje wykonanie uruchomionego testu. Kod wyjścia tego narzędzia będzie używany do określenia, czy test został zaliczony.
|
testIssues[] |
Problemy zaobserwowane podczas wykonywania testu. Jeśli na przykład testowana aplikacja mobilna uległa awarii podczas testu, to w tym miejscu można zapisać komunikat o błędzie i zrzut stosu, aby ułatwić debugowanie.
|
testTiming |
Podział czasu wykonywania testu.
|
Wykonanie narzędzia
Wykonanie dowolnego narzędzia. Może to być uruchomienie testów albo narzędzie kopiujące artefakty lub wdrażające kod.
Zapis JSON |
---|
{ "commandLineArguments": [ string ], "toolLogs": [ { object ( |
Pola | |
---|---|
commandLineArguments[] |
Pełny tokenizowany wiersz poleceń zawierający nazwę programu (odpowiednik argumentu argv w programie C).
|
toolLogs[] |
Odwołania do dzienników w postaci zwykłego tekstu zwracają wykonanie narzędzia. To pole można ustawić przed zamknięciem narzędzia, co umożliwi dostęp do podglądu na żywo logów, gdy narzędzie jest uruchomione. Maksymalna dozwolona liczba logów narzędzia na krok to 1000.
|
exitCode |
Kod wyjścia uruchomienia narzędzia. To pole zostanie ustawione po zamknięciu narzędzia.
|
toolOutputs[] |
Odniesienia do nieprzezroczystych plików w dowolnym formacie wygenerowanych przez wykonanie narzędzia. Maksymalna dozwolona liczba wyników wyjściowych narzędzia na krok to 1000.
|
Kod wyjścia narzędzia
Wyjdź z kodu uruchomionego przez narzędzie.
Zapis JSON |
---|
{ "number": integer } |
Pola | |
---|---|
number |
Kod wyjścia uruchomienia narzędzia. Wartość 0 oznacza, że wykonanie zostało wykonane.
|
Problem testowy
Podczas wykonywania testu wykryto problem.
Zapis JSON |
---|
{ "errorMessage": string, "stackTrace": { object ( |
Pola | |
---|---|
errorMessage |
Krótka, zrozumiała dla człowieka wiadomość opisująca problem. Wymagane. |
stackTrace |
Wycofano, zamiast używać pól zrzutu stosu w określonych ostrzeżeniach. |
warning |
Komunikat ostrzegawczy z dodatkowymi informacjami o problemie. Właściwa wartość to zawsze wiadomość z adresu com.google.devtools.toolresults.v1.warnings |
severity |
Stopień problemu. Wymagane. |
type |
Typ problemu. Wymagane. |
category |
Kategoria problemu. Wymagane. |
Dowolna
Any
zawiera dowolny zserializowany komunikat bufora protokołu wraz z adresem URL, który opisuje typ zserializowanej wiadomości.
Biblioteka Protobuf umożliwia pakowanie/rozpakowywanie dowolnych wartości w postaci funkcji użytkowych lub dodatkowych wygenerowanych metod dowolnego typu.
Przykład 1. Zapakuj i rozpakuj wiadomość w języku C++.
Foo foo = ...;
Any any;
any.PackFrom(foo);
...
if (any.UnpackTo(&foo)) {
...
}
Przykład 2. Spakuj i rozpakuj wiadomość w języku Java.
Foo foo = ...;
Any any = Any.pack(foo);
...
if (any.is(Foo.class)) {
foo = any.unpack(Foo.class);
}
Przykład 3. Zapakuj i rozpakuj wiadomość w Pythonie.
foo = Foo(...)
any = Any()
any.Pack(foo)
...
if any.Is(Foo.DESCRIPTOR):
any.Unpack(foo)
...
Przykład 4. Pakowanie i rozpakowywanie wiadomości w języku Go
foo := &pb.Foo{...}
any, err := ptypes.MarshalAny(foo)
...
foo := &pb.Foo{}
if err := ptypes.UnmarshalAny(any, foo); err != nil {
...
}
Metody pakietu udostępniane przez bibliotekę protobuf będą domyślnie używać „type.googleapis.com/full.type.name” , a metody rozpakowywania korzystają z pełnej i jednoznacznej nazwy typu po ostatnim znaku „/” w typie adresu URL, np. „foo.bar.com/x/y.z” zwróci nazwę typu „y.z”.
JSON
Reprezentacja wartości Any
w formacie JSON to standardowa reprezentacja umieszczonej wiadomości w postaci zdeserializowanej wiadomości i dodatkowe pole @type
, które zawiera adres URL typu. Przykład:
package google.profile;
message Person {
string first_name = 1;
string last_name = 2;
}
{
"@type": "type.googleapis.com/google.profile.Person",
"firstName": <string>,
"lastName": <string>
}
Jeśli typ umieszczonej wiadomości jest dobrze znany i ma niestandardową reprezentację JSON, zostanie w niej umieszczona pole value
, które oprócz pola @type
zawiera niestandardowy plik JSON. Przykład (dla wiadomości google.protobuf.Duration
):
{
"@type": "type.googleapis.com/google.protobuf.Duration",
"value": "1.212s"
}
Zapis JSON |
---|
{ "typeUrl": string, "value": string } |
Pola | |
---|---|
typeUrl |
URL/nazwa zasobu, która jednoznacznie identyfikuje typ zserializowanego komunikatu bufora protokołu. Ten ciąg musi zawierać co najmniej jeden znak „/” znaku. Ostatni segment ścieżki adresu URL musi zawierać pełną nazwę danego typu (np. W praktyce zespoły zwykle wstępnie kompilują do pliku binarnego wszystkie typy, których będą używać w kontekście „Dowolne”. Jednak dla adresów URL, które używają schematu
Uwaga: ta funkcja nie jest obecnie dostępna w oficjalnej wersji protokołu i nie jest używana w przypadku adresów URL zaczynających się od type.googleapis.com. Schematy inne niż |
value |
Musi to być prawidłowy zserializowany bufor protokołu określonego powyżej typu. Ciąg zakodowany w formacie base64. |
Poziom ważności
Poziomy ważności problemów.
Wartości w polu enum | |
---|---|
unspecifiedSeverity |
Domyślna nieokreślona ważność. Nie używać. Tylko na potrzeby obsługi wersji. |
info |
Problem nie krytyczny, ponieważ dostarcza użytkownikom informacje o przebiegu testu. |
suggestion |
Problem nie krytyczny, ze wskazówkami na temat poprawy komfortu testowania, np. z zaleceniem użycia pętli gier. |
warning |
Potencjalnie krytyczny problem. |
severe |
Problem krytyczny. |
Typ
Typy problemów.
Wartości w polu enum | |
---|---|
unspecifiedType |
Domyślny nieokreślony typ. Nie używać. Tylko na potrzeby obsługi wersji. |
fatalException |
Problem jest wyjątkiem krytycznym. |
nativeCrash |
Problem to awaria natywna. |
anr |
Problem to awaria ANR. |
unusedRoboDirective |
Problem to nieużywana dyrektywa robo. |
compatibleWithOrchestrator |
Issue to sugestia użycia aplikacji administracyjnego. |
launcherActivityNotFound |
Problem ze znalezieniem aktywności programu uruchamiającego |
startActivityNotFound |
Problem z rozwiązywaniem przekazanego przez użytkownika zamiaru rozpoczęcia działania |
incompleteRoboScriptExecution |
Skrypt Robo nie został w pełni wykonany. |
completeRoboScriptExecution |
Skrypt Robo został w pełni wykonany. |
failedToInstall |
Nie udało się zainstalować pliku APK. |
availableDeepLinks |
Test aplikacji zawiera precyzyjne linki, ale żaden z nich nie został przekazany do Robo. |
nonSdkApiUsageViolation |
Aplikacja uzyskała dostęp do interfejsu API innego niż SDK. |
nonSdkApiUsageReport |
Aplikacja uzyskała dostęp do interfejsu API innego niż SDK (nowy raport szczegółowy) |
encounteredNonAndroidUiWidgetScreen |
Indeksowanie Robo napotkało co najmniej 1 ekran z elementami, które nie są widżetami interfejsu Androida. |
encounteredLoginScreen |
Indeksowanie Robo napotkało co najmniej 1 prawdopodobny ekran logowania. |
performedGoogleLogin |
Robo zalogował się przez Google. |
iosException |
Aplikacja na iOS uległa awarii z wyjątkiem. |
iosCrash |
Aplikacja na iOS uległa awarii bez wyjątku (np. została zatrzymana). |
performedMonkeyActions |
Indeksowanie Robo polegało na wykonywaniu pewnych czynności. |
usedRoboDirective |
Podczas indeksowania Robo użyto dyrektywy Robo. |
usedRoboIgnoreDirective |
Indeksowanie Robo używa dyrektywy Robo do zignorowania elementu interfejsu. |
insufficientCoverage |
Robot Robo nie zindeksował niektórych potencjalnie ważnych części aplikacji. |
inAppPurchases |
Indeksowanie Robo obejmowało zakupy w aplikacji. |
crashDialogError |
Podczas wykonywania testu wykryto okno awarii |
uiElementsTooDeep |
Głębokość elementu interfejsu przekracza próg |
blankScreen |
Podczas indeksowania Robo znaleziono pusty ekran |
overlappingUiElements |
Indeksowanie Robo znaleziono nakładające się elementy interfejsu |
unityException |
Wykryto nieobsłużony wyjątek Unity (nie powodują one awarii aplikacji). |
deviceOutOfMemory |
Wykryto, że na urządzeniu brakuje pamięci |
logcatCollectionError |
Wykryto problemy podczas pobierania dzienników |
detectedAppSplashScreen |
Robo wykrył ekran powitalny dostarczony przez aplikację (w przeciwieństwie do ekranu powitalnego systemu operacyjnego Android). |
assetIssue |
W tym teście wystąpił problem z zasobami. |
Kategoria
Kategorie problemów.
Wartości w polu enum | |
---|---|
unspecifiedCategory |
Domyślna nieokreślona kategoria. Nie używać. Tylko na potrzeby obsługi wersji. |
common |
Problem nie dotyczy konkretnego rodzaju testowego (np. awaria natywna). |
robo |
Problem dotyczy tylko uruchomienia Robo. |
Czas testowania
Czas testowania jest podzielony na poszczególne fazy.
Zapis JSON |
---|
{
"testProcessDuration": {
object ( |
Pola | |
---|---|
testProcessDuration |
Czas trwania procesu testowania.
|
Etap wykonywania narzędzia
Ogólny krok narzędzia używany w przypadku plików binarnych, których nie obsługujemy. Przykład: uruchomienie cp w celu skopiowania artefaktów z jednej lokalizacji do drugiej.
Zapis JSON |
---|
{
"toolExecution": {
object ( |
Pola | |
---|---|
toolExecution |
Wykonanie narzędzia.
|
Wieloetapowe
Szczegółowe informacje o uruchamianiu wielu kroków z tą samą konfiguracją co grupa.
Zapis JSON |
---|
{
"primaryStepId": string,
"multistepNumber": integer,
"primaryStep": {
object ( |
Pola | |
---|---|
primaryStepId |
Identyfikator kroku podstawowego (pierwotnego), którym może być ten krok. |
multistepNumber |
Unikalna wartość int podana dla każdego kroku. Może mieć zakres od 0(włącznie) do łącznej liczby kroków(bez uwzględnienia). Krok podstawowy to 0. |
primaryStep |
Widoczny, jeśli jest to krok podstawowy (pierwotny). |
GłównyKrok
Sklepy zbierają stan testu wielu kroków przeprowadzonych jako grupa i wynik każdego z nich.
Zapis JSON |
---|
{ "rollUp": enum ( |
Pola | |
---|---|
rollUp |
Podsumuj stan testu wielu kroków, które zostały uruchomione z tą samą konfiguracją co grupa. |
individualOutcome[] |
Identyfikator kroku i wynik każdego z nich. |
Wynik indywidualny
Identyfikator kroku i wynik każdego pojedynczego kroku uruchomionego jako grupa z innymi krokami o tej samej konfiguracji.
Zapis JSON |
---|
{ "stepId": string, "outcomeSummary": enum ( |
Pola | |
---|---|
stepId |
|
outcomeSummary |
|
multistepNumber |
Unikalna wartość int podana dla każdego kroku. Może mieć zakres od 0(włącznie) do łącznej liczby kroków(bez uwzględnienia). Krok podstawowy to 0. |
runDuration |
Czas trwania tego kroku. |
Metody |
|
---|---|
|
Wyświetla listę klastrów ułatwień dostępu dla danego kroku Może zwrócić dowolny z tych kanonicznych kodów błędów:
|
|
Tworzy krok. |
|
Zbiera krok. |
|
Pobiera PerfMetricsSummary. |
|
Zawiera listę kroków danego wykonania. |
|
Aktualizuje istniejący krok o dostarczony częściowy element. |
|
Opublikuj pliki XML w istniejącym kroku. |