REST Resource: projects.histories.executions.steps

Recurso: Etapa

Uma Etapa representa uma única operação executada como parte da Execução. Uma etapa pode ser usada para representar a execução de uma ferramenta (por exemplo, uma execução de executor de teste ou uma execução de um compilador).

As etapas podem se sobrepor (por exemplo, duas etapas podem ter a mesma hora de início se algumas operações forem feitas em paralelo).

Aqui está um exemplo, vamos considerar que temos uma compilação contínua executando um executor de teste para cada iteração. O fluxo de trabalho seria semelhante a: - o usuário cria uma Execution com id 1 - o usuário cria um TestExecutionStep com id 100 para Execution 1 - o usuário atualiza TestExecutionStep com id 100 para adicionar um log xml bruto + o serviço analisa os logs xml e retorna um TestExecutionStep com TestResult(s) atualizado(s). - usuário atualiza o status de TestExecutionStep com id 100 para COMPLETE

Um Step pode ser atualizado até que seu estado seja definido como COMPLETE, ponto em que ele se torna imutável.

representação JSON
{
  "stepId": string,
  "creationTime": {
    object (Timestamp)
  },
  "completionTime": {
    object (Timestamp)
  },
  "name": string,
  "description": string,
  "state": enum (State),
  "outcome": {
    object (Outcome)
  },
  "hasImages": boolean,
  "labels": {
    string: string,
    ...
  },
  "dimensionValue": {
    string: string,
    ...
  },
  "runDuration": {
    object (Duration)
  },
  "deviceUsageDuration": {
    object (Duration)
  },
  "multiStep": {
    object (MultiStep)
  },

  // Union field step can be only one of the following:
  "testExecutionStep": {
    object (TestExecutionStep)
  },
  "toolExecutionStep": {
    object (ToolExecutionStep)
  }
  // End of list of possible types for union field step.
}
Campos
stepId

string

Um identificador exclusivo em uma execução para esta etapa.

Retorna INVALID_ARGUMENT se este campo for definido ou substituído pelo chamador.

  • Em resposta: sempre definido
  • Na solicitação de criação/atualização: nunca definir
creationTime

object ( Timestamp )

A hora em que a etapa foi criada.

  • Em resposta: sempre definido
  • Na solicitação de criação/atualização: nunca definir
completionTime

object ( Timestamp )

A hora em que o status da etapa foi definido como concluído.

Este valor será definido automaticamente quando o estado mudar para COMPLETE.

  • Em resposta: defina se o estado de execução for COMPLETO.
  • Na solicitação de criação/atualização: nunca definir
name

string

Um nome curto legível por humanos para exibir na IU. Máximo de 100 caracteres. Por exemplo: compilação limpa

Um PRECONDITION_FAILED será retornado ao criar uma nova etapa se ela compartilhar seu nome e dimensionValue com uma etapa existente. Se duas etapas representam uma ação semelhante, mas possuem valores de dimensão diferentes, elas devem compartilhar o mesmo nome. Por exemplo, se o mesmo conjunto de testes for executado em duas plataformas diferentes, as duas etapas devem ter o mesmo nome.

  • Em resposta: sempre definido
  • Na solicitação de criação: sempre defina
  • Na solicitação de atualização: nunca definido
description

string

Uma descrição desta ferramenta Por exemplo: mvn clean package -D skipTests=true

  • Em resposta: presente se definido pela solicitação de criação/atualização
  • Na solicitação de criação/atualização: opcional
state

enum ( State )

O estado inicial é IN_PROGRESS. As únicas transições de estado legais são * IN_PROGRESS -> COMPLETE

Um PRECONDITION_FAILED será retornado se uma transição inválida for solicitada.

É válido criar a Etapa com o estado definido como COMPLETO. O estado só pode ser definido como COMPLETE uma vez. Um PRECONDITION_FAILED será retornado se o estado for definido como COMPLETE várias vezes.

  • Em resposta: sempre definido
  • Na solicitação de criação/atualização: opcional
outcome

object ( Outcome )

Classificação do resultado, por exemplo em SUCESSO ou FALHA

  • Em resposta: presente se definido pela solicitação de criação/atualização
  • Na solicitação de criação/atualização: opcional
hasImages

boolean

Se alguma das saídas desta etapa são imagens cujas miniaturas podem ser obtidas com thumbnails.list.

  • Em resposta: sempre definido
  • Na solicitação de criação/atualização: nunca definir
labels

map (key: string, value: string)

Pares arbitrários de chave/valor fornecidos pelo usuário associados à etapa.

Os usuários são responsáveis ​​por gerenciar o namespace da chave de modo que as chaves não colidam acidentalmente.

Um INVALID_ARGUMENT será retornado se o número de rótulos exceder 100 ou se o comprimento de qualquer uma das chaves ou valores exceder 100 caracteres.

  • Em resposta: sempre definido
  • Na solicitação de criação: opcional
  • No pedido de atualização: opcional; qualquer novo par chave/valor será adicionado ao mapa, e qualquer novo valor para uma chave existente atualizará o valor dessa chave

Um objeto contendo uma lista de "key": value . Exemplo: { "name": "wrench", "mass": "1.3kg", "count": "3" } .

dimensionValue

map (key: string, value: string)

Se a execução que contém esta etapa tiver qualquer conjunto dimension_definition, esse campo permitirá que o filho especifique os valores das dimensões.

As chaves devem corresponder exatamente à dimension_definition da execução.

Por exemplo, se a execução tiver dimension_definition = ['attempt', 'device'] então uma etapa deve definir valores para essas dimensões, por exemplo. dimensionValue = ['attempt': '1', 'device': 'Nexus 6']

Se uma etapa não participa de uma dimensão da matriz, o valor dessa dimensão deve ser uma string vazia. Por exemplo, se um dos testes for executado por um executor que não suporta novas tentativas, a etapa pode ter dimensionValue = ['attempt': '', 'device': 'Nexus 6']

Se a etapa não participar de nenhuma dimensão da matriz, ela pode deixar dimensionValue sem definição.

Um PRECONDITION_FAILED será retornado se alguma das chaves não existir na dimension_definition da execução.

Um PRECONDITION_FAILED será retornado se outra etapa nesta execução já tiver o mesmo nome e dimensionValue, mas diferir em outros campos de dados, por exemplo, o campo da etapa é diferente.

Um PRECONDITION_FAILED será retornado se dimensionValue for definido e houver uma dimension_definition na execução que não seja especificada como uma das chaves.

  • Em resposta: presente se definido por criar
  • Na solicitação de criação: opcional
  • Na solicitação de atualização: nunca definido

Um objeto contendo uma lista de "key": value . Exemplo: { "name": "wrench", "mass": "1.3kg", "count": "3" } .

runDuration

object ( Duration )

Quanto tempo levou para esta etapa ser executada.

Se não for definido, será definido como a diferença entre CreationTime e CompletionTime quando a etapa for definida como o estado COMPLETE. Em alguns casos, é apropriado definir este valor separadamente: Por exemplo, se uma etapa é criada, mas a operação que ela representa fica na fila por alguns minutos antes de ser executada, seria apropriado não incluir o tempo gasto na fila em sua runDuration.

PRECONDITION_FAILED será retornado se alguém tentar definir um runDuration em uma etapa que já tenha esse campo definido.

  • Em resposta: presente se previamente definido; sempre presente na etapa COMPLETE
  • Na solicitação de criação: opcional
  • Na solicitação de atualização: opcional
deviceUsageDuration

object ( Duration )

Quanto o recurso do dispositivo é usado para realizar o teste.

Este é o uso do dispositivo usado para fins de cobrança, que é diferente do runDuration, por exemplo, falha de infraestrutura não será cobrado pelo uso do dispositivo.

PRECONDITION_FAILED será retornado se alguém tentar definir um device_usage em uma etapa que já tenha esse campo definido.

  • Em resposta: presente se previamente definido.
  • Na solicitação de criação: opcional
  • Na solicitação de atualização: opcional
multiStep

object ( MultiStep )

Detalhes quando várias etapas são executadas com a mesma configuração de um grupo. Esses detalhes podem ser usados ​​para identificar a qual grupo essa etapa faz parte. Ele também identifica a 'etapa primária' dos grupos, que indexa todos os membros do grupo.

  • Em resposta: presente se previamente definido.
  • Em criar solicitação: opcional, defina se esta etapa foi executada mais de uma vez.
  • Na solicitação de atualização: opcional

step do campo de união.

step pode ser apenas um dos seguintes:

testExecutionStep

object ( TestExecutionStep )

Uma execução de um executor de teste.

toolExecutionStep

object ( ToolExecutionStep )

Uma execução de uma ferramenta (usada para etapas não compatíveis explicitamente).

TestExecutionStep

Uma etapa que representa testes em execução.

Ele aceita arquivos xml ant-junit que serão analisados ​​em resultados de teste estruturados pelo serviço. Os caminhos de arquivo XML são atualizados para anexar mais arquivos, mas não podem ser excluídos.

Os usuários também podem adicionar resultados de teste manualmente usando o campo test_result.

representação JSON
{
  "testSuiteOverviews": [
    {
      object (TestSuiteOverview)
    }
  ],
  "toolExecution": {
    object (ToolExecution)
  },
  "testIssues": [
    {
      object (TestIssue)
    }
  ],
  "testTiming": {
    object (TestTiming)
  }
}
Campos
testSuiteOverviews[]

object ( TestSuiteOverview )

Lista de conteúdos de visão geral do conjunto de testes. Isso pode ser analisado do log xUnit XML pelo servidor ou carregado diretamente pelo usuário. Essas referências só devem ser chamadas quando os conjuntos de teste forem totalmente analisados ​​ou carregados.

O número máximo permitido de visões gerais do conjunto de testes por etapa é 1.000.

  • Em resposta: sempre definido
  • Na solicitação de criação: opcional
  • Na solicitação de atualização: nunca (em vez disso, use o método personalizado publishXunitXmlFiles)
toolExecution

object ( ToolExecution )

Representa a execução do executor de teste.

O código de saída desta ferramenta será usado para determinar se o teste passou.

  • Em resposta: sempre definido
  • Na solicitação de criação/atualização: opcional
testIssues[]

object ( TestIssue )

Problemas observados durante a execução do teste.

Por exemplo, se o aplicativo móvel em teste travar durante o teste, a mensagem de erro e o conteúdo do rastreamento de pilha podem ser registrados aqui para auxiliar na depuração.

  • Em resposta: presente se definido por criar ou atualizar
  • Na solicitação de criação/atualização: opcional
testTiming

object ( TestTiming )

A interrupção do tempo da execução do teste.

  • Em resposta: presente se definido por criar ou atualizar
  • Na solicitação de criação/atualização: opcional

ToolExecution

Uma execução de uma ferramenta arbitrária. Pode ser um executor de teste ou uma ferramenta copiando artefatos ou implementando código.

representação JSON
{
  "commandLineArguments": [
    string
  ],
  "toolLogs": [
    {
      object (FileReference)
    }
  ],
  "exitCode": {
    object (ToolExitCode)
  },
  "toolOutputs": [
    {
      object (ToolOutputReference)
    }
  ]
}
Campos
commandLineArguments[]

string

A linha de comando tokenizada completa, incluindo o nome do programa (equivalente a argv em um programa C).

  • Em resposta: presente se definido por solicitação de criação
  • Na solicitação de criação: opcional
  • Na solicitação de atualização: nunca definido
toolLogs[]

object ( FileReference )

Referências a quaisquer logs de texto simples geram a execução da ferramenta.

Este campo pode ser definido antes da saída da ferramenta para poder ter acesso a uma visualização ao vivo dos logs enquanto a ferramenta está em execução.

O número máximo permitido de registros de ferramenta por etapa é 1000.

  • Em resposta: presente se definido pela solicitação de criação/atualização
  • Na solicitação de criação: opcional
  • Na solicitação de atualização: opcional, qualquer valor fornecido será anexado à lista existente
exitCode

object ( ToolExitCode )

Código de saída de execução da ferramenta. Este campo será definido assim que a ferramenta sair.

  • Em resposta: presente se definido pela solicitação de criação/atualização
  • Na solicitação de criação: opcional
  • Na solicitação de atualização: opcional, um erro FAILED_PRECONDITION será retornado se um exitCode já estiver definido.
toolOutputs[]

object ( ToolOutputReference )

Referências a arquivos opacos de qualquer formato gerados pela execução da ferramenta.

O número máximo permitido de saídas de ferramenta por etapa é 1000.

  • Em resposta: presente se definido pela solicitação de criação/atualização
  • Na solicitação de criação: opcional
  • Na solicitação de atualização: opcional, qualquer valor fornecido será anexado à lista existente

ToolExitCode

Código de saída de uma execução de ferramenta.

representação JSON
{
  "number": integer
}
Campos
number

integer

Código de saída de execução da ferramenta. Um valor de 0 significa que a execução foi bem-sucedida.

  • Em resposta: sempre definido
  • Na solicitação de criação/atualização: sempre defina

TestIssue

Um problema detectado durante a execução de um teste.

representação JSON
{
  "errorMessage": string,
  "stackTrace": {
    object (StackTrace)
  },
  "warning": {
    object (Any)
  },
  "severity": enum (Severity),
  "type": enum (Type),
  "category": enum (Category)
}
Campos
errorMessage

string

Uma breve mensagem legível por humanos descrevendo o problema. Obrigatório.

stackTrace
(deprecated)

object ( StackTrace )

Obsoleto em favor de campos de rastreamento de pilha dentro de avisos específicos.

warning

object ( Any )

Mensagem de aviso com detalhes adicionais sobre o problema. Deve ser sempre uma mensagem de com.google.devtools.toolresults.v1.warnings

severity

enum ( Severity )

Gravidade do problema. Obrigatório.

type

enum ( Type )

Tipo de problema. Obrigatório.

category

enum ( Category )

Categoria do problema. Obrigatório.

Qualquer

Any contém uma mensagem de buffer de protocolo serializada arbitrária junto com uma URL que descreve o tipo da mensagem serializada.

A biblioteca Protobuf fornece suporte para compactar/descompactar quaisquer valores na forma de funções utilitárias ou métodos gerados adicionais do tipo Any.

Exemplo 1: Compactar e descompactar uma mensagem em C++.

Foo foo = ...;
Any any;
any.PackFrom(foo);
...
if (any.UnpackTo(&foo)) {
  ...
}

Exemplo 2: Compactar e descompactar uma mensagem em Java.

Foo foo = ...;
Any any = Any.pack(foo);
...
if (any.is(Foo.class)) {
  foo = any.unpack(Foo.class);
}

Exemplo 3: compactar e descompactar uma mensagem em Python.

foo = Foo(...)
any = Any()
any.Pack(foo)
...
if any.Is(Foo.DESCRIPTOR):
  any.Unpack(foo)
  ...

Exemplo 4: compactar e descompactar uma mensagem em Go

 foo := &pb.Foo{...}
 any, err := ptypes.MarshalAny(foo)
 ...
 foo := &pb.Foo{}
 if err := ptypes.UnmarshalAny(any, foo); err != nil {
   ...
 }

Os métodos pack fornecidos pela biblioteca protobuf usarão por padrão 'type.googleapis.com/full.type.name' como o URL do tipo e os métodos unpack usarão apenas o nome do tipo totalmente qualificado após o último '/' no URL do tipo, por exemplo, "foo.bar.com/x/yz" resultará no nome do tipo "yz".

JSON

A representação JSON de um valor Any usa a representação regular da mensagem incorporada desserializada, com um campo adicional @type que contém o tipo de URL. Exemplo:

package google.profile;
message Person {
  string first_name = 1;
  string last_name = 2;
}

{
  "@type": "type.googleapis.com/google.profile.Person",
  "firstName": <string>,
  "lastName": <string>
}

Se o tipo de mensagem incorporado for bem conhecido e tiver uma representação JSON personalizada, essa representação será incorporada adicionando um value de campo que contém o JSON personalizado além do campo @type . Exemplo (para mensagem google.protobuf.Duration ):

{
  "@type": "type.googleapis.com/google.protobuf.Duration",
  "value": "1.212s"
}
representação JSON
{
  "typeUrl": string,
  "value": string
}
Campos
typeUrl

string

Um nome de URL/recurso que identifica exclusivamente o tipo de mensagem de buffer de protocolo serializado. Esta string deve conter pelo menos um caractere "/". O último segmento do caminho do URL deve representar o nome totalmente qualificado do tipo (como em path/google.protobuf.Duration ). O nome deve estar na forma canônica (por exemplo, "." inicial não é aceito).

Na prática, as equipes geralmente pré-compilam no binário todos os tipos que esperam que ele use no contexto de Any. No entanto, para URLs que usam o esquema http , https ou nenhum esquema, pode-se opcionalmente configurar um servidor de tipo que mapeia URLs de tipo para definições de mensagem da seguinte forma:

  • Se nenhum esquema for fornecido, https será assumido.
  • Um HTTP GET no URL deve gerar um valor google.protobuf.Type em formato binário ou produzir um erro.
  • Os aplicativos podem armazenar em cache os resultados da pesquisa com base na URL ou precompilá-los em um binário para evitar qualquer pesquisa. Portanto, a compatibilidade binária precisa ser preservada nas alterações de tipos. (Use nomes de tipo com versão para gerenciar alterações recentes.)

Observação: essa funcionalidade não está disponível atualmente na versão oficial do protobuf e não é usada para URLs de tipo que começam com type.googleapis.com.

Esquemas diferentes de http , https (ou o esquema vazio) podem ser usados ​​com semântica específica de implementação.

value

string ( bytes format)

Deve ser um buffer de protocolo serializado válido do tipo especificado acima.

Uma string codificada em base64.

Gravidade

Gravidade dos problemas.

Enums
unspecifiedSeverity Gravidade não especificada padrão. Não use. Apenas para controle de versão.
info Problema não crítico, fornecendo aos usuários algumas informações sobre a execução do teste.
suggestion Problema não crítico, fornecendo aos usuários algumas dicas sobre como melhorar sua experiência de teste, por exemplo, sugerindo o uso de Game Loops.
warning Problema potencialmente crítico.
severe Problema crítico.

Tipo

Tipos de problemas.

Enums
unspecifiedType Tipo não especificado padrão. Não use. Apenas para controle de versão.
fatalException Problema é uma exceção fatal.
nativeCrash O problema é uma falha nativa.
anr O problema é uma falha de ANR.
unusedRoboDirective O problema é uma diretiva robo não utilizada.
compatibleWithOrchestrator O problema é uma sugestão para usar o orquestrador.
launcherActivityNotFound Problema ao encontrar uma atividade do iniciador
startActivityNotFound Problema ao resolver uma intenção fornecida pelo usuário para iniciar uma atividade
incompleteRoboScriptExecution Um script do Robo não foi totalmente executado.
completeRoboScriptExecution Um script do Robo foi totalmente executado com sucesso.
failedToInstall Falha ao instalar o APK.
nonSdkApiUsageViolation O aplicativo acessou uma API não SDK.
nonSdkApiUsageReport O aplicativo acessou uma API não SDK (novo relatório detalhado)
encounteredNonAndroidUiWidgetScreen O rastreamento Robo encontrou pelo menos uma tela com elementos que não são widgets de IU do Android.
encounteredLoginScreen O rastreamento Robo encontrou pelo menos uma tela de login provável.
performedGoogleLogin Robo fez login com o Google.
iosException O aplicativo iOS travou com uma exceção.
iosCrash O aplicativo iOS travou sem exceção (por exemplo, morto).
performedMonkeyActions Robo crawl envolvia a execução de algumas ações de macaco.
usedRoboDirective O rastreamento Robo usou uma diretiva Robo.
usedRoboIgnoreDirective O rastreamento Robo usou uma diretiva Robo para ignorar um elemento da interface do usuário.
insufficientCoverage O Robo não rastreou algumas partes potencialmente importantes do aplicativo.
inAppPurchases O rastreamento Robo envolveu algumas compras no aplicativo.
crashDialogError A caixa de diálogo de travamento foi detectada durante a execução do teste
uiElementsTooDeep A profundidade do elemento da interface do usuário é maior que o limite
blankScreen Tela em branco é encontrada no rastreamento do Robo
overlappingUiElements Elementos de interface do usuário sobrepostos são encontrados no rastreamento do Robo
unityException Foi detectada uma exceção não capturada do Unity (essas não travam os aplicativos).
deviceOutOfMemory Dispositivo sem memória foi detectado
logcatCollectionError Problemas detectados durante a coleta do logcat
detectedAppSplashScreen O Robo detectou uma tela inicial fornecida pelo aplicativo (vs. tela inicial do sistema operacional Android).

Categoria

Categorias de problemas.

Enums
unspecifiedCategory Categoria não especificada padrão. Não use. Apenas para controle de versão.
common O problema não é específico de um determinado tipo de teste (por exemplo, uma falha nativa).
robo O problema é específico da execução do Robo.

TestTiming

O tempo de teste é dividido para conhecer as fases.

representação JSON
{
  "testProcessDuration": {
    object (Duration)
  }
}
Campos
testProcessDuration

object ( Duration )

Quanto tempo levou para executar o processo de teste.

  • Em resposta: presente se previamente definido.
  • Na solicitação de criação/atualização: opcional

ToolExecutionStep

Etapa de ferramenta genérica a ser usada para binários que não suportamos explicitamente. Por exemplo: executar cp para copiar artefatos de um local para outro.

representação JSON
{
  "toolExecution": {
    object (ToolExecution)
  }
}
Campos
toolExecution

object ( ToolExecution )

Uma execução da ferramenta.

  • Em resposta: presente se definido pela solicitação de criação/atualização
  • Na solicitação de criação/atualização: opcional

Várias Etapas

Detalhes quando várias etapas são executadas com a mesma configuração de um grupo.

representação JSON
{
  "primaryStepId": string,
  "multistepNumber": integer,
  "primaryStep": {
    object (PrimaryStep)
  }
}
Campos
primaryStepId

string

Id da etapa principal (original), que pode ser esta etapa.

multistepNumber

integer

Int exclusivo dado a cada etapa. Varia de 0(inclusive) ao número total de passos(exclusivo). O passo primário é 0.

primaryStep

object ( PrimaryStep )

Presente se for uma etapa primária (original).

Etapa Primária

Armazena o status do teste de acúmulo de várias etapas que foram executadas como um grupo e o resultado de cada etapa individual.

representação JSON
{
  "rollUp": enum (OutcomeSummary),
  "individualOutcome": [
    {
      object (IndividualOutcome)
    }
  ]
}
Campos
rollUp

enum ( OutcomeSummary )

Status de teste cumulativo de várias etapas que foram executadas com a mesma configuração de um grupo.

individualOutcome[]

object ( IndividualOutcome )

Id da etapa e resultado de cada etapa individual.

Resultado individual

ID da etapa e resultado de cada etapa individual que foi executada como um grupo com outras etapas com a mesma configuração.

representação JSON
{
  "stepId": string,
  "outcomeSummary": enum (OutcomeSummary),
  "multistepNumber": integer,
  "runDuration": {
    object (Duration)
  }
}
Campos
stepId

string

outcomeSummary

enum ( OutcomeSummary )

multistepNumber

integer

Int exclusivo dado a cada etapa. Varia de 0(inclusive) ao número total de passos(exclusivo). O passo primário é 0.

runDuration

object ( Duration )

Quanto tempo levou para esta etapa ser executada.

Métodos

accessibilityClusters

Lista clusters de acessibilidade para uma determinada etapa

Pode retornar qualquer um dos seguintes códigos de erro canônicos:

  • PERMISSION_DENIED - se o usuário não estiver autorizado a ler o projeto
  • INVALID_ARGUMENT - se a solicitação for malformada
  • FAILED_PRECONDITION - se um argumento na solicitação for inválido; por exemplo

create

Cria uma Etapa.

get

Obtém um passo.

getPerfMetricsSummary

Recupera um PerfMetricsSummary.

list

Lista as etapas para uma determinada execução.

patch

Atualiza uma Etapa existente com a entidade parcial fornecida.

publishXunitXmlFiles

Publique arquivos xml em uma etapa existente.