JMeter - 基础

JMeter 安装

1.下载解压后配置环境变量

系统变量新增如下:
JMeter_HOME=F:\soft\apache-jmeter-5.4.1
PATH 新增如下:
%JMETER_HOME%\lib\jorphan.jar
%JMETER_HOME%\lib\ext\ApacheJMeter_core.jar
%JMETER_HOME%\bin

2.启动方式

进入JMeter安装目录下的bin目录

  • 双击jmeter.jar
  • 命令行输入 java -jar ApacheJMeter.jar (jmeter bin 目录下)
    任意一种方法都能打开

JMeter 核心目录介绍

1.lib:存放jmeter依赖jar和第三方jar(lib/ext)

2.bin目录

3.docs目录:JMeter的API文档,用于开发扩展组件

4.用户帮助文档

元件

元件:多个类似功能组件的容器(类似于类)

组件

组件:实现独立的某个功能(类似于方法)

元件作用域的原则

取样器:核心,没有作用域
逻辑控制器:只对其子节点中的取样器和逻辑控制器起作用
其他元件:

  • 如果想对某一个取样器起作用,设置该元件为取样器的子节点
  • 如果想对多个取样器起作用,设置该元件为取样器的同级

元件的执行顺序

同一作用域(目录/级别/缩进)下的不同元件的执行顺序:
1.配置元件(Config Element - 初始化测试数据)
2.前置处理器(Pre Processor对请求参数进行赋值)
3.定时器 (Timer- 控制接口请求的发送时间)
4.取样器(Sample - 调用请求方法)
5.后置处理器(Post Processor - 提取响应中特定字段的值)
6.断言(Assertions - 判断结果)
7.监听器(Listener)

同一作用域(目录/级别/缩进)下的相同元件的执行顺序:
从上到下的顺序依次执行

案例

以下元件的执行顺序是?

固定定时器1 -> HTTP请求1 -> IF 控制器 -> 固定定时器2 -> HTTP请求2 -> 固定定时器3 -> HTTP请求3

线程组

作用:线程组就是控制JMeter用于执行测试的一组用户
分类:setup线程组、普通线程组、teardown线程组
特点:

  • 模拟多人操纵
  • 线程组可以添加多个,多个线程组可以并行或者串行
  • 取样器和逻辑控制器必须以来线程组才能使用

线程组串行执行:
测试计划 -> 独立运行每个线程组

Ramp-Up:

  • 爬坡时间(线程就绪时间) - 多久时间让线程就绪
  • 线程不是说来就来说走就走,jmeter 向操作系统申请
  • 我们一次性向操作系统申请大量线程,可能不会立即就绪
  • 让线程慢慢创建,e.g: 线程数量100, 爬坡时间10s, 每秒jmeter 创建出10个线程

https://blog.csdn.net/u011441473/article/details/124818175?ops_request_misc=%257B%2522request%255Fid%2522%253A%2522170098313016800225568358%2522%252C%2522scm%2522%253A%252220140713.130102334.pc%255Fblog.%2522%257D&request_id=170098313016800225568358&biz_id=0&utm_medium=distribute.pc_search_result.none-task-blog-2blogfirst_rank_ecpm_v1~rank_v31_ecpm-11-124818175-null-null.nonecase&utm_term=Jmeter&spm=1018.2226.3001.4450

循环次数:

  • 线程执行人物的模式
  • 指定次数: 单个线程执行任务的次数,执行完毕线程销毁。e.g: 100个线程,ramp-up:10s ,循环次数:1,代表 1秒启动10个线程,10个线程执行1次完毕
  • 永远:一直干活不停歇,执行完毕所有任务步骤,继续下一次

练习1:
线程组- 模拟2个用户等待5S后开始执行
延迟启动不可以单独使用,持续时间必须填写,不然会报错

持续时间可以则单独使用

练习2:

  • 线程数2,循环次数3,运行观察结果
  • 线程数3,循环次数 2,运行观察结果
    对比有什么不同?
    线程数:代表用户数,用户数越多,负载越大
    循环次数: 代表时间,该值越大,代表运行的次数越多,运行的时间越长

取样器-HTTP请求

跟随重定向与自动重定向区别

自动重定向:

HttpClient接收到请求后,如果请求中包含重定向请求,HttpClient是可以自动跳转的,但是只针对GET和Head请求,勾选此项则“跟随重定向”失效;自动重定向可以自动转向到最终目标页面,但是JMeter是不记录重定向过程内容的,比如在查看结果树中是无法找到重定向过程内容的(A重定向到B,此时只记录B的内容不记录A的内容,A的响应内容我们暂时且叫过程内容),如果此时你想做关联,那就比较遗憾了,你无法关联到。

跟随重定向:

Http Request取样器的默认选项,但响应Code是3XX时(比如301是重定向),自动跳转至目标地址。与自动重定向不同,JMeter会记录重定向过程中的所有请求响应,在查看结果树时可以看到服务器返回的内容,所以你可以对响应的内容做关联
比如你要测试登录,你把POST请求改为跟随重定向就可以了

get请求的两种传参方式:

  • 直接路径传参

  • 参数列表传参

post (put)请求的两种传参方式:

  • 参数tab 和消息体数据tab 不能同时填写

  • post/put 请求的查询参数只能填写在路径的url上,通常上送表单数据采用 参数tab(默认是x-www-form-urlencoded)

  • 也可以将表单放入消息体数据tab 采用: username=15812345678&password=123456&verify_code=8888 的方式

    • 此时需要指定Content-Type: multipart/form-data,消息体的多个键值对被编码为一条数据
  • 只有请求体,没有查询参数时

  • 消息体数据传表单

Content-type:

发送JSON请求体

1.在HTTP请求的基础上添加:

  1. 配置Conten-Type

  1. 消息体数据传入json请求体

HTTP请求默认值

线程组右键 -> 配置元件 -> HTTP请求默认值

作用:
会在HTTP请求的时候,自带这些参数,设置共性内容

  1. 默认值

  2. baidu1 和 baidu2 都一样

3.结果:

参数化

用户定义的变量(全局变量)

位置:测试计划 -> 添加 -> 配置元件 -> 用户定义的变量
定义变量:

使用变量:

用户参数

什么时候使用?
针对同一组参数,当不同的用户来访问时,可以获取到不同的值
位置:测试计划 -> 添加 -> 前置处理器 -> 用户参数

如下设置两组用户数据,线程组用户数设置为2

取样器设置:

第一个请求:

第二个请求:

CSV 文件参数化

位置:测试计划 -> 添加 -> 配置元件 -> CSV Data Set Config
使用步骤:

2.数据准备

3.请求中引用中间变量

count函数参数化

使用步骤如下:
1.工具 -> 函数助手对话框

2.利用函数生成计数器

如果是2个用户,每个用户请求3次,则
TURE代表: 带个用户都有自己的计数器
用户1,请求的三次地址会传递参数num=1,num=2,num=3
用户2,请求的三次地址会传递参数num=1,num=2,num=3
FALSE代表:
两个用户一起使用全局的num,第6次请求的num值为6

  1. 引用计数器

断言

响应断言

位置:线程组 -> HTTP请求 -> 添加 -> 断言 -> 响应断言

部分测试字段和模式匹配规则说明:


测试字段:
- 响应文本: 来自服务器的响应文本,及主体
- 响应代码: 响应的状态,例如:200
- 响应的信息: 如 OK
- URL样本:请求URL
- Document(text):响应的整个文档
- 忽略状态:忽略返回的响应状态码

模式匹配规则:
- 文本包含指定的正则表达式
- 匹配:整个文本匹配指定的正则表达式
- 相等(Equals): 整个返回结果的文本等于指定的字符串(区分大小写)
- Substring: 返回结果的文本包含指定字符串(区分大小写)

断言失败:

断言成功:没有变化

响应断言 - 忽略状态

应用场景:测试反向用例时,url填错,预期断言为404,为了让用例通过

请求:

断言:

结果没有通过:

解决:

顺利通过:

JSON 断言

位置: HTTP请求 -> 添加 -> 断言 -> 响应断言

invert assertion:反转断言,如果满足条件则失败

断言持续时间

位置:HTTP请求 -> 添加 -> 断言 -> 断言持续时间

案例:访问jd ,响应时间小于100ms

处理Cookie

浏览器请求时会自动帮我们处理cookie,那么jmeter做接口测试时如何处理?

方式一

在线程组顶层结构建立配置元件 - HTTP Cookie 管理器即可
Jmeter就会自动处理Cookie

结果:

方式二:

请求cookie的返回头信息:

步骤1:通过正则表达式提取cookie

步骤2:在需要上送cookie的HTTP 请求下建立 Cookie 管理器:

  • 路径:一般是response header 中有
  • 域: 请求的hostname
posted @ 2021-12-26 20:03  chuangzhou  阅读(54)  评论(0编辑  收藏  举报