Teste de Desempenho 1: Teoria de Desempenho e Uso de JMeter

1. Teoria dos testes de desempenho

1.1 Que tipo de sistema precisa de teste de desempenho

  1. Um sistema com um grande número de usuários e um alto PV
  2. Módulos/interfaces principais do sistema
  3. Lógica/algoritmos de negócios são mais complexos
  4. Plano de promoção/promoção de evento
  5. Novos sistemas, novos projetos
  6. Verificação e ajuste de problemas de desempenho on-line
  7. Seleção de nova tecnologia
  8. Avaliação e planejamento da capacidade de desempenho (para avaliação da capacidade, estimar a capacidade específica)
  9. Regressão diária do desempenho do sistema

1.2 Indicadores de teste de desempenho

  1. romances
  • No campo dos testes de desempenho, medir o desempenho de um sistema depende principalmente de quantos negócios o sistema pode controlar por unidade de tempo.
  • Uma transação representa uma operação comercial. Uma transação pode representar um negócio ou várias operações comerciais.
  1. TPS/QPS: Número de transações processadas por segundo
  2. Tempo de resposta
  • Tempo de resposta = tempo total de transmissão da rede + tempo de processamento comercial de cada componente

imagem.png

  • Tempo médio de resposta: o tempo médio gasto por todas as solicitações durante o teste. (PS: Quando o número de amostras é pequeno, se você usar o valor médio para observar os dados, a conclusão será anormal. Por exemplo, se uma interface for 1ms e outra interface for 1s, o valor médio não é razoável)
  1. Tempo de resposta SUPERIOR
  • Tp90 (tempo de resposta de 90%): 90% das solicitações demoram menos que um determinado tempo
  • Tp95 (tempo de resposta de 95%): 95% das solicitações demoram menos que um determinado tempo
  • Tp99 (tempo de resposta de 99%): 99% das solicitações demoram menos que um determinado tempo
  • Algoritmo: Classifique os tempos de resposta de todas as solicitações, de grande a pequeno, e calcule a proporção especificada de solicitações inferiores a um determinado tempo. Esta métrica mede o tempo gasto pela maioria das solicitações.

Tome Tp90 como exemplo

A interface A responde 10 vezes continuamente Solicitar número de série Tempo de resposta ms
1 800
2 600
3 500
4 900
5 950
6 750
7 400
8 500
9 300
10 500

Etapa 1: classifique a lista em ordem decrescente

A interface A responde 10 vezes continuamente Solicitar número de série Tempo de resposta ms
5 950
4 900
1 800
6 750
2 600
3 500
8 500
10 500
7 400
9 300

90%*10=9, do último ao nono estão todos abaixo de 900ms, então 900ms é usado como linha divisória

  1. O tempo de resposta geral das interfaces de alta frequência é de 200 ms, e o tempo de resposta geral das interfaces de baixa frequência é de 100 ms. As interfaces de alta frequência precisam ser otimizadas; os recursos estáticos não precisam ser testados e são todos armazenados em CDN.
  2. Número de usuários simultâneos/virtuais: o número de threads/processos simultâneos definidos na ferramenta de teste de estresse
  3. Taxa de sucesso: a taxa de sucesso da solicitação
  4. PV (Page View): o número de visitas à página/interface
  5. UV (Visitante Único): o visitante único diário da página/interface
  6. Taxa de transferência: a soma do tráfego upstream e downstream na rede
  • O throughput representa o tráfego da rede. Quanto maior o TPS (solicitações por segundo), maior será o throughput.

1.2.1 A relação entre TPS, tempo de resposta e número de simultaneidades

  • Antes que o sistema atinja um gargalo de desempenho, o TPS é diretamente proporcional ao número de simultaneidades.
  • Tempo de resposta (unidade: segundo) como premissa:
    • TPS = 1 / tempo de resposta * número simultâneo
    • TPS = número simultâneo / tempo de resposta
      • Depois de executar o teste de desempenho, você pode calcular o TPS a partir dos resultados. Se os valores não forem muito diferentes, os resultados serão apropriados.
      • Se houver várias interfaces simultaneamente, o tempo de resposta de cada interface precisará ser somado.
    • imagem.png

1.3 Indicadores de monitoramento de desempenho

  1. Nível de monitoramento do sistema operacional
  • Uso de CPU, uso de memória, E/S de rede (entrada/saída), disco (leitura/gravação/util)
  1. Monitoramento de middleware
  • Número de conexões, conexões longas e curtas, uso de memória
  1. Monitoramento da camada de aplicação
  • Status do thread, parâmetros JVM, frequência GC, bloqueios
  1. monitoramento da camada db
  • Número de conexões, bloqueios, cache, memória, eficiência SQL

1.4 Processo de teste de desempenho

  1. solicitando pesquisa
    1. Escopo da pesquisa
      • Antecedentes do projeto
      • Faixa de teste
      • Lógica de negócios e direção do fluxo de dados (dados: de onde vêm os dados, há algum cache e se deve chamar interfaces de terceiros, entender isso ajudará a solucionar problemas)
      • Arquitetura do sistema (arquitetura implantada e componentes usados, como balanceamento de carga, middleware de mensagens, balanceamento de carga, etc.)
      • Informações de configuração (configuração de hardware, como núcleos de CPU e memória, algumas empresas terão ambientes de teste de desempenho, tente mantê-los consistentes com online)
      • Quantidade de dados de teste (a magnitude deve ser consistente)
      • Dependências externas (simulação)
      • Cenários de uso do sistema, proporção de negócios (como interfaces de login e registro, cenários reais certamente terão cenários simultâneos, então a proporção de negócios pode ser entendida como quantas pessoas fazem login e quantas pessoas se registram ao mesmo tempo)
      • Volume diário de negócios (PV)
      • indicadores esperados
      • tempo on-line
  2. Plano de teste
    1. Descrição do Projeto
    2. Modelo de negócios e indicadores de desempenho (indicadores esperados na pesquisa de demanda)
    3. Descrição do ambiente de teste
    4. Recursos de teste
    5. Métodos de teste e princípios de design de cenário
      • Teste de benchmark: para encontrar um benchmark de desempenho, geralmente é uma série de operações executadas simultaneamente e por um longo tempo; ou seja: comparando os dados após a otimização da interface com os dados antes da otimização, você pode ver o efeito de otimização ; mas se você quiser ver o ponto de inflexão do desempenho, ainda precisará usar alta simultaneidade para testes de estresse
      • Teste de carga de transação única (comumente usado) : refere-se ao teste de negócio único e interface única
      • Teste de cenário misto (comumente usado) : Por exemplo, interfaces de login e registro, certifique-se de executar primeiro um teste de carga de transação única para garantir que não haja problemas com cada interface e, em seguida, realize testes de estresse de acordo com uma determinada proporção (obtida em a pesquisa de demanda)
      • Testes de alta disponibilidade (geralmente para clusters online)
        • Método de teste: desligue um nó no cluster para ver se o cluster pode funcionar normalmente; execute o nó travado novamente para ver se o cluster pode ser usado normalmente após o nó ser reiniciado.
      • Teste de cenário anormal: por exemplo, em um cenário de rede fraca, ao enviar uma solicitação, embora a rede seja fraca, ainda ocorrerá alta simultaneidade; existem algumas situações anormais, como transações em uma rede fraca, e a interface não funciona através da primeira vez porque certos gatilhos são acionados e executam novamente a interface, o que pode resultar na geração de dois pedidos.
      • Teste de estabilidade (comumente usado) : Um teste de estresse de longo prazo (como 12 horas) é necessário para testar se há problemas como vazamentos de memória, etc.
      • Outras cenas especiais
  3. Configuração de hardware de configuração do ambiente
    1. Precauções
      • Tente ser consistente com o online
      • A versão do sistema é consistente com o online
      • Implante o menor módulo de unidade on-line no ambiente de teste
      • As configurações de aplicativos, middleware e banco de dados devem ser consistentes com aquelas on-line.
      • Outras configurações especiais
  4. preparação de dados
    1. Os dados de teste são divididos em: dados básicos, dados parametrizados
    2. Método de construção de dados:
    • Interface de negócios
      • Adequado para relacionamentos complexos de tabelas de dados
      • Prós: melhor integridade dos dados
    • procedimento armazenado
      • Adequado para pequeno número de tabelas e simplicidade
      • Vantagens: mais rápido
    • Importação de script
      • Adequado para lógica de dados complexa
      • O grau de liberdade é relativamente alto
  5. Scripts
    1. Escolha uma ferramenta (Loadrunner, Jmeter, Locust, etc.)
    2. Selecione o protocolo (HTTP, TCP, RCP)
    3. parametrizar
    4. Associação
    5. ponto de verificação
    6. julgamento comercial
  6. Execução de teste de estresse
    1. execução distribuída
    2. monitor
      • Linux
      • JVM
      • base de dados
    3. Resultados de testes de telefone celular
    4. análise de dados
    5. Localização do gargalo
  7. Ajustando a regressão
    1. O ajuste de desempenho exige que toda a equipe conclua
    2. Tente de novo e de novo
    3. Verificação de regressão
    4. Ferramentas de monitoramento
    5. Solução de problemas de link completo
    6. Análise de registros
    7. Isolamento do módulo
  8. relatório de teste

1.5 Protocolo HTTP

1.5.1 Introdução ao http

1. Suporte ao modo cliente/servidor.
2. Simples e rápido: quando um cliente solicita serviços do servidor, ele só precisa transmitir o método e o caminho da solicitação. Os métodos de solicitação comumente usados ​​incluem GET, POST, PUT e DELETE. Cada método especifica um tipo diferente de contato entre o cliente e o servidor.
Devido à simplicidade do protocolo HTTP, o tamanho do programa do servidor HTTP é pequeno e a velocidade de comunicação é muito rápida.
3. Flexível: HTTP permite a transmissão de qualquer tipo de objeto de dados. O tipo que está sendo transferido é marcado por Content-Type.
4. Sem conexão: O significado de nenhuma conexão é limitar cada conexão para processar apenas uma solicitação. Depois que o servidor processa a solicitação do cliente e recebe a resposta do cliente, ele se desconecta. Este método economiza tempo de transmissão.
5. Sem estado: O protocolo HTTP é um protocolo sem estado. Stateless significa que o protocolo não tem capacidade de memória para processamento de transações. A falta de estado significa que se o processamento subsequente necessitar de informações anteriores, elas deverão ser retransmitidas, o que pode levar a um aumento na quantidade de dados transferidos por conexão. Por outro lado, quando o servidor não necessita de informações prévias, sua resposta é mais rápida.

1.5.2 Estrutura do protocolo http


pontas:

Perguntas sobre a distinção entre os conceitos de teste de estresse, teste de carga e teste de desempenho
1. Não existe um padrão ou definição unificada na indústria para os três conceitos acima. Existem vários materiais e explicações diferentes.
2. Para iniciantes, você pode ignore esses conceitos por enquanto
. 3. Apenas lembre-se: todos os testes que você faz se tornam testes de desempenho. Nas empresas reais, eles são chamados de [testes de estresse]
4. Quanto a saber se é para testar o máximo de usuários simultâneos, estabilidade ou o mais alto tps, todos esses são testes de desempenho, apenas testes. Os objetivos são diferentes e diferentes cenários de teste são projetados devido aos diferentes propósitos.

2.Jmetro

2.1 Instalação e configuração

Site oficial: https://jmeter.apache.org/
1. Configure variáveis ​​de ambiente Java nesta máquina
2. Baixe o pacote compactado do site oficial e descompacte-o em qualquer diretório
3. Modifique o arquivo de configuração e abra jmeter.properties em Diretório bin do Jmeter. Modificar
idioma=zh_CN #Ambiente chinês e inglês
sampleresult.default.encoding=utf-8 #Evitar caracteres ilegíveis

Ajustar o tamanho do ícone
jmeter.toolbar.icons.size=32x32
jmeter.tree.icons.size=32x32

Modificar o tamanho dos dados do corpo da mensagem
jsyntaxtextarea.font.family= Hackear
jsyntaxtextarea.font.size=36

Altere o tamanho do elemento da interface
para true para permitir
que jmeter.hidpi.mode=true
controle o tamanho
jmeter.hidpi.scale.factor=2.0

Se a configuração modificada não entrar em vigor, adicione o seguinte código ao jmeter.bat
imagem.png

set JVM_ARGS=%JVM_ARGS% -Dswing.plaf.metal.controlFont=Dialog-20
set JVM_ARGS=%JVM_ARGS% -Dswing.plaf.metal.systemFont=Dialog-20
set JVM_ARGS=%JVM_ARGS% -Dswing.plaf.metal.userFont=SansSerif-20
set JVM_ARGS=%JVM_ARGS% -Dswing.plaf.metal.smallFont=SansSerif-20

4. Entre no diretório bin do Jmeter e clique duas vezes em jmeter.bat para iniciar

2.2 Scripts

2.2.1 Entrada

Três tipos de entrada

Nome da interface Tipo de interface parâmetro
O parâmetro é chave = valor PUBLICAR nome de usuário=“123”&senha=“123”
O parâmetro é do tipo json PUBLICAR {nome de usuário=“123”,senha=“123”}
O parâmetro é key = tipo json PUBLICAR chave = {nome de usuário=“123”,senha=“123”}

O segundo tipo: tipo json.
imagem.png
Os parâmetros de entrada do tipo json são preenchidos em [Dados do corpo da mensagem]. Se os dados do corpo da mensagem contiverem dados, [Parâmetro] não poderá ser operado. Observação: se o parâmetro for
do tipo json , uma informação http O cabeçalho precisa ser adicionado para gerenciamento . Ao configurar o componente, você também deve prestar atenção ao domínio efetivo do componente de configuração. Nem todos os parâmetros de entrada da interface podem ser deste tipo. imagem.png
Gerenciamento de cabeçalho HTTP:
imagem.png
PS: Se um erro 415 é relatado, verifique se o cabeçalho foi adicionado.

O terceiro método: key=json type
método conveniente: você pode colar diretamente de [Adicionar da área de transferência] na parte inferior
imagem.png

2.2.2 Asserção

O status de sucesso visualizado na árvore de resultados é apenas que a chamada de interface foi bem-sucedida (porque código de resposta = 200), mas não pode ser avaliado se o negócio foi concluído, portanto, uma asserção precisa ser adicionada.

2.2.2.1 Asserção JSON

1. Adicionar asserção:
Expressão do caminho JSON: $.code representa o nome do campo de código em JSON (referência detalhada: https://github.com/json-path/JsonPath)
Você precisa verificar adicionalmente o valor da afirmação, corresponder como expressão regular
imagem.png
PS : Asserção também preste atenção ao local onde o arquivo de asserção está armazenado. O nível de armazenamento é diferente e o domínio efetivo é diferente. Por exemplo, se for armazenado na interface de login no caminho, só terá efeito no interface de login.Se for colocado na camada mais externa, terá efeito em todo o domínio.imagem.png

2. JSON contém arrays , que podem ser processados ​​da seguinte forma:
Exemplo json:

{
    
    
  "store": {
    
    
    "book": [
      {
    
    
        "category": "reference",
        "author": "Nigel Rees",
        "title": "Sayings of the Century",
        "price": 8.95
      },
      {
    
    
        "category": "fiction",
        "author": "Evelyn Waugh",
        "title": "Sword of Honour",
        "price": 12.99
      },
      {
    
    
        "category": "fiction",
        "author": "Herman Melville",
        "title": "Moby Dick",
        "isbn": "0-553-21311-3",
        "price": 8.99
      },
      {
    
    
        "category": "fiction",
        "author": "J. R. R. Tolkien",
        "title": "The Lord of the Rings",
        "isbn": "0-395-19395-8",
        "price": 22.99
      }
    ],
    "bicycle": {
    
    
      "color": "red",
      "price": 19.95
    }
  },
  "expensive": 10
}

Método de processamento:

JsonPath Resultado
$.store.book[*].autor Os autores de todos os livros
$…autor Todos os autores
$.loja.* Todas as coisas, tanto livros quanto bicicletas
$.loja… preço O preço de tudo
$…livro[2] O terceiro livro
$…livro[-2] O penúltimo livro
$…livro[0,1] Os dois primeiros livros
$…livro[:2] Todos os livros do índice 0 (inclusive) até o índice 2 (exclusivo)
$…livro[1:2] Todos os livros do índice 1 (inclusive) até o índice 2 (exclusivo)
$…livro[-2:] Dois últimos livros
$…livro[2:] Todos os livros do índice 2 (inclusive) ao último
$…livro[?(@.isbn)] Todos os livros com número ISBN
$.store.book[?(@.price <10)] Todos os livros na loja mais baratos que 10
Perdido @

$…livro[?(@.price <= $['expensive'])] | Todos os livros da loja que não sejam “caros” |
| $…livro[?(@.autor =~ /.REES/i )] | Todos os livros que correspondem a regex (ignorar maiúsculas e minúsculas) |
| $…
| Dê-me tudo |
| $…livro.length() | O número de livros |

2.2.2.2 Asserção de resposta

imagem.png
Inscreva-se em :

  • apenas amostra principal: esta afirmação é para a solicitação principal
  • main sample and sub-sample:该断言针对主、次请求,例如重定向的场景,可能会使用到该选项

测试字段:选择需要对哪个数据做判断

  • 忽略状态:忽略jmeter默认的状态判断,来跑响应断言中对于状态的断言

响应断言模式匹配规则

  • 包括(Contains):如果响应中包含了指定的字符串,判断为成功,支持正则表达式
  • 匹配(Matches):如果响应完全匹配指定的字符串,判断为成功,支持正则表达式
  • 相等(Equals):如果响应完全匹配指定的字符串,判断为成功,不支持正则表达式
  • 字符串(Substring):如果响应中包含了指定的字符串,判断为成功,不支持正则表达式
  • 最常用的是字符串,性能测试只需要判断业务是否跑通,无需写过于复杂的断言

2.2.3 测试计划

定义全局变量,例如域名及端口号
imagem.png
接口中可通过${变量名称}配置
imagem.png

2.2.4 参数化

2.2.4.1 通过【函数助手】生成各种函数

功能位置:工具栏倒数第二个
常用的函数例如:

  • 生成随机数:Random函数

imagem.png
输入完范围后,点击【生成】按钮,复制【当前JMeter变量】的语句,粘贴至【参数】的【值】中
imagem.png

  • 随机字符串:RandomStringimagem.png

imagem.png
点击【生成】按钮后,${__RandomString(8,abcdefghijklmQ39589fsafdgAAA,)} 函数字符串会自动复制到剪切板

  • 时间戳

两个参数皆为可选填,都不填也可,直接点击生成就可以直接用
imagem.png
填了参数
imagem.png

  • uuid

imagem.png

2.2.4.2 文件参数化

1、**CSVRead:**从文本文件中读取数据
优点:该函数适用于使用登录后,仍然需要用这些账号进行一系列操作的压测
imagem.png
第一个参数填文件的绝对路径,第二个参数填第几列,例如下图中:第一列是登录接口的用户名,第二列是密码
imagem.png
注意:接口轮询中使用txt文件中的用户数据数量,取决于线程数的数量
线程数=1时,无论循环次数为几,皆使用文件中的第一条用户数据
imagem.png
线程数=2时,调了两条txt中的用户数据
imagem.png
线程数=4时,重复调用了两遍文件中的两条数据
imagem.png
使用函数生成的参数来替换接口中的参数,如下图中的mobile、password字段
imagem.png

PS:存储函数的变量名
2、CSV Data Set Config
功能添加路径:线程组→添加→配置元件→CSV Data Set Config
imagem.png

  • Allow quoted data(是否允许带引号):选择true,读取中文时会导致参数值出现乱码

文件编码:可以不填

  • 如果接口中的参数是用西文逗号隔开的(例如:“user”:“username,password”),那么txt数据就不可以再用逗号隔开,可以用【\t】代替,在txt中为用tab键隔开,也可以用别的符号隔开
    | Recycle on EOF(遇到文件结束符再次循环?) | Stop thread onEOF(遇到文件结束符停止线程?) | 参数效果 |
    | — | — | — |
    | True | False | 重复 |
    | False | True | 唯一 |

  • 参数效果=唯一 举例:txt有四条数据,线程数=2,循环次数=3,此时接口只会跑四次,取的txt中四条数据,第五条因需重头取,导致数据重复,所以不会继续运行

  • 参数替换方式

imagem.png

注意:使用CSV Data Set Config读取数据,无论线程数与循环次数是几,每次查询都是查询下一条数据,若所有数据都读取了一遍,则会从头读取第二遍
线程数=1,循环次数=2时,会使用文件中的两条用户数据
imagem.pngimagem.png

假设txt中是四条用户数据,线程数=2,循环次数=2,在轮询时,会依次读取文件中的四条用户数据
imagem.png

2.2.5 线程组

线程数:假设有多少用户正在同时使用
多用户场景时,无需参考查看结果树中的接口顺序,其实是同时发生的

2.2.6 数据关联

2.2.6.1 方法一:后置处理器———JSON提取器

imagem.png
imagem.png
apply to:一般选main sample only (主请求)
Name of created values:对提取的变量起名
JSON Path expression:要提取的变量(用jsonpath写)

  • 切记,如遇到数据在json中的数组下,记得指定取数组中的第几个,不然会取不出来数据
  • 1、提取最深层某字段的其中一个数据:$.docGroups[0].documents[0].docId
{
    
    
    "responseStatus": {
    
    
    },
    "docGroups": [
        {
    
    
            "documents": [
                {
    
    
                    "docId": 38604724,
                    "startTime": 1673406999
                },
             		{
    
    
                    "docId": 2,
                    "startTime": 1673406998
                }
    ],
    "events": []
}
  • 2、提取某字段在该响应中的所有数据$.docGroups[0].documents[*].docId
{
    
    
    "responseStatus": {
    
    
    },
    "docGroups": [
        {
    
    
            "documents": [
                {
    
    
                    "docId": 1,
                    "startTime": 1673406999
                },
             		{
    
    
                    "docId": 2,
                    "startTime": 1673406998
                }
    ],
    "events": []
}

Match No:想提取第几个数据

  • Match No = 0,则会随即返回其中一个数据
  • 填几,则会返回几个
  • Match No =-1,返回所有的数据

若其他接口想调用取到的值,如下图catalogId字段一样使用即可
imagem.png

2.2.6.2 调试取样器

imagem.png
调试取样器可以打印出来Jmeter运行过程中保存下来的参数,需要配合查看结果树使用,无需配置任何数据
imagem.png
结果树中可看到获取到的get_docID值
imagem.png

2.2.6.3 方法二:后置处理器——正则表达式提取器

可以通过正则表达式来获取http请求返回的数据
imagem.png
引用名称:匹配后的结果,保存到一个参数中,如param
正则表达式
三步走:
1、拷贝目标数据和左右边界
2、把目标数据用括号括起来
3、把目标数据用.+?代替
模板 1 1 1表示取匹配到的第一组数据, 2 2 2为第二组
匹配数字:当某组数据中包含多少个参数时,0代表随机,1代表该组的第一个参数,2表示第二 个。。。-1代表获取全部的参数,这个时候,引用名称就变成了参数数组,可以通过param_n来 获取指定的参数,当有多组数据时,第一组为param_1_g1,第二组为param_1_g2
结果:看倒数第四行的re_docid字段,是通过正则提取器提取到的第一个文章id
imagem.png

2.2.7 聚合报告

imagem.png
模拟用户使用时,循环次数要选【永久】
imagem.png
聚合报告结果:imagem.png
#样本: 表示一共发出了多少个请求Average:平均响应时间
中位数:类似于50% Line90% Line: 假设该值为20,那么90%用户的响应时间小于等于20msMin:最小响应时间
Max/最大值: 最大响应时间
Error%/异常%: 错误率,出现错误的请求数量/请求的总数Throughput:吞吐量KB/Sec: 每秒从服务器端接收到的数据量
吞吐量:默认情况下表示每秒完成的请求数(Request per Second) 对于接口测试来说,Jmeter里的吞吐量=TPS
保存结果:聚合报告底部可保存结果数据
imagem.png

tip:
1、若两接口在同一线程组下,TPS值一致,但响应时间不一定一致
2、有关联关系的接口放在同一个线程组下,无关联的接口们需独立存放在不同的线程组下

2.2.8 定时器

1、Jmeter中的定时器类似于loadrunner中的pacing值和think_time
1)定时器是在
每个sampler(采样器)之前执行的
,而不是之后
2)定时器是有作用域的;当执行一个sampler之前时,所有当前作用域内的定时器都会被执行。且所有的sampler执行前都会执行定时器
3)如果希望定时器仅应用于其中一个sampler,则把该定时器作为子节点加入

2、常用的定时器

  • 固定定时器:设置一个固定的延迟时间,单位ms

imagem.png

  • 同步定时器(synchronizing timer):在该定时器处,使线程等待,一直到指定的线程个数达到 后,再一起释放。可以在瞬间制造出很大的压力。它和loadrunner的集合点差不多的功能
    • 集合点
      • 集合点是为了增加瞬间并发压力的一种机制,在脚本中增加一个标记,所有虚拟用户执行到标记 处会进行等待,等所有用户都到达后,再同时继续执行下一步操作。
      • 优点:对服务器来说,会产生一种瞬间高并发
      • 缺点:对服务器来说,平均压力会降低
    • 需要加集合点的场景 :
      • 根据业务来选择,如果业务场景是瞬间高并发类型的,如抢购、秒杀等,需要加集合点; 其他的场景都不需要加,一般加了集合点后,就不使用tps来衡量系统性能 集合点功能要慎重选择,因为加了集合点后,系统的平均压力会降低
    • 超时时间=0,则不会发生超时;超时时间>0,等待X毫秒后,已处理完上一步的的线程组数进行并发

imagem.png

  • 常量控制器:可以控制每分钟tps的总量,限制最高tps (线上测试最好加该控制器,以防压爆线上)

imagem.png

2.2.9 逻辑控制器

常用的逻辑控制器:
1、循环控制器:可以设置该控制器内的sampler执行的次数,循环次数与线程的循环次数各自独立

  • 主要作用于多个请求时

imagem.png
imagem.png
此条件下,【获取专栏详情页的资讯列表】接口仅执行1次,【请求2】接口执行会执行6次

2、if控制器:根据判断条件决定是否执行该控制器内的请求,如果是字符串比较条件,参数和字符串 都需要加引号
条件格式:
KaTeX parse error: Expected group after '_' at position 2: {_̲_jexl3(条件表达式)}<…{__jexl3(KaTeX parse error: Expected 'EOF', got '}' at position 11: {num} > 5)}̲、 <br />2、若相比较的…{__jexl3(“${ip}”) == “xxxxx”)}
imagem.png
3、仅一次控制器:该控制器内的请求只执行一次,无论线程循环多少次

  • 针对单个线程

imagem.png
imagem.png
此种情况下本应【请求2】【请求3】皆执行6次,但因为【请求3】在【仅一次控制器】下,最终结果为:
【请求2】执行6次【请求3】执行1次

4、foreach控制器,可以遍历某个参数数组,循环获取数组中的参数
参数是通过其他接口通过提取器提取出来的参数数组,再把参数循环附入需要这些参数的接口
imagem.png
结束循环字段:${get_docId_matchNr}取字数组末尾的get_docId_matchNr=12,方便标记,也不会产生写死的情况(只能获取到get_docId_9的情况)
输入变量法前缀:取自于结果树中get_docId(名字是自己在提取器中设置的变量名)
imagem.png

2.2.10 Http cookie管理器

2.2.10.1 cookie和session

cookie数据保存在客户端,session数据保存在服务器端。cookie有安全隐患,但是Session过多的时候会消耗服务器资源

  • Cookie 机制:正统的 Cookie 分发是通过扩展 HTTP 协议来实现的,服务器通过在 HTTP 的响应头中加上一行特殊的指示以提示浏览器按照指示生成相应的 Cookie。然而纯粹的客户端脚本如 JavaScript 或者 VBScript也可以生成 Cookie。而 Cookie 的使用是由浏览器按照一定的原则在后台自动发送给服务器的。浏览器检查所有存储的 Cookie,如果某个 Cookie 所声明的作用范围大于等于将要请求的资源所在的位置,则把该 cookie 附在请求资源的 HTTP 请求头上发送给服务器。
  • Session 机制:Session 机制是一种服务器端的机制,服务器使用一种类似于散列表的结构(也可能就是使用散列表)来保存信息。

Cookie 存在一定的全安隐患。Cookie 像我们以前用的存折,用户的存钱、取钱都会记录在这张存折上(即浏览器中会保存所有用户信息),那么对于有非分想法的人可能会去修改存折上的数据(这个比喻忽略掉银行同样会记录用户存取款的金额)。相对于存折,银行卡要全安的得多,客户拿到的只是一个银行卡号(即浏览器只保留一个 Sessionid),那么用户的存钱、取钱都会记录在银行的系统里(即服务器端),只得到一个 sessionid 是没有任何意义的,所以相对于 Cookie 来说就会安全很多。
cv文章~~

2.2.10.2 cookie管理器

位置:
imagem.png
使用:
imagem.png
1、名称:取自抓包接口中cookie下,对应的cookie名称,具体其中哪个字段作为cookie需问开发imagem.png
2、值:即对应的cookie值,配置的cookie必须是有效的,无效接口会有对应的提示:比如用户无效啊,用户未登录~之类的
3、域:接口的域名,全局配置的话,可用 i p 对应的名称 写,配置如下图中,可写为 {ip对应的名称}写,配置如下图中,可写为 ip对应的名称写,配置如下图中,可写为{ip}imagem.png

无需每次通过抓包获取cookie的便捷方法
imagem.png
调用login接口获取cookie,http cookie管理器无需填写内容、接口中无需调用,管理器会自动获取接口中cookie塞到需要cookie的接口中

2.2.11 token接口处理

简单了解一下token的使用~

  • 前端登陆的时候向服务器发送请求,服务器验证成功,会生成一个token
  • 前端会存储这个token,放在session或cookie中,用于之后的业务请求身份验证
  • 拿着这个token,可以在当前登录的账号下进行请求业务,发送请求时,token会放在请求头里,服务器收到这个业务请求,验证token,成功就允许这个请求获取数据
  • token可以设置失效期

token知识~
从登录接口中提取token,若是在请求头里需要增加该参数,则在HTTP信息头管理器中添加对应的key、value
imagem.pngimagem.png

2.2.12 上传、下载文件(可以忽略该小节)

内容不全也无真实实例可展示(手头接口不支持)需要细了解请自行搜索
上传文件小点~
1、文件上传原理:浏览器将本地文件内容通过HTTP发送到服务器,服务器收到数据后重新创建一个文件
2、文件上传的HTTP请求content-type:multipart/form-data,MIME类型为application/octet-stream
3、文件上传一般有表单上传和ajax上传两种方式

实现步骤:
1、需要用到的图片本地地址填在txt文本里
imagem.png
2、把需要读取的txt文件配置在【CSV数据文件设置】中imagem.png
3、
imagem.png

下载:
1、文件下载的原理:服务器将文件内容通过HTTP发送到浏览器,浏览器接受到数据后在本地创建一个文件
2、创建文件是浏览器的自沈从文,测试文件下载不需要在本地创建文件
3、文件下载是一个普通的HTTP GET类型请求

2.2.13 WebService接口脚本编写

1、接口配置为http请求

imagem.png
2、添加header:Content-Type:text/xml;chartset-
imagem.png

2.2.14 TCP接口脚本编写

imagem.png
要发送的文本:可能是xml、也可能是十六进制的一串数据,具体数据格式需要找开发了解

2.2.15 JDBC请求脚本编写

1、添加数据库jar包

  • mysql-connector-java-8.0.29.jar阿里盘地址: https://www.aliyundrive.com/s/cW8XgHNyF98
  • 方式一:拷贝mysql驱动包到jmeter/lib目录下
  • 方式二:测试计划处添加驱动jar包(仅针对该测试计划添加某jar包)
  • imagem.png

3、配置JDBC Connect Configuration
红框中为需要填写的参数;
Database URL:jdbc:mysql://{ip}:{port}/{dbname}?useUnicode=true&characterEncoding=utf8
JDBC Driver class:选择所需使用的数据库
imagem.png
4、**JDBC Request **
imagem.png

  1. Variable Name of Pool declared in JDBC Connection Configuration:该字段填写【JDBC Connection Configuration】中【Variable name of createdpool】字段值
  2. Query Type:语句类型
  • Select statement:查询语句类型(select),只支持一条查询语句,多条查询语句只执行第一条
  • Update statement:更新语句类(insert,update,delete),只支持一条更新语句,多条更新语句只执行第一条
  • Prepared Select statement:支持多条查询(select)语句,查询响应数据只展示第一条SQL的查询结果
  • Prepared Update statement:支持多条更新(insert,update,delete)语句,响应数据展示多条更新提示(做参数化最好选择该类型)
  • Callable Statement:支持多条查询、更新(insert,update,delete,select)语句,响应数据展示展示多条数据更新结果。如果是多条select语句同时查询,建议使用Callable Statement,响应数据可以展示多条查询结果值
  1. Parameter values:填写参数的具体的值,或者参数的名称(代替sql语句中问号的值)。可以利用此字段对SQL语句进行参数化
  2. Parameter types:指Parameter Values参数的数据类型,例如:integer,String,double类型
  3. Parameter values 和Parameter types:必须成对出现,且SQL语句中有多个参数,就必须有多少个parameter values 和Parameter types。
  4. Variable names:自己设置的变量名称,用于存放select操作返回的查询结果。有多个字段返回时,需用逗号隔开
  5. Result variable name:用于存放select操作返回的查询结果集
  6. Query timeout:查询超时时间
  7. Handle result set:定义如何处理由callable statements 语句返回的结果

若想保存查询出的数据
1、添加【调试取样器】
2、【JDBC Request】中【Variable names】赋值imagem.png
调试取样器中可查看到保存下来的结果
imagem.png

2.3 插件便捷管理

http://jmeter-plugins.org/downloads/all
1、下载jmeter-plugins.jar
2、把jar文件放入%Jmeter_Home%\lib\ext,重启jmeter
3、点击工具栏中的图标imagem.png,可对插件进行管理

可能会用到的插件:

  • 3 Gráfico Básico: Tps em tempo real e plug-ins de tempo de resposta disponíveis no Windows

imagem.png
imagem.png
imagem.png
imagem.png

  • Funções JMeter personalizadas
  • Configuração aleatória do conjunto de dados CSV
  • PerfMon: plug-in de monitoramento de desempenho em tempo real do lado do servidor

Instalação:
1. Pesquise e verifique o plug-in necessário
imagem.png
2. Clique e aguarde, ele será reiniciado automaticamente após a conclusão do download.
imagem.png

Acho que você gosta

Origin blog.csdn.net/TDLDDMZ/article/details/130913897
Recomendado
Clasificación