【性能测试】五、jmeter—脚本增强

本文介绍了在没有接口文档的情况下如何使用抓包工具如Fiddler进行接口测试,并详细阐述了JMeter的脚本录制与增强功能。包括使用代理服务器录制脚本,脚本中的关联、变量定义,以及JMeter的各种函数和属性的运用。同时,讨论了线程组的执行顺序和性能测试中的注意事项。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

一、没有接口文档如何处理

抓包: F12 、fiddler、wireshark、Charles
第三接口:api接口
swagger:

二、 写脚本方法拓展

录制脚本

  • badboy --曾经很流行,现在已经不维护,已经被遗弃
  • 代理录制:用于脚本参数比较多,或者用手动编写脚本,一时半会写不出来。

代理录制:

  • 代理服务器: 自己启动一个代理服务器

  • 本地:要使用代理服务器的ip和端口,使用自己启动的代理服务器

  • 步骤:

    • 1.添加线程组
    • 2.测试计划>非测试元件>http代理服务器
      • ip就是你自己电脑的ip,port是可以修改,默认8888,可以随意修改
      • 目标控制器,一定要修改 修改为 测试计划>线程组
      • 添加过滤器,可以将不需要的请求过滤,不进行采集
    • 3.启动代理服务器时,会出现一个证书的弹窗;
      • 如果要抓取https,就必须使用证书。
      • 点击ok,可以在bin目录下生成一个有效期7天的证书,每次生成会覆盖之前的
      • 将证书安装到浏览器, 注意:有效期7天
    • 4.本地浏览器使用代理服务器上网
      • 在这里插入图片描述
      • 访问浏览器,可以看到录制到的请求。
      • 此步骤还可以通过chrome插件来实现,就不用去系统设置配置代理。参考:
  • 5.录制完成,关闭代理服务器,本地使用代理服务器配置关闭。

三、脚本功能增强

1.关联

  • 关联:前面接口的响应信息,有动态值,作为后续接口的参数参数

2.定义变量

jmeter中定义变量有两种:

  • 1.用户定义变量
    • 配置位置:测试计划>配置元件
    • 作用域:全局变量。作用于整个测试计划。在启动运行时,获取一次值,在运行过程中,不会动态获取值,值一直都不变。
    • 使用方法:
      • 定义:var_para: “abc” - -注意参数类型及引号
      • 调用:${var_para}
  • 2.用户参数
    • 配置位置:前置处理器
    • 作用域:当前线程组、或者当前取样器.获取一次值,在运行过程中,还会动态获取值
    • 使用方法:同上
    • 配置项:每次迭代更新一次:一个线程组下所有的接口,全部执行完1次,才算1个迭代

**注意:**如果将参数配置成可变参数:

对于获取一次值,在运行过程中,不会动态获取值,值一直都不变②获取一次值,在运行过程中,还会动态获取值的理解:

  • ①:该情况下,无论设置多少个线程组,还是运行多少次,参数值都不会变
  • ②:该情况下,不管是多个线程组、还是执行多次,都会获取到变化后的参数,每次都不一样。如果勾选【每次迭代更新一次】,可以在这一个迭代中参数不变。

3.jmeter的函数

  • 1.函数助手。tools>函数助手对话框,或者快捷键:CTRL+shift+f1
    在这里插入图片描述
  • 2.规则:
    • 双下划线开头
    • 函数名称,严格区分大小写
  • 3.常用函数
    • ${__counter(,)} 计数器
    • ${__dateTimeConvert(,)} 时间格式转换
    • ${__RandomDate(,)} 随机日期
    • ${__digest(,)} 加密 简单加密
    • ${__intSum(,)} 整数相加函数
    • ${__P(,)} 获取属性函数
    • ${__property(,)} 获取属性函数
    • ${__setProperty(,)} 设置属性函数
    • ${__Random(,)}
    • ${__RandomString(,)}
    • ${__threadNum} 获取线程号函数
    • ${__time(,)} 获取当前时间戳函数
    • ${__timeShift(,)} 数据格式化
    • ${__V(,)} 拼接函数
  • 4.调用函数
    • 点击生成按钮,可以将函数直接复制到粘贴板,粘贴到脚本中需要调用的地方即可
      在这里插入图片描述
    • 注意事项: 函数名称的大小写

4. jmeter的属性

回忆:
全局变量: 可以跨线程组,在运行过程中不会动态获取值。
局部变量:不能跨线程组,在运行过程中,还会动态获取值。
提问:
那么用户如果想变量可以跨线程组,还可以动态获取值,应该怎么做?
答:属性

  • 1.什么是属性?
    是jmeter工具自身带有的标签,
    以.properties结尾的文件,都是jmeter的属性配置文件。
    • .jmeter工具属性 --可能被改变的
      • 静态属性:写在properties文件中属性信息,都是静态属性
      • 动态属性:运行过程中,动态定义属性
    • 系统属性
      • 不可改变
    • .属性 /参数 /变量 的区别?
      • 属性是jmeter工具具有的,所以,jmeter中的线程组都可以使用
      • 参数/变量 ,有局限访问
  • 2.设置属性
    • 查看属性:测试计划>添加>非测试元件>属性显示
      在这里插入图片描述
      在这里插入图片描述
  • 设置属性
    使用设置属性函数${__setProperty(,)},将需要跨线程组使用的参数设置为属性
    在这里插入图片描述
  • 获取属性
    使用获取属性函数${__P(,)},获取设置为属性的参数,
  • 动态属性,是在运行过程中产生的,关闭jmeter,就是自动释放了。
  • 多个线程组的执行顺序?
    • 取样器从上到下,顺序执行
    • 线程组默认是并行执行
    • 在做性能测试时,不要勾选测试计划中:独立运行每个线程组。
      在这里插入图片描述
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值