jMeter - Expressões regulares
Expressões regulares são usadas para pesquisar e manipular texto, com base em padrões. O JMeter interpreta formas de expressões regulares ou padrões usados em todo o plano de teste do JMeter, incluindo o software de correspondência de padrões Apache Jakarta ORO .
Com o uso de expressões regulares, certamente podemos economizar muito tempo e obter maior flexibilidade ao criar ou aprimorar um Plano de Teste. As expressões regulares fornecem um método simples para obter informações das páginas quando é impossível ou muito difícil prever um resultado.
Um exemplo de uso padrão do uso de expressões é obter um ID de sessão da resposta do servidor. Se o servidor retornar uma chave de sessão exclusiva, podemos obtê-la facilmente usando expressões em nosso script de carregamento.
Para usar expressões regulares em seu plano de teste, você precisa usar o Regular Expression Extractor do JMeter. Você pode colocar expressões regulares em qualquer componente em um Plano de Teste.
Vale ressaltar a diferença entre contains e matches, conforme usado no elemento de teste Response Assertion -
containssignifica que a expressão regular correspondeu a pelo menos alguma parte do destino, então 'alfabeto' "contém" 'ph.b.' porque a expressão regular corresponde à substring 'phabe'.
matchessignifica que a expressão regular correspondeu a todo o destino. Portanto, o 'alfabeto' é "combinado" por 'al. * T'.
Suponha que você queira corresponder à seguinte parte de uma página da web -
name = "file" value = "readme.txt"
E você deseja extrair readme.txt. Uma expressão regular adequada seria -
name = "file" value = "(.+?)">
Os caracteres especiais acima são -
( e ) - eles incluem a parte da string de correspondência a ser retornada
. - corresponde a qualquer personagem
+ - uma ou mais vezes
? - pare quando a primeira partida for bem-sucedida
Criar plano de teste JMeter
Vamos entender o uso de expressões regulares no Extrator de Expressão Regular - um Elemento Pós-Processador escrevendo um plano de teste. Este elemento extrai texto da página atual usando uma Expressão Regular para identificar o padrão de texto com o qual um elemento desejado está em conformidade.
Primeiro, escrevemos uma página HTML com uma lista de pessoas e seus IDs de e-mail. Nós o implantamos em nosso servidor Tomcat. O conteúdo de html (index.html) é o seguinte -
<html>
<head>
</head>
<body>
<table style = "border: 1px solid #000000;">
<th style = "border: 1px solid #000000;">ID</th>
<th style = "border: 1px solid #000000;">name</th>
<th style = "border: 1px solid #000000;">Email</th>
<tr>
<td id = "ID" style = "border: 1px solid #000000;">3</td>
<td id = "Name" style = "border: 1px solid #000000;">Manisha</td>
<td id = "Email" style = "border: 1px solid #000000;">[email protected]</td>
</tr>
<tr>
<td id = "ID" style = "border: 1px solid #000000;">4</td>
<td id = "Name" style = "border: 1px solid #000000;">joe</td>
<td id = "Email" style = "border: 1px solid #000000;">[email protected]</td>
</tr>
</table>
</body>
</html>
Ao implantá-lo no servidor tomcat, esta página seria semelhante à mostrada na imagem a seguir -
Em nosso plano de teste, selecionaremos a pessoa na primeira linha da tabela de pessoas vista na página de lista de pessoas acima. Para capturar o ID dessa pessoa, vamos primeiro determinar o padrão onde encontraremos a pessoa na segunda linha.
Como pode ser visto no instantâneo a seguir, o ID da segunda pessoa é circundado por <td id = "ID"> e </ td>, e é a segunda linha de dados com este padrão. Podemos usar isso para corresponder ao padrão exato do qual queremos extrair informações. Como queremos extrair duas informações desta página, o ID da pessoa e o nome da pessoa, os campos são definidos da seguinte forma -
Inicie o JMeter, adicione um grupo de threads Test Plan → Add→ Threads(Users)→ Thread Group.
Em seguida, adicione uma solicitação HTTP de amostrador, selecione o plano de teste, clique com o botão direito Add → Sampler → HTTP Request e insira os detalhes conforme mostrado abaixo -
Name - Gerenciar
Server Name or IP - localhost
Port Number - 8080
Protocol - Manteremos em branco, o que significa que queremos HTTP como protocolo.
Path - jmeter / index.html
Em seguida, adicione um extrator de expressão regular. Selecione o HTTP Request Sampler (Manage), clique com o botão direitoAdd → Post Processor → Regular Expression Extractor.
A tabela a seguir fornece uma descrição dos campos usados na captura de tela acima -
Sr. Não | Campo e Descrição |
---|---|
1 | Reference Name O nome da variável na qual o teste extraído será armazenado (refname). |
2 | Regular Expression O padrão com o qual o texto a ser extraído será correspondido. Os grupos de texto que serão extraídos são delimitados pelos caracteres '(' e ')'. Usamos '. +?' para indicar uma única instância do texto entre as marcas <td ..> .. </td>. Em nosso exemplo, a expressão é - <td id = "ID"> (+?) </td> \ s * <td id = "Name"> (+?) </td> \ s * |
3 | Template Cada grupo de texto extraído colocado como membro da variável Pessoa, seguindo a ordem de cada grupo de padrão delimitado por '(' e ')'. Cada grupo é armazenado como refname_g #, onde refname é a string que você inseriu como o nome de referência e # é o número do grupo. $ 1 $ a refere-se ao grupo 1, $ 2 $ a refere-se ao grupo 2, etc. $ 0 $ refere-se a tudo o que a expressão inteira corresponde. Neste exemplo, o ID que extraímos é mantido em Person_g1, enquanto o valor de Name é armazenado em Person_g2. |
4 | Match No. Como planejamos extrair apenas a segunda ocorrência desse padrão, correspondendo ao segundo voluntário, usamos o valor 2. O valor 0 faria uma correspondência aleatória, enquanto um valor negativo precisa ser usado com o Controlador ForEach. |
5 | Default Se o item não for encontrado, este será o valor padrão. Este é um campo opcional. Você pode deixar em branco. |
Adicione um ouvinte para capturar o resultado deste Plano de Teste. Clique com o botão direito do mouse no Grupo de Threads e selecione a opção Adicionar → Listener → Exibir Árvore de Resultados para adicionar o listener.
Salve o plano de teste como reg_express_test.jmx e execute o teste. A saída seria um sucesso, conforme mostrado na imagem a seguir -