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, a execução de um executor de teste ou a execução de um compilador).

As etapas podem se sobrepor (por exemplo, duas etapas podem ter o mesmo horário de início se algumas operações forem realizadas em paralelo).

Aqui está um exemplo, vamos considerar que temos uma construção contínua executando um executor de teste para cada iteração. O fluxo de trabalho seria semelhante a: - o usuário cria uma Execução com id 1 - o usuário cria um TestExecutionStep com id 100 para Execução 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

Uma Etapa pode ser atualizada até que seu estado seja definido como COMPLETE, momento em que ela 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 definido
creationTime

object ( Timestamp )

A hora em que a etapa foi criada.

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

object ( Timestamp )

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

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

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

string

Um nome curto e legível para ser exibido na IU. Máximo de 100 caracteres. Por exemplo: construção limpa

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

  • Em resposta: sempre definido
  • Na solicitação de criação: sempre definido
  • 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 Step com estado definido como COMPLETE. O estado só pode ser definido como COMPLETE uma vez. Um PRECONDITION_FAILED será retornado se o estado for definido como COMPLETE diversas 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 definido
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 para 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
  • Na solicitação 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 que contém uma lista de pares "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 definição de dimensão definida, esse campo permitirá que o filho especifique os valores das dimensões.

As chaves devem corresponder exatamente à definição de dimensão da execução.

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

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

Se a etapa não participar de nenhuma dimensão da matriz, poderá 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 desta execução já tiver o mesmo nome e dimensionValue, mas for diferente em outros campos de dados, por exemplo, o campo da etapa for diferente.

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

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

Um objeto que contém uma lista de pares "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 ecompleteTime quando a etapa for definida para o estado COMPLETE. Em alguns casos, é apropriado definir este valor separadamente: Por exemplo, se uma etapa for criada, mas a operação que ela representa estiver na fila por alguns minutos antes de ser executada, seria apropriado não incluir o tempo gasto na fila em seu runDuration.

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

  • Em resposta: presente se definido anteriormente; 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, falhas de infraestrutura não serão cobradas pelo uso do dispositivo.

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

  • Em resposta: presente se definido anteriormente.
  • 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 de qual grupo esta etapa faz parte. Ele também identifica a 'etapa primária' do grupo que indexa todos os membros do grupo.

  • Em resposta: presente se definido anteriormente.
  • 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 uma das seguintes:

testExecutionStep

object ( TestExecutionStep )

Uma execução de um executor de teste.

toolExecutionStep

object ( ToolExecutionStep )

Uma execução de uma ferramenta (usada para etapas que não oferecemos suporte explícito).

Etapa de execução de teste

Uma etapa que representa a execução de testes.

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

Os usuários também podem adicionar resultados de testes 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 do conteúdo geral do conjunto de testes. Isso pode ser analisado a partir do log XML do xUnit pelo servidor ou carregado diretamente pelo usuário. Essas referências só devem ser chamadas quando os conjuntos de testes 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 (use o método personalizadopublishXunitXmlFiles)
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 foi aprovado.

  • 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 travou 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 create ou update
  • Na solicitação de criação/atualização: opcional
testTiming

object ( TestTiming )

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

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

Execução de ferramenta

Uma execução de uma ferramenta arbitrária. Pode ser um executor de testes ou uma ferramenta que copia artefatos ou implanta 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 pela 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 ferramenta sair 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 ferramentas por etapa é 1.000.

  • 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 for encerrada.

  • 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 é 1.000.

  • 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

FerramentaExitCode

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 0 significa que a execução foi bem-sucedida.

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

Problema de teste

Um problema detectado ocorrendo 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 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 sempre haver 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 valores Any na forma de funções utilitárias ou métodos gerados adicionais do tipo Any.

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

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

Exemplo 2: Empacotar 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: Empacote e descompacte uma mensagem em Python.

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

Exemplo 4: empacotar 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 de pacote fornecidos pela biblioteca protobuf usarão, por padrão, 'type.googleapis.com/full.type.name' como o URL do tipo e os métodos de descompactação usarão apenas o nome do tipo totalmente qualificado após o último '/' no URL do tipo, por exemplo, "foo.bar.com/x/yz" produzirá o nome do tipo "yz".

JSON

A representação JSON de um valor Any usa a representação regular da mensagem incorporada e desserializada, com um campo adicional @type que contém o tipo 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 incorporada 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 em formato canônico (por exemplo, "." inicial não é aceito).

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

  • 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 pré-compilá-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 tipos com versão para gerenciar alterações significativas.)

Observação: esta 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 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 padrão não especificada. Não use. Apenas para versionamento.
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 Questão crítica.

Tipo

Tipos de problemas.

Enums
unspecifiedType Tipo padrão não especificado. Não use. Apenas para versionamento.
fatalException O 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 Robo não foi totalmente executado.
completeRoboScriptExecution Um script Robo foi executado completa e com sucesso.
failedToInstall O APK não foi instalado.
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 da IU do Android.
encounteredLoginScreen O rastreamento Robo encontrou pelo menos uma tela de login provável.
performedGoogleLogin Robo fez login no Google.
iosException O aplicativo iOS travou com uma exceção.
iosCrash O aplicativo iOS travou sem exceção (por exemplo, foi morto).
performedMonkeyActions O rastreamento do Robo envolveu a realizaçã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 IU.
insufficientCoverage Robo não rastreou algumas partes potencialmente importantes do aplicativo.
inAppPurchases O rastreamento do 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 IU é maior que o limite
blankScreen Tela em branco é encontrada no rastreamento do Robo
overlappingUiElements Elementos de UI sobrepostos são encontrados no rastreamento Robo
unityException Uma exceção do Unity não detectada foi detectada (elas não travam aplicativos).
deviceOutOfMemory Dispositivo com falta de memória foi detectado
logcatCollectionError Problemas detectados ao coletar logcat
detectedAppSplashScreen Robo detectou uma tela inicial fornecida pelo aplicativo (em comparação com a tela inicial do sistema operacional Android).

Categoria

Categorias de problemas.

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

Tempo de teste

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 definido anteriormente.
  • Na solicitação de criação/atualização: opcional

Etapa de execução da ferramenta

Etapa genérica da ferramenta a ser usada para binários que não oferecemos suporte explícito. 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 de 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 da etapa primária (original), que pode ser esta etapa.

multistepNumber

integer

Int exclusivo dado a cada etapa. Varia de 0 (inclusive) ao número total de etapas (exclusivo). A etapa principal é 0.

primaryStep

object ( PrimaryStep )

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

Etapa Primária

Armazena o status do teste de rollup de diversas 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 do teste de rollup de diversas 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 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 etapas (exclusivo). A etapa principal é 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 estiver malformada
  • FAILED_PRECONDITION - se um argumento na solicitação for inválido; por exemplo

create

Cria uma etapa.

get

Dá 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.