JMeter基础

JMeter工具基础使用

    • JMeter的三个重要组件
      • 线程组
      • HTTP请求
      • 查看结果树
    • JMeter参数化
      • 用户定义的变量
      • 用户参数
      • CSV数据文件设置
      • 函数
      • 四种参数化方式的不同
    • JMeter断言
    • JMeter关联
      • 正则表达式
      • XPath提取器
      • JSON提取器
    • JMeter属性
    • JMeter录制脚本
    • JMeter直连数据库
    • 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,因此需要注意时间的换算
  • 固定定时器

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

你可能感兴趣的:(测试相关,jmeter)