teste

Uso

test: historic_revenue_is_accurate {
  explore_source:  orders {
    column:  total_revenue {
      field:  orders.total_revenue 
    }
    filters: [orders.created_date:  "2017"]
  }
  assert:  revenue_is_expected_value {
    expression: ${orders.total_revenue} = 626000 ;;
  }
}
Hierarquia
test

- ou -

test

- ou -

test
Valor padrão
Nenhum

Aceita
O identificador do teste de dados, além de subparâmetros que definem as declarações e a consulta do teste.

Definição

O Looker tem o validador do LookML para verificar se o código LookML é sintaticamente válido e o validador de conteúdo para verificar as referências de objetos entre o conteúdo e o modelo.

Além desses validadores, o parâmetro test permite validar a lógica do seu modelo. Para cada teste de dados, você cria uma consulta e uma instrução de asserção yesno. O teste de dados executa a consulta de teste e verifica se a declaração é verdadeira para cada linha da consulta. Se a instrução de declaração retornar yes para cada linha da consulta de teste, o teste de dados será aprovado.

Se as configurações do projeto estiverem definidas para exigir que os testes de dados sejam aprovados antes da implantação em produção e se o projeto tiver um ou mais parâmetros test, o IDE vai apresentar o botão Executar testes depois que você confirmar as mudanças no projeto. Os desenvolvedores de LookML precisam executar os testes de dados antes de implantar as mudanças na produção.

Independente de o projeto exigir testes de dados antes da implantação em produção, um desenvolvedor do LookML no modo de desenvolvimento pode executar testes de dados a qualquer momento para verificar a lógica do modelo.

É possível criar testes de dados em arquivos de modelo, arquivos de visualização ou em arquivos de teste de dados separados e dedicados. Ao usar um arquivo dedicado para hospedar seus testes de dados, lembre-se de include o arquivo de teste de dados em qualquer arquivo de modelo ou de visualização em que você queira executar os testes.

Um teste de dados não pode ter o mesmo nome e explore_source de outro teste de dados no mesmo projeto. Se você estiver usando o mesmo explore_source para vários testes de dados no seu projeto, verifique se os nomes dos testes são exclusivos.

O parâmetro test tem os seguintes subparâmetros:

  • explore_source: define a consulta a ser usada no teste de dados.
  • assert: define uma expressão do Looker executada em todas as linhas da consulta de teste para verificar os dados.

Depois de definir a LookML para o teste, execute o teste de dados para verificar se ele funciona corretamente e se a lógica do modelo passa no teste. Para isso, você precisa estar no Modo de desenvolvimento.

Há várias maneiras de iniciar testes de dados para um projeto:

  1. Se as configurações do projeto estiverem configuradas para exigir que os testes de dados sejam aprovados antes de implantar os arquivos em produção, o IDE vai apresentar o botão Executar testes depois que você confirmar as mudanças no projeto. Isso vai executar todos os testes do projeto, não importa qual arquivo os defina. É preciso passar nos testes de dados antes de implantar as mudanças na produção.
  2. No painel Integridade do projeto, selecione o botão Executar testes de dados. Isso vai executar todos os testes de dados no seu projeto, não importa qual arquivo defina o teste.
  3. Selecione a opção Executar testes de LookML no menu do arquivo. Isso vai executar apenas os testes definidos no arquivo atual.

Depois de executar os testes de dados, o painel Integridade do projeto vai mostrar o progresso e os resultados.

Selecione o link Consulta de análise detalhada para cada resultado do teste e abra uma análise detalhada com a consulta definida no teste de dados.

explore_source

O parâmetro explore_source em um teste de dados usa a mesma sintaxe e lógica do parâmetro explore_source de uma tabela derivada. A única diferença é que o explore_source de um teste de dados não é compatível com os subparâmetros derived_column, bind_filters e bind_all_filters.

Dica útil: uma maneira fácil de conseguir o LookML explore_source é usar uma Análise para criar sua consulta. Na Análise, selecione Receber LookML no menu de engrenagem da Análise e clique na guia Tabela derivada para receber o LookML da consulta. Consulte a documentação sobre como criar tabelas derivadas nativas para mais informações.

Observe o seguinte para o explore_source de um teste de dados:

  • A consulta explore_source de um teste de dados é uma consulta padrão do Looker, ou seja,tem um limite de 5.000 linhas.explore_source Verifique se a consulta não excede 5.000 linhas para receber um conjunto de resultados completo para teste. É possível incorporar filtros ou classificação no seu explore_source para reduzir o número de linhas na consulta ou trazer as linhas relevantes para a parte de cima.

  • Um explore com extension: required não pode ser usado como um explore_source para um teste de dados. O validador do LookML vai gerar um erro informando que não foi possível encontrar o explore_source.

assert

O subparâmetro assert define os critérios pelos quais o resultado da consulta explore_source é considerado válido. O subparâmetro expression aceita uma expressão do Looker que resulta em um yesno (booleano). Depois que a consulta explore_source é executada, a expressão da asserção é avaliada para cada linha do conjunto de resultados da consulta. Se houver uma resposta no para qualquer linha da consulta, o teste de dados vai falhar. Se a consulta tiver erros, o teste também vai falhar.

Um teste pode ter várias declarações assert. Para que o teste seja aprovado, cada declaração precisa ser verdadeira para todas as linhas da consulta explore_source.

Dica útil: use a caixa de diálogo cálculos de tabela para testar a sintaxe de expressão do Looker a ser usada no parâmetro expression do teste.

Para uso em testes de dados, os campos na expressão do Looker precisam estar totalmente no escopo, ou seja, especificados usando o formato view_name.field_name. Por exemplo, a expressão a seguir declara o campo como aircraft_engine_types.aircraft_engine_type_id:

assert: engine_type_id_not_null {
  expression: NOT is_null(${aircraft_engine_types.aircraft_engine_type_id}) ;;
}

Exemplos

Garantir que uma chave primária seja única

O teste de dados a seguir cria uma consulta da análise detalhada orders e define um expression para testar se os IDs de pedido são exclusivos no conjunto de resultados. A consulta explore_source cria uma contagem de linhas associadas a cada ID no banco de dados. Se o ID for exclusivo, o banco de dados terá apenas uma linha para ele. Além disso, ela classifica pela contagem e limita o conjunto de resultados a uma linha. Assim, a resposta da consulta será o ID com a maior contagem. Se algum ID tiver uma contagem maior que 1, sabemos que há várias linhas para esse ID e, portanto, ele não é exclusivo. Se for esse o caso, o teste de dados vai falhar.

test: order_id_is_unique {
  explore_source: orders {
    column: id {}
    column: count {}
    sorts: [orders.count: desc]
    limit: 1
  }
  assert: order_id_is_unique {
    expression: ${orders.count} = 1 ;;
  }

Verificar um valor conhecido

O próximo teste de dados verifica se o valor da receita de 2017 é sempre US $626.000. Neste conjunto de dados, esse é um valor conhecido que nunca deve mudar.

test: historic_revenue_is_accurate {
  explore_source: orders {
    column: total_revenue {
      field: orders.total_revenue
    }
    filters: [orders.created_date: "2017"]
  }
  assert: revenue_is_expected_value {
    expression: ${orders.total_revenue} = 626000 ;;
  }
}

Confirmar que não há valores nulos

O próximo teste de dados verifica se não há valores nulos nos dados. Esse explore_source usa um sort para garantir que todos os valores nulos sejam retornados na parte de cima da consulta. A classificação de valores nulos pode variar de acordo com o dialeto. O teste a seguir usa desc: yes como exemplo.


test: status_is_not_null {
  explore_source: orders {
    column: status {}
    sorts: [orders.status: desc]
    limit: 1
  }
  assert: status_is_not_null {
    expression: NOT is_null(${orders.status}) ;;
  }
}