前往小程序,Get更优阅读体验!
立即前往
首页
学习
活动
专区
工具
TVP
发布
社区首页 >专栏 >Jmeter使用及压测

Jmeter使用及压测

原创
作者头像
iginkgo18
修改2021-06-16 14:24:41
8200
修改2021-06-16 14:24:41
举报
文章被收录于专栏:devops_k8sdevops_k8s

介绍

Apache JMeter是Apache组织开发的基于Java的压力测试工具。JMeter 可以用于对服务器、网络或对象模拟巨大的负载,来自不同压力类别下测试它们的强度和分析整体性能。另外,JMeter能够对应用程序做功能/回归测试,通过创建带有断言的脚本来验证你的程序返回了你期望的结果。为了最大限度的灵活性,JMeter允许使用正则表达式创建断言;

安装

JDK

Jmeter

1 . 直接访问官网下载编译好的版本;

2 . 解压(建议至/Applications 目录)后目录结构如下图:

3 . 添加环境变量

打开 ~/.bash_profile文件

添加以下指令:

export JMETER_HOME=/Applications/apache-jmeter-5.2.1/bin

export PATH=$JMETER_HOME:$PATH:.

执行source ~/.bash_profile使环境变量生效

4 . 执行jmeter -v出现下图内容则安装成功

启动Jmeter

执行jmeter,将启动JMeter,在终端会有如下输出:

在输出中提示不能使用图形界面进行负载测试,只能创建和调试测试计划,负载测试需要执行如下命令:jmeter -n -t [jmx file] -l [results file] -e -o [Path to web report folder]

另外提示需要增加JVM的Heap配置去满足自己的测试需求;

在终端启动JMeter后会自动打开图形界面,如下图:

可操作菜单Options => Choose Language => Chinese 进行中文语言的切换:

模拟压测环境

创建测试

Jmeter-http接口测试添加步骤

创建线程组

在左侧的"TestPlan"上右键 【添加】-->【Threads(Users)】-->【线程组】,设置线程数和循环次数。只设置这两个即可,比如100的线程数,1次循环

配置元件

在我们刚刚创建的线程组上右键 【添加】-->【配置元件】-->【HTTP请求默认值】。只需要配置协议、地址和端口这三项即可,这样后面所有的请求都是基于现在的这个进行的,比如http://127.0.0.1:8080,后面的的请求只需要使用path即可

http请求

在“线程组”右键 【添加-】->【samlper:取样器】-->【HTTP 请求】设置我们需要测试的API的请求路径和数据。我这里是用的json

添加请求头

线程组上右键 [添加] --> [配置元件] --> [HTTP信息头管理器]

添加断言

线程组上右键 【添加】-->【断言】-->【响应断言】,根据响应的数据来判断请求是否正常。比如只根据状态码判断是否正常。

要测试的响应字段:响应代码

模式匹配规则:Equales

要测试的模式:200

错误提示信息:“出错啦!”

添加查看结果树

线程组上右键 【添加】-->【监听器】-->【察看结果树】。点击工具栏上的运行按钮就可以看到结果了

添加Summary Report

线程组上右键 【添加】-->【监听器】-->【Summary Report:汇总报告】。点击工具栏上的运行按钮就可以看到结果了

以上的测试计划已构建完整,点击左上角的报错按钮保存下

执行测试计划

cmd中执行:进入jmeter的bin目录,执行下面的命令

jmeter -n -t [jmx file] -l [results file] -e -o [Path to web report folder]

  • jmx file:测试计划文件路径
  • results file:测试结果文件路径
  • Path to web report folder:web报告保存路径

e.g.:jmeter -n -t [testplan/RedisLock.jmx] -l [testplan/result/result.txt] -e -o [testplan/webreport]

秒杀接口压测

1 . 需要满足的条件:

  • 第一步使用邮箱地址、密码登录获取到返回的token
  • 第二步携带token请求秒杀接口

需要邮箱地址、密码及返回的token

2 . jmeter测试需要用到的技术

  • jmeter操作数据库,读取邮箱地址和密码
  • jmeter关联,使用第一步返回的token作为参数执行第二步,jmeter关联就可以保存这个token信息

Jmeter操作数据库

1.下载mysql-connector-java-5.1.7-bin.jar,地址:https://dev.mysql.com/downloads/connector/j/

  • 选择Platform Independent
  • 选择ZIP文件进行下载

2.解压,把里面的jar包放到jmeter的lib目录下

3.配置连接信息

  • 线程组右键添加“配置原件”--“JDBC Connection Configuration”
  • 线程组右键添加“samlper:取样器” -- “JDBC Request”
  • 在TestPlan页面,点击浏览 ,将目录或jar添加到类路径 Add directory or jar to classpath。此处选择我们刚刚放在lib下的jar即可
  • JDBC Connection Configuration页面配置连接信息
  • 数据库:mysql
  • DriverName-->com.mysql.jdbc.Driver
  • URL--> jdbc:mysql://47.94.149.143:3306/{jemeter}?allowMultiQueries=true&serverTimezone=UTC
  • 用户名、密码

4.使用

在JDBC Request 页面

Jmeter关联

1.添加关联

  • 在某个请求上右键添加”后置处理器“ -- ”json提取器“
  • 设置
  • 响应字段:主体
  • 引用名称:token
  • 正则表达式:$.key1.key2

2.获取关联数据

  • parameters中获取:${token}

压测指标

1 . 压测前要明确压测功能和压测指标,一般需要确定的几个问题;

2 . 固定接口参数进行压测还是进行接口参数随机化压测?

3 . 要求支持多少并发数?

4 . TPS(每秒钟处理事务数)目标多少?响应时间要达到多少?

代码语言:javascript
复制
jdbc request:设置结果集存储的变量:user

BeanShell 后置处理器:

var email = vars.getObject("user").get(0).get("email");
vars.put("email",email.toString());

测试问题记录:

  • 并发查询怎么确保每个线程一个用户?使用计数器,不勾选“与每用户独立的跟踪计数器”选项
代码语言:javascript
复制
select email from front_user WHERE email not in (SELECT uemail from orders) limit ${user_offset},1 
  • 相隔时间很小的时候,可能一个用户会下单两次都成功
代码语言:javascript
复制
SELECT email FROM shop_sys_front_user WHERE email NOT in (SELECT uemail FROM shop_product_srv.shop_orders_orders) LIMIT 1;

原创声明:本文系作者授权腾讯云开发者社区发表,未经许可,不得转载。

如有侵权,请联系 cloudcommunity@tencent.com 删除。

原创声明:本文系作者授权腾讯云开发者社区发表,未经许可,不得转载。

如有侵权,请联系 cloudcommunity@tencent.com 删除。

评论
登录后参与评论
0 条评论
热度
最新
推荐阅读
目录
  • 介绍
  • 安装
    • JDK
      • Jmeter
      • 启动Jmeter
      • 模拟压测环境
      • 创建测试
        • 创建线程组
          • 配置元件
            • http请求
              • 添加请求头
                • 添加断言
                  • 添加查看结果树
                    • 添加Summary Report
                      • 执行测试计划
                      • 秒杀接口压测
                        • Jmeter操作数据库
                          • Jmeter关联
                            • 压测指标
                            领券
                            问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档