- Zasób: Krok
- Krok wykonania testu
- Wykonanie narzędzia
- Kod wyjścia narzędzia
- Problem testowy
- Każdy
- Powaga
- Typ
- Kategoria
- Czas testu
- Krok wykonania narzędzia
- Wieloetapowy
- Podstawowy krok
- Indywidualny wynik
- Metody
Zasób: Krok
Krok reprezentuje pojedynczą operację wykonywaną w ramach wykonania. Krok może służyć do reprezentowania wykonania narzędzia (na przykład wykonania modułu testowego lub wykonania kompilatora).
Kroki mogą się nakładać (na przykład dwa kroki mogą mieć ten sam czas rozpoczęcia, jeśli niektóre operacje są wykonywane równolegle).
Oto przykład. Rozważmy, że mamy ciągłą kompilację, wykonującą program uruchamiający test dla każdej iteracji. Przepływ pracy będzie wyglądał następująco: - użytkownik tworzy wykonanie o identyfikatorze 1 - użytkownik tworzy TestExecutionStep o identyfikatorze 100 dla wykonania 1 - użytkownik aktualizuje TestExecutionStep o identyfikatorze 100, aby dodać surowy dziennik XML + usługa analizuje dzienniki XML i zwraca TestExecutionStep z zaktualizowane wyniki testu. - użytkownik zaktualizuje status TestExecutionStep o identyfikatorze 100 na COMPLETE
Krok można aktualizować, dopóki jego stan nie zostanie ustawiony na KOMPLETNY, w którym to momencie stanie się niezmienny.
Reprezentacja JSON |
---|
{ "stepId": string, "creationTime": { object ( |
Pola | |
---|---|
stepId | Unikalny identyfikator w ramach wykonania tego kroku. Zwraca INVALID_ARGUMENT, jeśli to pole zostało ustawione lub nadpisane przez osobę wywołującą.
|
creationTime | Czas utworzenia kroku.
|
completionTime | Czas, w którym status kroku został ustawiony na ukończony. Wartość ta zostanie ustawiona automatycznie po zmianie stanu na COMPLETE.
|
name | Krótka, czytelna dla człowieka nazwa wyświetlana w interfejsie użytkownika. Maksymalnie 100 znaków. Na przykład: czysta kompilacja Wartość PRECONDITION_FAILED zostanie zwrócona po utworzeniu nowego kroku, jeśli ma wspólną nazwę i wartość wymiaru z istniejącym krokiem. Jeśli dwa kroki reprezentują podobną akcję, ale mają różne wartości wymiarów, powinny mieć tę samą nazwę. Na przykład, jeśli ten sam zestaw testów jest uruchamiany na dwóch różnych platformach, oba kroki powinny mieć tę samą nazwę.
|
description | Opis tego narzędzia Na przykład: mvn clean package -D skipTests=true
|
state | Stan początkowy to IN_PROGRESS. Jedyne legalne zmiany stanu to * IN_PROGRESS -> COMPLETE Jeśli zażądano nieprawidłowego przejścia, zostanie zwrócony komunikat PRECONDITION_FAILED. Dopuszczalne jest utworzenie Kroku ze stanem UKOŃCZONY. Stan można ustawić na COMPLETE tylko raz. Jeśli stan zostanie wielokrotnie ustawiony na COMPLETE, zwrócony zostanie komunikat PRECONDITION_FAILED.
|
outcome | Klasyfikacja wyniku, np. na SUKCES lub POrażkę
|
hasImages | Określa, czy którykolwiek z wyników tego kroku to obrazy, których miniatury można pobrać za pomocą pliku miniatur.list.
|
labels | Dowolne pary klucz/wartość dostarczone przez użytkownika, które są skojarzone z krokiem. Użytkownicy są odpowiedzialni za zarządzanie przestrzenią nazw kluczy w taki sposób, aby klucze nie kolidowały przypadkowo. INVALID_ARGUMENT zostanie zwrócony, jeśli liczba etykiet przekracza 100 lub jeśli długość któregokolwiek z kluczy lub wartości przekracza 100 znaków.
Obiekt zawierający listę par |
dimensionValue | Jeśli wykonanie zawierające ten krok ma ustawioną dowolną definicję wymiaru, to pole to pozwala dziecku na określenie wartości wymiarów. Klucze muszą dokładnie odpowiadać definicji wymiaru wykonania. Na przykład, jeśli wykonanie ma Jeżeli krok nie należy do jednego wymiaru macierzy, wartością dla tego wymiaru powinien być pusty ciąg znaków. Na przykład, jeśli jeden z testów jest wykonywany przez moduł uruchamiający, który nie obsługuje ponownych prób, krok może mieć Jeżeli krok nie uczestniczy w żadnym wymiarze macierzy, może pozostawić nieustawiony wymiarWartość. Jeśli którykolwiek z kluczy nie istnieje w definicji wymiaru wykonania, zostanie zwrócony komunikat PRECONDITION_FAILED. Wartość PRECONDITION_FAILED zostanie zwrócona, jeśli inny krok w tym wykonaniu ma już tę samą nazwę i wartość wymiaru, ale różni się w innych polach danych, na przykład pole kroku jest inne. Wartość PRECONDITION_FAILED zostanie zwrócona, jeśli ustawiono wartość wymiaru, a w wykonaniu istnieje definicja wymiaru, która nie jest określona jako jeden z kluczy.
Obiekt zawierający listę par |
runDuration | Ile czasu zajęło wykonanie tego kroku. Jeśli nieustawione, jest to różnica między czasem utworzenia i czasem zakończenia, gdy krok jest ustawiony na stan UKOŃCZONY. W niektórych przypadkach właściwe jest ustawienie tej wartości osobno: Na przykład, jeśli tworzony jest krok, ale operacja, którą reprezentuje, znajduje się w kolejce na kilka minut przed jej wykonaniem, właściwym byłoby nie wliczanie czasu spędzonego w kolejce do jego czas trwania. PRECONDITION_FAILED zostanie zwrócony, jeśli ktoś spróbuje ustawić runDuration na kroku, który ma już ustawione to pole.
|
deviceUsageDuration | Ile zasobów urządzenia jest wykorzystywanych do wykonania testu. Jest to użycie urządzenia używane do celów rozliczeniowych, które różni się od runDuration, na przykład awaria infrastruktury nie zostanie naliczona opłata za użycie urządzenia. PRECONDITION_FAILED zostanie zwrócone, jeśli ktoś spróbuje ustawić Device_usage w kroku, który ma już ustawione to pole.
|
multiStep | Szczegóły, gdy uruchamianych jest wiele kroków z tą samą konfiguracją co grupa. Dane te można wykorzystać do określenia, do której grupy należy ten etap. Określa także „pierwszy krok” grupy, który indeksuje wszystkich członków grupy.
|
| |
testExecutionStep | Egzekucja biegacza testowego. |
toolExecutionStep | Wykonanie narzędzia (używane w przypadku kroków, których jawnie nie obsługujemy). |
Krok wykonania testu
Krok reprezentujący uruchamianie testów.
Akceptuje pliki xml ant-junit, które zostaną przeanalizowane przez usługę w celu uzyskania ustrukturyzowanych wyników testów. Ścieżki plików XML są aktualizowane w celu dołączenia większej liczby plików, jednak nie można ich usunąć.
Użytkownicy mogą również dodawać wyniki testów ręcznie, korzystając z pola test_result.
Reprezentacja JSON |
---|
{ "testSuiteOverviews": [ { object ( |
Pola | |
---|---|
testSuiteOverviews[] | Lista zawartości przeglądu zestawu testów. Można to przeanalizować z dziennika XML xUnit przez serwer lub przesłać bezpośrednio przez użytkownika. Te odniesienia należy wywoływać tylko wtedy, gdy zestawy testów są w pełni przeanalizowane lub przesłane. Maksymalna dozwolona liczba przeglądów zestawu testów na krok wynosi 1000.
|
toolExecution | Reprezentuje wykonanie modułu testowego. Kod zakończenia tego narzędzia zostanie użyty do ustalenia, czy test zakończył się pomyślnie.
|
testIssues[] | Problemy zaobserwowane podczas wykonywania testu. Na przykład, jeśli testowana aplikacja mobilna ulegnie awarii podczas testu, można tutaj zapisać komunikat o błędzie i zawartość śledzenia stosu, aby ułatwić debugowanie.
|
testTiming | Podział czasu wykonania testu.
|
Wykonanie narzędzia
Wykonanie dowolnego narzędzia. Może to być moduł uruchamiający testy lub narzędzie kopiujące artefakty lub wdrażające kod.
Reprezentacja JSON |
---|
{ "commandLineArguments": [ string ], "toolLogs": [ { object ( |
Pola | |
---|---|
commandLineArguments[] | Pełna tokenizowana linia poleceń zawierająca nazwę programu (odpowiednik argv w programie C).
|
toolLogs[] | Odniesienia do dowolnych dzienników tekstowych przedstawiają wykonanie narzędzia. To pole można ustawić przed zamknięciem narzędzia, aby mieć dostęp do podglądu dzienników na żywo podczas działania narzędzia. Maksymalna dozwolona liczba dzienników narzędzi na krok wynosi 1000.
|
exitCode | Kod zakończenia wykonywania narzędzia. To pole zostanie ustawione po wyjściu z narzędzia.
|
toolOutputs[] | Odniesienia do nieprzezroczystych plików w dowolnym formacie wyprowadzanych przez wykonanie narzędzia. Maksymalna dozwolona liczba wyjść narzędzia na krok wynosi 1000.
|
Kod wyjścia narzędzia
Kod wyjścia z wykonania narzędzia.
Reprezentacja JSON |
---|
{ "number": integer } |
Pola | |
---|---|
number | Kod zakończenia wykonania narzędzia. Wartość 0 oznacza, że wykonanie przebiegło pomyślnie.
|
Problem testowy
Wykryto problem występujący podczas wykonywania testu.
Reprezentacja JSON |
---|
{ "errorMessage": string, "stackTrace": { object ( |
Pola | |
---|---|
errorMessage | Krótka, czytelna dla człowieka wiadomość opisująca problem. Wymagany. |
stackTrace | Przestarzałe na rzecz pól śledzenia stosu wewnątrz określonych ostrzeżeń. |
warning | Komunikat ostrzegawczy z dodatkowymi szczegółami problemu. Zawsze powinna to być wiadomość z adresu com.google.devtools.toolresults.v1.warnings |
severity | Ważność problemu. Wymagany. |
type | Rodzaj problemu. Wymagany. |
category | Kategoria problemu. Wymagany. |
Każdy
Any
zawiera dowolny serializowany komunikat bufora protokołu wraz z adresem URL opisującym typ serializowanego komunikatu.
Biblioteka Protobuf zapewnia obsługę pakowania/rozpakowywania wartości Any w postaci funkcji narzędziowych lub dodatkowych wygenerowanych metod typu Any.
Przykład 1: Spakowanie i rozpakowanie wiadomości w C++.
Foo foo = ...;
Any any;
any.PackFrom(foo);
...
if (any.UnpackTo(&foo)) {
...
}
Przykład 2: Spakowanie i rozpakowanie wiadomości w Javie.
Foo foo = ...;
Any any = Any.pack(foo);
...
if (any.is(Foo.class)) {
foo = any.unpack(Foo.class);
}
Przykład 3: Spakowanie i rozpakowanie wiadomości w Pythonie.
foo = Foo(...)
any = Any()
any.Pack(foo)
...
if any.Is(Foo.DESCRIPTOR):
any.Unpack(foo)
...
Przykład 4: Spakuj i rozpakuj wiadomość w Go
foo := &pb.Foo{...}
any, err := ptypes.MarshalAny(foo)
...
foo := &pb.Foo{}
if err := ptypes.UnmarshalAny(any, foo); err != nil {
...
}
Metody pakowania dostarczane przez bibliotekę protobuf będą domyślnie używać „type.googleapis.com/full.type.name” jako adresu URL typu, a metody rozpakowywania używają tylko w pełni kwalifikowanej nazwy typu po ostatnim „/” w adresie URL typu, na przykład „foo.bar.com/x/yz” da nazwę typu „yz”.
JSON
Reprezentacja JSON wartości Any
wykorzystuje zwykłą reprezentację deserializowanego, osadzonego komunikatu z dodatkowym polem @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 osadzony typ wiadomości jest dobrze znany i ma niestandardową reprezentację JSON, reprezentacja ta zostanie osadzona, dodając value
pola, która oprócz pola @type
przechowuje niestandardowy JSON. Przykład (dla wiadomości google.protobuf.Duration
):
{
"@type": "type.googleapis.com/google.protobuf.Duration",
"value": "1.212s"
}
Reprezentacja JSON |
---|
{ "typeUrl": string, "value": string } |
Pola | |
---|---|
typeUrl | Adres URL/nazwa zasobu, który jednoznacznie identyfikuje typ serializowanego komunikatu bufora protokołu. Ten ciąg musi zawierać co najmniej jeden znak „/”. Ostatni segment ścieżki adresu URL musi reprezentować pełną nazwę typu (jak w W praktyce zespoły zwykle prekompilują do formatu binarnego wszystkie typy, których spodziewają się użyć w kontekście Any. Jednakże w przypadku adresów URL korzystających ze schematu
Uwaga: ta funkcja nie jest obecnie dostępna w oficjalnej wersji protobuf i nie jest używana w przypadku adresów URL rozpoczynających się od type.googleapis.com. Schematy inne niż |
value | Musi to być prawidłowy serializowany bufor protokołu określonego powyżej typu. Ciąg zakodowany w formacie Base64. |
Powaga
Istotność problemów.
Wyliczenia | |
---|---|
unspecifiedSeverity | Domyślna nieokreślona ważność. Nie używaj. Tylko do wersjonowania. |
info | Problem niekrytyczny, dostarczający użytkownikom pewnych informacji na temat przebiegu testowego. |
suggestion | Problem niekrytyczny, dostarczający użytkownikom wskazówek dotyczących poprawy doświadczenia podczas testowania, np. sugerujący użycie pętli gry. |
warning | Potencjalnie krytyczny problem. |
severe | Krytyczny problem. |
Typ
Rodzaje problemów.
Wyliczenia | |
---|---|
unspecifiedType | Domyślny nieokreślony typ. Nie używaj. Tylko do wersjonowania. |
fatalException | Problem jest krytycznym wyjątkiem. |
nativeCrash | Problemem jest natywna awaria. |
anr | Problemem jest awaria ANR. |
unusedRoboDirective | Problemem jest nieużywana dyrektywa robo. |
compatibleWithOrchestrator | Problem polega na sugestii użycia programu Orchestrator. |
launcherActivityNotFound | Problem ze znalezieniem aktywności programu uruchamiającego |
startActivityNotFound | Problem z rozwiązaniem podanego przez użytkownika zamiaru rozpoczęcia działania |
incompleteRoboScriptExecution | Skrypt Robo nie został w pełni wykonany. |
completeRoboScriptExecution | Skrypt Robo został w pełni i pomyślnie wykonany. |
failedToInstall | Nie udało się zainstalować pakietu APK. |
availableDeepLinks | Testowana aplikacja zawiera głębokie linki, ale żadne nie zostały udostępnione 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 szczegółowy raport) |
encounteredNonAndroidUiWidgetScreen | Robo crawl napotkał co najmniej jeden ekran z elementami, które nie są widżetami interfejsu użytkownika Androida. |
encounteredLoginScreen | Robo crawl napotkał co najmniej jeden prawdopodobny ekran logowania. |
performedGoogleLogin | Robo zalogował się w Google. |
iosException | Aplikacja na iOS uległa awarii z wyjątkiem. |
iosCrash | Aplikacja na iOS uległa awarii bez wyjątku (np. została zabita). |
performedMonkeyActions | Czołganie się Robo polegało na wykonywaniu niektórych małpich czynności. |
usedRoboDirective | Indeksowanie Robo korzystało z dyrektywy Robo. |
usedRoboIgnoreDirective | Indeksowanie Robo wykorzystało dyrektywę Robo do zignorowania elementu interfejsu użytkownika. |
insufficientCoverage | Robo nie przeszukał niektórych potencjalnie ważnych części aplikacji. |
inAppPurchases | Indeksowanie Robo obejmowało pewne zakupy w aplikacji. |
crashDialogError | Podczas wykonywania testu wykryto okno dialogowe awarii |
uiElementsTooDeep | Głębokość elementu interfejsu użytkownika jest większa niż próg |
blankScreen | Podczas przeszukiwania Robo znaleziono pusty ekran |
overlappingUiElements | Podczas indeksowania Robo można znaleźć nakładające się elementy interfejsu użytkownika |
unityException | Wykryto nieprzechwycony wyjątek Unity (nie powodują one awarii aplikacji). |
deviceOutOfMemory | Wykryto brak pamięci w urządzeniu |
logcatCollectionError | Wykryto problemy podczas zbierania logcat |
detectedAppSplashScreen | Robo wykrył ekran powitalny dostarczony przez aplikację (w porównaniu z ekranem powitalnym systemu operacyjnego Android). |
Kategoria
Kategorie zagadnień.
Wyliczenia | |
---|---|
unspecifiedCategory | Domyślna nieokreślona kategoria. Nie używaj. Tylko do wersjonowania. |
common | Problem nie jest specyficzny dla konkretnego rodzaju testu (np. awaria natywna). |
robo | Problem jest specyficzny dla uruchomienia Robo. |
Czas testu
Testowanie podziału czasu w celu poznania faz.
Reprezentacja JSON |
---|
{
"testProcessDuration": {
object ( |
Pola | |
---|---|
testProcessDuration | Ile czasu zajęło uruchomienie procesu testowego.
|
Krok wykonania narzędzia
Ogólny krok narzędzia do użycia w przypadku plików binarnych, których wyraźnie nie obsługujemy. Na przykład: uruchomienie cp w celu skopiowania artefaktów z jednej lokalizacji do drugiej.
Reprezentacja JSON |
---|
{
"toolExecution": {
object ( |
Pola | |
---|---|
toolExecution | Wykonanie narzędzia.
|
Wieloetapowy
Szczegóły, gdy uruchamianych jest wiele kroków z tą samą konfiguracją co grupa.
Reprezentacja JSON |
---|
{
"primaryStepId": string,
"multistepNumber": integer,
"primaryStep": {
object ( |
Pola | |
---|---|
primaryStepId | Identyfikator kroku podstawowego (oryginalnego), którym może być ten krok. |
multistepNumber | Unikalny int nadawany każdemu krokowi. Zakres od 0 (włącznie) do całkowitej liczby kroków (wyłącznie). Podstawowym krokiem jest 0. |
primaryStep | Występuje, jeśli jest to krok podstawowy (oryginalny). |
Podstawowy krok
Przechowuje status testu zbiorczego wielu kroków, które zostały uruchomione jako grupa, oraz wynik każdego pojedynczego kroku.
Reprezentacja JSON |
---|
{ "rollUp": enum ( |
Pola | |
---|---|
rollUp | Stan testu zbiorczego wielu kroków, które zostały uruchomione z tą samą konfiguracją co grupa. |
individualOutcome[] | Identyfikator kroku i wynik każdego pojedynczego kroku. |
Indywidualny wynik
Identyfikator kroku i wynik każdego pojedynczego kroku, który został uruchomiony jako grupa z innymi krokami o tej samej konfiguracji.
Reprezentacja JSON |
---|
{ "stepId": string, "outcomeSummary": enum ( |
Pola | |
---|---|
stepId | |
outcomeSummary | |
multistepNumber | Unikalny int nadawany każdemu krokowi. Zakres od 0 (włącznie) do całkowitej liczby kroków (wyłącznie). Podstawowym krokiem jest 0. |
runDuration | Ile czasu zajęło wykonanie tego kroku. |
Metody | |
---|---|
| Wyświetla listę klastrów dostępności dla danego kroku Może zwrócić dowolny z następujących kanonicznych kodów błędów:
|
| Tworzy krok. |
| Dostaje krok. |
| Pobiera podsumowanie PerfMetrics. |
| Wyświetla listę kroków dla danego wykonania. |
| Aktualizuje istniejący krok za pomocą dostarczonej jednostki częściowej. |
| Opublikuj pliki XML w istniejącym kroku. |