JMeter基础

JMeter工具基础使用

JMeter环境搭建

JMeter的三个重要组件

线程组

作用:控制JMeter用于执行测试的一组用户

分类:

  • Setup线程组:预测试操作,所有脚本之前执行
  • 线程组:执行测试用例的
  • Teardown线程组:所有脚本之后执行

位置:测试计划------添加------线程(用户)------线程组

属性

  • 线程数:虚拟用户数
  • Ramp-Up时间:全部虚拟用户启动需要的时间
  • 循环次数:指定运行次数,选中"永远"后一直执行
    调度器:配合"永远"使用。

Ps:线程数为2,循环次数为3;与线程数为3,循环次数为2的区别?

  • 线程数表示虚拟用户数,用户数越多,负载越大
  • 循环次数代表运行时间,次数越多,运行时间越长

HTTP请求

作用:向服务器发送http及https请求

位置:线程组------添加------取样器------HTTP请求

属性

  • 协议:默认为HTTP,HTTPS
  • 服务器名称或IP:IP地址
  • HTTP请求:GET或POST请求
  • 路径:URL端口后面的部分
  • 参数:get方法中URL路径中传参(/?键名=键值&键名=键值)
  • 消息体数据:POST方法中,请求体中传参数(直接在消息体数据中添加请求体,任意格式:from、json)

查看结果树

作用:在查看结果树中点击运行可以查看请求参数和响应结果

位置:线程组------添加------监听器------查看结果树

JMeter参数化

参数化:把测试数据组织起来,用不同的测试数据 调用相同的测试方法

用户定义的变量

场景:定义全局变量

位置:线程组------添加------配置元件------用户定义的变量

使用方法:

复制代码
添加用户定义的变量,格式:变量名 - 变量值
在HTTP请求中引用定义的变量名。格式:${变量名}

用户参数

场景:针对同一组参数,不同用户访问时,可以获取到不同的值

位置:线程组------添加------前置处理器------用户参数

使用方法:

复制代码
第一列添加多个变量名,后续每一列为一组用户的数据
在HTTP请求中引用定义的变量名。格式:${变量名}

CSV数据文件设置

场景:当不同用户或者同一用户多次循环时,都可以获取到不同的值

位置:线程组------添加------配置元件------CSV数据文件设置

使用方法:

复制代码
准备好CSV数据文件,文件名处为文件路径
变量名称:自定义
在HTTP请求中引用自定义的变量名。格式:${变量名}

函数

场景:相当于计数函数,自动生成不重复的数据,让每个用户每次循环都能取到不同的值,且不需要提取定义

位置:菜单栏中的工具------函数助手对话框------选择counter函数------选择计数器方式------点击生成------复制函数

使用方法:

复制代码
在HTTP请求中使用counter函数。格式:${__counter(FALSE,)}

四种参数化方式的不同

用户定义的变量:

  • 作用:定义全局变量
  • 局限性:每次取值(无论是否相同的用户) 都是固定值

用户参数:

  • 作用:保证不同的用户针对同一组参数,可以取到不同的值
  • 局限性:同一个用户在多次循环时,取到相同的值

csv数据文件设置:

  • 作用:保证不同的用户及同一用户多次循环时,都可以取到不同的值
  • 局限性:需要手动进行测试数据的设置

函数

  • 作用:保证不同的用户及多次循时,都可以取到不同的值,不需要提前设置
  • 局限性:输入数据有特定的业务要求时无法使用(如:登录时的用户名密码)

PS:查看结果树看到的发送消息和HTTP取样器配置不完全一样的原因?

  • 查看结果树中最外层HTTP请求的 请求信息和响应信息,应该与子节点中最后一个HTTP请求的请求信息和响应信息一致
  • 配置的HTTP请求,因该与子结点中第一个请求的请求信息一致

利用JMeter测试的一个具体用例,找一个跟着学一下,不然真的不会,不知道在干嘛怎么用

JMeter断言

让程序自动判断预期结果和实际结果是否一致

  • JMeter在请求的返回层有一个自动判断机制(响应状态码)
  • 但是请求成功了,并不代表结果一定正确,需要检测机制提高测试准确性。
  • 响应断言
    • 位置:HTTP请求------断言------响应断言
    • 场景:对HTTP请求任意格式的响应结果进行断言
  • JSON断言
    • 位置:HTTP请求------断言------JSON断言
    • JSON路径: . w e a t h e r i n f o . c i t y , .weatherinfo.city, .weatherinfo.city,.为根目录,.对目录进行分割
    • 场景:对HTTP请求格式为JSON格式的响应结果进行断言
  • 持续时间断言
    • 位置:HTTP请求------断言------持续时间断言
    • 作用:检查HTTP请求的响应时间是否超出要求范围

JMeter关联

当请求之间有依赖关系的时候需要用到关联处理。如一个请求的入参是另一个请求返回的数据。

正则表达式

公式格式:左边界(匹配符)右边界

.:通配符,可以代表任意字符(换行回车除外)

*:表示前面的字符出现0次或多次

?: 表示非贪婪匹配,找到左边界后,往右查找右边界,查到匹配的右边界就停止继续查找;再次查找左边界和右边界

正则表达式提取器位置:HTTP请求------后置处理器------正则表达式提取器

参数:

复制代码
引用名称:存放提取出的值的参数名称
模板:用$$引用起来,表示解析出的第几个正则表达式(.*?)中的值
匹配数字:1表示第一个值,0表示随意一个值,-1表示获取所有值

XPath提取器

位置:HTTP请求-后置处理器-XPath提取器

JSON提取器

位置:HTTP请求-后置处理器-JSON提取器

JMeter属性

用于不同线程组之间的参数获取

  • setProperty函数:将值保存成JMeter属性
  • property函数:在其他线程组中使用property函数读取属性
  • 使用步骤:
    • 添加线程组1
      • 添加HTTP请求------添加JSON提取器
      • 使用setProperty函数保存JSON中的值
      • 添加BeanShell取样器,在脚本中添加JMeter属性:{__setProperty(pro_city,{city},)}
    • 添加线程组2
      • 添加HTTP请求------使用property函数读取JMeter属性:${__property(pro_city,)}

JMeter录制脚本

  • 作用:在没有接口文档的旧项目中,快速录制web页面产生的HTTP接口请求,帮助编写接口测试脚本
  • 位置:测试计划(右键)->非测试元件->HTTP代理服务器

JMeter直连数据库

使用场景

  • 用作请求的参数化:登录时需要的用户名,可以从数据库中查询获取
  • 用作结果的断言:添加购物车下订单,检查接口返回的订单号,是否与数据库中生成的订单号一致
  • 清理垃圾数据:添加商品,再执行该脚本不能成功,需要在下次执行前删除该商品数据
  • 准备测试数据:通过数据库准备大量的性能测试数据

JMeter逻辑控制器

位置:线程组-逻辑控制器-IF控制器/循环控制器/ForEach控制器

  • IF控制器:控制它下面的测试元素是否运行
  • 循环控制器:通过设置循环次数,实现循环发送请求
  • ForEach控制器:一般和用户自定义变量或者正则表达式提取器一起使用,读取返回结果中一系列相关的变量

JMeter定时器

  • 同步定时器:阻塞线程,当在规定时间内 达到一定的线程数量 ,这些线程会在同一个时间点一起释放 ,瞬间产生很大压力。
    • 超时时间:超市多少毫秒后同时释放指定的线程数。
    • 0:表示定时器会等待线程数达到了设置的线程数才释放,若没有达到则会一直死等。
  • 常数吞吐量定时器:
    • QPS单位为:次/s,而该定时器参数是:次/m,因此需要注意时间的换算
  • 固定定时器

定时器的作用也需要后面遇到具体的项目来做才能明白其作用

相关推荐
文人sec3 天前
性能测试-jmeter9-逻辑控制器、定时器压力并发
测试工具·jmeter·性能优化·模块测试
CesareCheung5 天前
JMeter分布式压力测试
分布式·jmeter·压力测试
测试界清流5 天前
jmeter使用技巧
jmeter
春时似衿里5 天前
jmeter配置数据库连接步骤
数据库·jmeter
新知图书5 天前
JMeter的安装部署
jmeter
程序员杰哥5 天前
什么是Jmeter? Jmeter工作原理是什么?
自动化测试·软件测试·python·测试工具·jmeter·职场和发展·测试用例
乐神嘎嘎嘎5 天前
Jmeter测试
jmeter
卓码软件测评5 天前
第三方软件测试机构【性能测试工具用LoadRunner还是JMeter?】
java·功能测试·测试工具·jmeter·性能优化
BatyTao6 天前
Jmeter执行数据库操作
数据库·jmeter
二宝哥6 天前
性能测试工具Jmeter之java.net.BindException: Address already in use
jmeter