Feather Background Waves Background
Ir para o conteúdo principal
Feather Background Waves Background
Feather Background Waves Background
  1. JMeter em Português/

Extractor de JSON JMESPath

intermediário - This article is part of a series.

JSON

O que é JMESPath ?>

O que é JMESPath ? #

JMESPath foi desenvolvido em 2012 por James Saryerwinnie, engenheiro da Mozilla Corporation, como uma alternativa à JSONPath para acessar e manipular dados em documentos JSON. A principal motivação pela criação de JMESPath era criar um ferramenta mais eficiente e flexível para acessar os dados em documentos JSON que são amplamente utilizados em aplicações web e mobile.

Em anos seguintes, JMESPath se tornou cada vez mais popular entre os desenvolvedores trabalhando com aplicações web e mobile que usam JSON como formato de troca de dados. Ele foi integrado em várias bibliotecas populares de Python e ferramentas, tornando-se um instrumento essencial para gerenciamento da infraestrutura na nuvem. Em 2017, JMESPath se tornou uma iniciativa aberta sob o projeto Python Projects. Desde então, foi adotado por várias bibliotecas e ferramentas de Python como AWS CLI e Terraform, sendo usado em diversas situações, desde análise de dados até integração de sistemas e automação de processos.

Agora, JMESPath continua sendo uma ferramenta popular para acessar e manipular dados em documentos JSON usados em aplicações web e mobile. É compatível com uma ampla variedade de linguagens de programação e frameworks, e é usado em várias contextos como gerenciamento de infraestrutura na nuvem, análise de dados e automação de processos.

O que é JSON?>

O que é JSON? #

JSON (JavaScript Object Notation) é um formato de texto leve para eficiente troca de dados. É comumente usado para transmitir informações entre o aplicativo cliente e servidor ou para transmitir dados entre aplicações. JSON representa os dados em forma de objetos níveis e listas de objetos, usando uma sintaxe clara e fácil de ler baseada em chaves { } para definir objetos e parênteses [ ] para definir listas.

{
  "nombre": "Ana",
  "edad": 28,
  "direccion": {
    "calle": "Calle Principal",
    "ciudad": "Ciudad de México",
    "estado": "Ciudad de México",
    "codigo_postal": "12345"
  },
  "intereses": ["leer","viajar","cocinar"]
}
AtributoDescriçãoRequerido
NomeDescriptive name for this element that is displayed in the tree.Não
Aplicar a estaÓtimo quando usado com mapeadores que podem gerar sub-samplerias, como sampler HTTP com recursos incorporados, leitor de e-mail ou controller de transação gerado por samples.

Só para amostras principais: aplica-se apenas às amostras principais
Só para amostras sub-amostras: aplica-se apenas às amostras sub-amostras
Principais e sub-amostras: aplica-se a ambos
Nome da variável usado na JMeter: extração será aplicada ao conteúdo da variável nomeada
Sim
Nome da Variável CriadaO nome da variável do JMeter onde o resultado será armazenado.Sim
Expressões JMESPathConsulta elemento usando a linguagem JMESPath. Pode retornar o resultado correspondente.

0: seleção aleatória
-1: todos os resultados (padrão), nomeado como <nome da variável>_N onde N é de 1 a número de resultados
X: extraia o _X_º resultado (onde X é maior que o número de matches, valor padrão)
Não
Número Padrão de Matches (-1 para aleatório)Se a consulta JMESPath tem muitos resultados, você pode escolher quais eles serão extraídos como variáveis:

0: seleção aleatória
-1: todos os resultados (padrão), nomeado como <nome da variável>_N onde N é de 1 a número de resultados
X: extraia o _X_º resultado (onde X é maior que o número de matches, valor padrão)
Não
Valor PadrãoValor padrão retornado quando não houver correspondência. Também retorna se o nó tiver valor nulo e opção fragmentação não selecionada.Não

jmeter-1

{
  "nombre": "Ana",
  "edad": 28,
  "direccion": {
    "calle": "Calle Principal",
    "ciudad": "Ciudad de México",
    "estado": "Ciudad de México",
    "codigo_postal": "12345"
  },
  "intereses": ["leer","viajar","cocinar"]
}
nombre              //Ana
edad                //28
direccion.calle     //Calle Principal
direccion.codigo_postal    //12345
direccion.ciudad    //Ciudad de México
hobbies             //["leer","viajar","cocinar"]
Quais outros exemplos de uso o JMESPath pode ter?>

Quais outros exemplos de uso o JMESPath pode ter? #

Vamos considerar um exemplo mais complexo, como o seguinte:

[{
  "name": "John Doe",
  "age": 35,
  "address": {
    "street": "123 Main St",
    "city": "Anytown",
    "state": "WA"
  },
  "phoneNumbers": [
    {
      "type": "mobile",
      "number": "555-551-1234"
    },
    {
      "type": "home",
      "number": "555-552-5678"
    }
  ],
  "email": "john.doe@example.com"
},{
  "name": "Peter Doe",
  "age": 34,
  "address": {
    "street": "123 Second St",
    "city": "RacconCity",
    "state": "TX"
  },
  "phoneNumbers": [
    {
      "type": "mobile",
      "number": "555-553-1234"
    },
    {
      "type": "home",
      "number": "555-554-5678"
    }
  ],
  "email": "peter.doe@example.com"
},{
  "name": "Rick Doe",
  "age": 36,
  "address": {
    "street": "123 Third St",
    "city": "Springfield",
    "state": "NJ"
  },
  "phoneNumbers": [
    {
      "type": "mobile",
      "number": "555-555-1234"
    },
    {
      "type": "home",
      "number": "555-556-5678"
    }
  ],
  "email": "rick.doe@example.com"
}]

For this example, suppose we want to evaluate and extract the following data:

ExpressionResult
[*].namereturns all the names of the people.
[0].phoneNumbers[0].numberreturns the mobile phone number of the first phoneNumbers object.
[?address.state=='WA'].namereturns the names of people whose state is WA.
[*].phoneNumbers[?type=='mobile'].numberreturns the mobile phone numbers of the phoneNumbers objects.
length([*].phoneNumbers[?type=='home'])returns the number of phoneNumbers objects of type home.
sort_by(@, &age)[0].nameReturns the name of the youngest person.
sort_by(@, &age)[-1].nameReturns the name of the oldest person.
max_by(@, &age).nameReturns the name of the oldest person.
min_by(@, &age).nameReturns the name of the youngest person.
[*].name | sort(@)Returns a list of people’s names in alphabetical order.
sum([*].age)Returns the sum of all ages.
length([*].phoneNumbers)Returns the number of phone numbers.
join(', ', [*].phoneNumbers[].number)Returns a string containing a list of all phone numbers.
[?age >= `35` ]Returns the names of people whose age is greater than 35.
[?age >= `35`] | [?address.state == ‘WA’].nameReturns the names of people over the age of 35 who live in WA.
[?contains(email,'john')].email | [0]Returns the email address of the person whose name contains john.
[?contains(name, 'Doe')].phoneNumbers[].number | [1]Returns the second phone number of people whose name contains Doe.
[?address.state=='TX'].address.city | sort(@) | [0]Returns the name of the smallest city in Texas.
[*].name | reverse(@)Returns the names of people from oldest to youngest.
[*].age | sum(@)returns the sum of all ages.

Para avaliar essas frases, recomendo usar um receptor Visualizar resultado árvore e utilizar a vista em Tester JSON JMESPath. Introduza a frase no campo Expressão JMESPath, então clique no botão Testar.

jmeter-2

Conclusão>

Conclusão #

JMESPath é um ferramenta muito poderosa para extrair valores, múltiplos valores, avaliação ou execução de funções dos valores para satisfazer uma ou mais condições, sempre lembre-se de praticar antes de desenvolver sua frase ou expressão. É bom verificar as condições com diferentes tipos de respostas para obter resultados conclusivos. Precisa praticar até a próxima!



intermediário - This article is part of a series.