性能实战

霍格沃兹测试开发学社

ceshiren.com

目录

JMeter介绍

JMeter安装

JMeter启动提示

# 不要使用GUI模式进行负载测试 GUI模式只是压测脚本的创建和调试
Dont use GUI mode for load testing !, only for Test creation and Test debugging.
# 如果想要进行负载测试 使用CLI模式 即非GUI模式 -- 静默压测会详细介绍
For load testing, use CLI Mode (was NON GUI):
   jmeter -n -t [jmx file] -l [results file] -e -o [Path to web report folder]
# 可以增加Java的堆来满足压测需求
& increase Java Heap to meet your test requirements:
# 修改JMeter文件的Java堆变量
   Modify current env variable HEAP="-Xms1g -Xmx1g -XX:MaxMetaspaceSize=256m" in the jmeter batch file

压测脚本四要素

用户定义的变量

线程组件

产品介绍

  • 被压测演示例子程序说明:
    • 仅为用于课堂演示,被压测程序,无实际业务逻辑,Mock应用
    • 简单模拟一个订餐业务逻辑的Restful API 接口交互业务逻辑过程
    • 包含POST 、 GET、DELETE 请求

需求说明

  • 被压测演示例子程序说明:
  • 包含4个练习用接口
  • Demo:
    • 运行一下
    • 源码讲解用法

用户登录

  • 定义请求名称:用户登录
  • 配置 Host 、Port、Path = /api/v1/user/login
  • 配置 Method = POST
  • 在Http Request中添加 Http Header Manager, 管理该请求的header信息
  • 添加 “View Result Tree” 用于查看 请求/响应 详情

请求头提取

  • 在Http Header Manager中配置如下参数
    • Content-Type : application/json
    • accesstoken:登录接口获取

浏览菜单

  • 创建浏览菜单接口请求

    • 添加HttpRequest请求
    • 配置请求名称:浏览菜单
    • 输入hostname, port, path = /api/v1/menu/list
    • 设定 Method = GET
  • 添加HTTP头管理器。

jmeter中文显示问题的解决

  • 解决乱码问题 -> 在<jmeter_home>/bin/jmeter.properties配置文件中设置 sampleresult.default.encoding=utf-8
  • 解决Unicode 显示成可读中文的问题 -> 将 <ijmeter_proj>/unicode2utf8/unicode2utf8.js 内容复制粘贴到 BeanShell PostProcessor 中

订单确认

  • 创建订单确认接口请求
    • 添加HttpRequest请求
    • 配置请求名称:订单确认
    • 输入hostname, port, path = /api/v1/menu/confirm
    • 设定 Method = POST

本章小结

  • POST,GET, DELETE 接口请求
  • 请求中的配置参数 host, port, path
  • body data中的请求参数 - json
  • Http Request Header
  • 接口响应结果
  • 一点点调试小技巧 – 接口错误 vs 接口没有(404)

Json后置处理器

不同的用户登录会是不同的token,需要把信息头的token不能固定,要根据不同的用户返回的结果放入。

CSV多用户导入

  • 从 CSV文件中导入多用户名 + 密码
  • 解析access token,获得用户的正确认证标识
  • jmeter中的参数传递

静默压测

  • 静默 -> 脱离UI运行JMeter压测
  • 好处:命令运行更容易“搞事情”
  • 命令格式: jmeter –n –t $jmx_file -l $jtl_file
  • jmx: JMeter压测程序脚本文件,压测控制过程记录在jmx文件中
  • jtl 文件是JMeter压测请求响应数据的原始文件

Web压测报告生成

  • 命令格式: jmeter -g /fullpath/result-file -e -o /fullpath/report/folder

自动化压测

  • 为啥要自动化压测呢?
    • 手动逐步加压
    • 需要人肉改并发数,然后等待完成
    • 烦 !!!!!
  • 所以,制定好策略,让程序自动加压,自动等待;完成后看压测监控记录,或者坐收报告
  • 计算机努力的干活,我去做更重要的事情
  • 希望测试生涯由此变得美好一些

自动化压测

  • 实现思路:
  • JMeter 脚本 (.jmx 文件) - 压测逻辑 与 xml 文件
  • Shell – 控制逻辑
  • JMeter 静默运行 – 脱离UI限制,使得自动化运行更稳定 jmeter –n –t $jmx_file -l $jtl_file
    注: jtl 文件是jmeter压测请求响应数据的原始文件

自动化压测

  • 生成Web Report,命令: jmeter -g <jmx_file> -e -o <web_report_path>
  • 静默压测+生成 Web 压测报告整合 jmeter –n –t $jmx_file -l $jtl_file -e -o <web_report_path>

自动化压测

  • 程序流程图

自动化压测

  • 命令行导入并发数变量 jmeter … –Jthread=100