Explorando a JSON Library no Robot Framework

A JSON Library é uma biblioteca poderosa que permite a manipulação e validação de dados no formato JSON em seus testes automatizados com o Robot Framework. Neste post, iremos explorar suas principais keywords e fornecer exemplos práticos para que você possa utilizá-la de forma eficiente em seus projetos.

Documentação da JSON Library

Clique aqui para ter acesso a documentação da JSON Library.

Instalação e Importação da JSON Library

Antes de começarmos a usar a JSON Library, é necessário instalá-la e importá-la no seu projeto do Robot Framework. Lembrando que sempre usamos o Poetry para realizar as instalações das bibliotecas, caso ainda não tenha o Poetry instalado ou não conheça, clique aqui.

  • Instalação
poetry add robotframework-jsonlibrary

  • Importação
*** Settings ***
Library  JSONLibrary

Keywords da JSON Library

Vamos dar uma olhada nas keywords fornecidas pela JSON Library e entender como utilizá-las:

Add Object To Json

Essa keyword permite adicionar um objeto de dicionário ou lista a um objeto JSON existente usando uma expressão json path.

No exemplo abaixo, criamos dois objetos JSON: um que representa os detalhes de um produto e outro contendo avaliações de usuários. Em seguida, utilizamos a keyword Add Object To Json para adicionar as avaliações ao objeto do produto. O resultado é o objeto JSON ${avaliacao_produto} contendo as informações do produto junto com as avaliações na chave “avaliacoes“.

*** Settings ***
Library    JSONLibrary

*** Test Cases ***
Adicionar Avaliações ao JSON de Produto
    ${produto}    Evaluate    {"nome": "Produto A", "preco": 100}
    ${avaliacoes}    Evaluate    {"avaliacoes": [{"usuario": "João", "nota": 4}, {"usuario": "Maria", "nota": 5}]}
    
    ${avaliacao_produto}  Add Object To Json    ${produto}    $    ${avaliacoes}
    Log To Console   ${\n}${avaliacao_produto}
    
    # Agora o objeto JSON ${avaliacao_produto} compõe a raiz do objeto JSON ${produto}

==============================================================================
JSON Library.Jsonlibrary                                                      
==============================================================================
Adicionar Avaliações ao JSON de Produto                               ...
{'nome': 'Produto A', 'preco': 100, 'avaliacoes': [{'usuario': 'João', 'nota': 4}, {'usuario': 'Maria', 'nota': 5}]}
Adicionar Avaliações ao JSON de Produto                               | PASS |
------------------------------------------------------------------------------

  • Argumentos:
    • json_object: O JSON como um objeto de dicionário no qual o objeto será adicionado.
    • json_path: A expressão json path que identifica o local onde o objeto será adicionado.
    • object_to_add: O objeto de dicionário ou lista que será adicionado ao json_object na posição especificada pela json path.
  • Retorno: Retorna o novo objeto JSON com o objeto adicionado.

Convert Json To String

Essa keyword converte um objeto JSON, representado por um objeto de dicionário, em uma string JSON.

No exemplo abaixo, criamos um objeto JSON ${detalhes_do_pedido} que representa os detalhes de um pedido. Em seguida, utilizamos a keyword Convert Json To String para converter o objeto JSON em uma string JSON ${json_string}.

*** Settings ***
Library    JSONLibrary

*** Test Cases ***
Enviar Detalhes do Pedido
    ${detalhes_do_pedido}  Evaluate    {"pedido_id": "123456", "produto": "Camiseta", "quantidade": 2, "valor_total": 50.00}
    ${type_dict}  Evaluate    type($detalhes_do_pedido)
    Log To Console    ${\n}Tipo do objeto antes da converção: ${type_dict}


    ${json_string}    Convert Json To String    ${detalhes_do_pedido}
    ${type_str}  Evaluate    type($json_string)
    Log To Console    Tipo do objeto depois da converção: ${type_str}

==============================================================================
JSON Library.Jsonlibrary                                                      
==============================================================================
Enviar Detalhes do Pedido                                             ..
Tipo do objeto antes da converção: <class 'dict'>
...Tipo do objeto depois da converção: <class 'str'>
Enviar Detalhes do Pedido                                             | PASS |
------------------------------------------------------------------------------

  • Argumentos:
    • json_object: O JSON como um objeto de dicionário que será convertido em string.
  • Retorno: Retorna a nova string JSON.

Convert String To Json

Essa keyword converte uma string JSON em um objeto JSON, representado por um objeto de dicionário.

No exemplo abaixo, criamos uma string JSON ${json_string} representando os detalhes de um pedido. Em seguida, utilizamos a keyword Convert String To JSON para converter a string em um objeto JSON ${json_object}.

*** Settings ***
Library    JSONLibrary

*** Test Cases ***
Extrair Valor Total do Pedido
    ${json_string}    Set Variable    {"pedido_id": "123456", "produto": "Camiseta", "quantidade": 2, "valor_total": 50.00}
    ${type}  Evaluate    type($json_string)
    Log To Console    ${\n}Tipo do objeto depois da converção: ${type}

    ${json_object}    Convert String To JSON    ${json_string}
    ${type}  Evaluate    type($json_object)
    Log To Console    Tipo do objeto depois da converção: ${type}

==============================================================================
JSON Library.Jsonlibrary                                                      
==============================================================================
Extrair Valor Total do Pedido                                         ..
Tipo do objeto depois da converção: <class 'str'>
...Tipo do objeto depois da converção: <class 'dict'>
Extrair Valor Total do Pedido                                         | PASS |
------------------------------------------------------------------------------

  • Argumentos:
    • json_string: A string JSON que será convertida em objeto JSON.
  • Retorno: Retorna o novo objeto JSON.

Delete Object From Json

Essa keyword permite excluir um objeto ou elemento específico do JSON usando uma expressão json path.

No exemplo abaixo, criamos um objeto JSON ${produto} representando um produto com um nome e um preço. Em seguida, utilizamos a keyword Delete Object From Json para remover a chave “preco” do objeto JSON, armazenando o resultado em ${remove_preco}. Agora, temos o mesmo objeto JSON sem a informação de preço.

*** Settings ***
Library    JSONLibrary

*** Test Cases ***
Remover Preço do Produto
    ${produto}    Evaluate    {"nome": "Produto A", "preco": 100}
    ${remove_preco}  Delete Object From Json    ${produto}    $.preco
    Log To Console   ${\n}${remove_preco}

==============================================================================
JSON Library.Jsonlibrary                                                      
==============================================================================
Remover Preço do Produto                                              ..
{'nome': 'Produto A'}
Remover Preço do Produto                                              | PASS |
------------------------------------------------------------------------------

  • Argumentos:
    • json_object: O JSON como um objeto de dicionário do qual o objeto será excluído.
    • json_path: A expressão json path que identifica o local do objeto que será excluído.
  • Retorno: Retorna o novo objeto JSON após a exclusão.

Dump Json To File

Essa keyword permite gravar o JSON em um arquivo em um diretórios específico.

No exemplo abaixo, criamos um objeto JSON ${produto} representando um produto com um nome e um preço. Em seguida, utilizamos a keyword Dump Json To File para salvar o objeto JSON em um arquivo chamado “produtos.json“. Utilizamos uma estrutura TRY-EXCEPT para capturar e tratar possíveis erros caso a criação do arquivo falhe. Se a criação do arquivo for bem-sucedida, será exibida a mensagem “Arquivo JSON Criado Com Sucesso” no console. Caso ocorra algum erro durante a criação do arquivo, o erro será exibido no console.

*** Settings ***
Library    JSONLibrary

*** Test Cases ***
Remover Preço do Produto
    ${produto}    Evaluate    {"nome": "Produto A", "preco": 100}
    
    TRY
         Dump Json To File    ${CURDIR}${/}produtos.json    ${produto}
    EXCEPT  error
        Log To Console    error
    END
    
    Log To Console    Arquivo JSON Criado Com Sucesso

==============================================================================
JSON Library.Jsonlibrary                                                      
==============================================================================
Remover Preço do Produto                                              ..
Arquivo JSON Criado Com Sucesso
Remover Preço do Produto                                              | PASS |
------------------------------------------------------------------------------

  • Argumentos:
    • dest_file: O nome do arquivo de destino onde o JSON será gravado.
    • json_object: O JSON como um objeto de dicionário que será gravado no arquivo.
  • Retorno: Nenhum.

Get Value From Json

Essa keyword permite obter o valor de um elemento específico do JSON usando uma expressão json path.

No exemplo abaixo, utilizamos a keyword Get Value From Json para buscar o valor do campo “type” no array “topping” que tenha um “id” igual a 5002. O valor encontrado é armazenado na variável ${topping} e exibido no console.

*** Settings ***
Library    JSONLibrary

*** Test Cases ***
Coletando Valor Específico em um objeto Json

    ${product}  Catenate  {
    ...                    "id": "0001",
    ...                    "type": "donut",
    ...                    "batters": {
    ...                      "batter": [
    ...                        {
    ...                          "id": "1001",
    ...                          "type": "Regular"
    ...                        },
    ...                        {
    ...                          "id": "1002",
    ...                          "type": "Chocolate"
    ...                        }
    ...                      ]
    ...                    },
    ...                    "topping": [
    ...                      {
    ...                        "id": "5001",
    ...                        "type": "None"
    ...                      },
    ...                      {
    ...                        "id": "5002",
    ...                        "type": "Glazed"
    ...                      }
    ...                    ]
    ...                  }
    ${product}  Convert String To Json    ${product}
    
    ${topping}  Get Value From Json    ${product}    $.topping[?(@.id==5002)].type

    Log To Console    ${\n}O tipo do topping com id 5002 é: ${topping}

==============================================================================
JSON Library.Jsonlibrary                                                      
==============================================================================
Coletando Alguma coisa                                                ...
O tipo do topping com id 5002 é: ['Glazed']
Coletando Alguma coisa                                                | PASS |
------------------------------------------------------------------------------

  • Argumentos:
    • json_object: O JSON como um objeto de dicionário do qual o valor será extraído.
    • json_path: A expressão json path que identifica o local do valor que será obtido.
    • fail_on_empty (opcional): Quando definido como True, a keyword falhará nos casos de teste se nenhum valor for retornado pela expressão json path (padrão: False).
  • Retorno: Retorna uma lista de valores correspondentes à expressão json path.

Load Json From File

Essa keyword permite carregar um objeto JSON de um arquivo no sistema de arquivos.

No exemplo abaixo, usamos a keyword Load Json From File para ler o arquivo JSON de exemplo “json_example.json“. Em seguida, o conteúdo do arquivo é armazenado na variável ${json_obj}.

*** Settings ***
Library    JSONLibrary

*** Test Cases ***
Carregando Arquivo JSON
    ${json_obj}  Load Json From File    ${CURDIR}${/}json_example.json
    Log To Console    ${\n}${json_obj}

==============================================================================
JSON Library.Jsonlibrary                                                      
==============================================================================
Carregando Arquivo JSON                                               .
{'name': 'Vini', 'age': 34, 'year': 2023}
Carregando Arquivo JSON                                               | PASS |
------------------------------------------------------------------------------

  • Argumentos:
    • file_name: O caminho absoluto do arquivo JSON a ser carregado.
    • encoding (opcional): O formato de codificação do arquivo JSON (padrão: None).
  • Retorno: Retorna o objeto JSON como um objeto de dicionário.

Should Have Value In Json

Essa keyword verifica se um valor específico está presente no JSON usando uma expressão json path.

No exemplo abaixo, usamos a keyword Should Have Value In Json para verificar se o campo “preço” ($.preco) e o campo “total” ($.total) estão presentes no objeto JSON ${produto}.

*** Settings ***
Library    JSONLibrary

*** Test Cases ***
Remover Preço do Produto
    ${produto}    Evaluate    {"nome": "Produto A", "preco": 100}

    Should Have Value In Json    ${produto}    $.preco
    Should Have Value In Json    ${produto}    $.total

==============================================================================
JSON Library.Jsonlibrary                                                      
==============================================================================
Remover Preço do Produto                                              | FAIL |
No value found for path $.total
------------------------------------------------------------------------------

  • Argumentos:
    • json_object: O JSON como um objeto de dicionário no qual o valor será verificado.
    • json_path: A expressão json path que identifica o local do valor que será verificado.
  • Retorno: Nenhum.

Should Not Have Value In Json

Essa keyword verifica se um valor específico não está presente no JSON usando uma expressão json path.

No exemplo abaixo, usamos a keyword Should Not Have Value In Json para verificar se o campo “total” ($.total) e o campo “nome” ($.nome) não estão presentes no objeto JSON ${produto}.

*** Settings ***
Library    JSONLibrary

*** Test Cases ***
Remover Preço do Produto
    ${produto}    Evaluate    {"nome": "Produto A", "preco": 100}

    Should Not Have Value In Json    ${produto}    $.total
    Should Not Have Value In Json    ${produto}    $.nome

==============================================================================
JSON Library.Jsonlibrary                                                      
==============================================================================
Remover Preço do Produto                                              | FAIL |
Match found for parent $.nome: ['Produto A']
------------------------------------------------------------------------------

  • Argumentos:
    • json_object: O JSON como um objeto de dicionário no qual o valor será verificado.
    • json_path: A expressão json path que identifica o local do valor que será verificado.
  • Retorno: Nenhum.

Update Value To Json

Essa keyword permite atualizar um valor no JSON usando uma expressão json path.

No exemplo abaio, usamos a keyword Update Value To Json para atualizar o valor do preço de 100 para 500.25.

*** Settings ***
Library    JSONLibrary

*** Test Cases ***
Adicionar Avaliações ao JSON de Produto
    ${produto}    Evaluate    {"nome": "Produto A", "preco": 100}

    ${update_json}  Update Value To Json    ${produto}    $.preco    500.25
    Log To Console   ${\n}Novo preço: ${update_json}

==============================================================================
JSON Library.Jsonlibrary                                                      
==============================================================================
Adicionar Avaliações ao JSON de Produto                               ..
Novo preço: {'nome': 'Produto A', 'preco': '500.25'}
Adicionar Avaliações ao JSON de Produto                               | PASS |
------------------------------------------------------------------------------

Validate Json By Schema

Essa keyword valida um objeto JSON em relação a um esquema JSON usando uma expressão json path.

No exemplo abaixo, criamos o esquema ${schema} com a definição esperadas para o objeto JSON. Em seguida, criamos um objeto JSON chamado ${json_response} com as propriedades “name” e “age” preenchidas. Por fim, utilizamos a keyword Validate Json By Schema, verificamos se o objeto JSON ${json_response} está em conformidade com o esquema ${schema}.

*** Settings ***
Library    JSONLibrary

*** Test Cases ***
Testar Estrutura do JSON
    ${schema}    Evaluate    {"type": "object", "properties": {"name": {"type": "string"}, "age": {"type": "string"}}}
    ${json_response}    Evaluate    {"name": "John Doe", "age": 30}

    Validate Json By Schema    ${json_response}    ${schema}

==============================================================================
JSON Library.Jsonlibrary
==============================================================================
Testar Estrutura do JSON                                              | FAIL |
Json does not match the schema: {'type': 'string'}
------------------------------------------------------------------------------

  • Argumentos:
    • json_object: O JSON como um objeto de dicionário que será validado em relação ao esquema.
    • schema: O esquema JSON como um objeto de dicionário usado para validação.
  • Retorno: Nenhum.

Validate Json By Schema File

Essa keyword valida um objeto JSON em relação a um arquivo de esquema JSON usando uma expressão json path.

O exemplo abaixo é exatamente igual ao da keyword “Validade Json By Schema“. A diferença está que o esquema encontra-se e em um arquivo.

*** Settings ***
Library    JSONLibrary

*** Test Cases ***
Testar Estrutura do JSON
    ${json_response}    Evaluate    {"name": "John Doe", "age": 30}

    Validate Json By Schema File    ${json_response}    ${CURDIR}${/}schema.json

==============================================================================
JSON Library.Jsonlibrary                                                      
==============================================================================
Testar Estrutura do JSON                                              | FAIL |
Json does not match the schema: {'type': 'integer'}
------------------------------------------------------------------------------

  • Argumentos:
    • json_object: O JSON como um objeto de dicionário que será validado em relação ao esquema.
    • path_to_schema: O caminho do esquema JSON como um objeto de dicionário usado para validação.
  • Retorno: Nenhum.

Conclusão

Como podemos ver, a JSON Library é uma biblioteca extremamente útil, principalmente para a criação de scripts de testes de APIs, onde a manipulação de dados de objetos JSON é extremamente comum.


E aí! Já conheciam a JSON Library?

Deixa ai nos comentários.

Valeu

\o/

2 Comments.

Deixe um comentário

O seu endereço de e-mail não será publicado. Campos obrigatórios são marcados com *