前往小程序,Get更优阅读体验!
立即前往
首页
学习
活动
专区
圈层
工具
发布
首页
学习
活动
专区
圈层
工具
MCP广场
社区首页 >专栏 >jmeter入门实操,简单上手分布式压测

jmeter入门实操,简单上手分布式压测

作者头像
怪盗LYL
发布于 2022-06-13 04:15:49
发布于 2022-06-13 04:15:49
2.9K00
代码可运行
举报
文章被收录于专栏:测试开发真货测试开发真货
运行总次数:0
代码可运行

一:安装

首先第一步下载安装包,官网下载地址https://jmeter.apache.org/download_jmeter.cgi,windows系统和linux用一个。注:jmeter5.4.3需要java8及以上版本。

解压压缩文件,进入bin文件夹下双击jmeterw.cmd打开jmeter界面。注带w的为无控制台的。

默认是英文的,不喜欢可以改中文,进入bin文件夹,找到jmeter.properties,用文本编辑器打开。搜索language,更改为language=zh_CN。重启jmeter。

右键添加线程组,然后设置线程数等

普通线程组只能固定压测的线程数这里推荐阶梯式线程组Stepping Thread Group,需要安装插件:

安装插件:

从官网Documentation :: JMeter-Plugins.org下载Plugins Manager

将下载好的jar包放到apache-jmeter-5.4.3\lib\ext文件夹下。

然后重新打开jmeter,依次点击如下:选项 -Plugins Manager - Available Plugins - jpgc - Standard Set。最后点击右下角的 应用 按钮,安装完成后jmeter自动重启,重启后添加线程组即可看到我们下载的组件。

有了线程组就可以创建http请求了。

首先添加信息头,再配置元件里:按照实际的请求类型配置json,还是x-www-form-urlencoded,和postman里面请求头类型差不多。如果信息头管理器放到线程组下,那么线程组下所有 HTTP 请求都会共享这些 HTTP 信息头,如果信息头管理器放到 HTTP 请求下,那么只有该请求拥有这些 HTTP 信息头。我常用的两个类型:

Content-Type

application/x-www-form-urlencoded

Content-type

application/json

创建请求参数文件元件

以下字段描述内容来自:公众号 滑水的测开学习日记

「Filename」:文件名。test.dat文件名,保存参数化数据的文件目录,可选择相对或者绝对路径(建议填写相对路径(相对于bin目录),避免脚本迁移时需要修改路径)。如果直接写文件名,则该文件要放在bin目录中。对于分布式测试,主机和远程机中相应目录下应该有相同的CSV文件

「File encoding」:文件编码。er\csvtest.dat文件的编码格式,在保存时保存编码格式为UTF-8即可;

「Variable Names」:变量名。类似excel文件的文件头,起到标示作用,同时也是后续引用的标识符,建议采用有意义的英文标示;(如:有几列参数,在这里面就写几个参数名称,每个名称中间用分隔符分割,这里的 user,pwd,可以被利用变量名来引用:{pwd};

「Ignore first line」: 是否忽略首行。果csv中第一行是表头,而不是参数化用的数据,这里要选择True。

「limiter」:参数文件分隔符。默认是 “,”。用来在“Variable Names”中分隔参数,与参数文件中的分隔符保持一致即可。

「Allow quoted data?」:是否允许变量使用双引号,允许的话,变量将可以括在双引号内,并且这些变量名可以包含分隔符

「Recycle on EOF?」:是否循环读取参数文件内容;因为CSV Data Set Config一次读入一行,分割后存入若干变量中交给一个线程,如果线程数超过文本的记录行数,那么可以选择从头再次读入;

Ture:为true时,当已读取完参数文件内的测试用例数据,还需继续获取用例数据时,此时会循环读取参数文件数据(即:读取文件到结尾时,再重头读取文件);

False:为false时,若已至文件末尾,则不再继续读取测试数据;通常在“线程组线程数* 线程组循环次数>参数文件行数”时,选用false(即:读取文件到结尾时,停止读取文件);

8.「Stop thread on EOF?」:遇到文件描述符停止线程。当Recycle on EOF为False时(读取文件到结尾),停止进程,当Recycle on EOF为True时,此项无意义;

若为ture,则在读取到参数文件行末尾时,终止参数文件读取线程;

若为false,此时线程继续读取,但会请求错误,因此时读取的数据为EOF;

「Sharing mode」:线程共享模式。即参数文件的作用域,有以下几种方式:

△All threads:当前测试计划中的所有线程中的所有的线程都有效,默认;

△Current thread group:当前线程组中的线程有效;

△Current thread:当前线程有效;

创建一个参数文件。

添加http请求:高级选项里面选择java,可以避免一些端口释放报错。

创建响应断言:

创建结果树:

运行以后观察结果树:

压缩jmeter程序,这是为了将插件一起打包也可以使用官方下载的zip在主机解压以后将本地的apache-jmeter-5.4.3\lib\ext文件夹下jar包传到主机上apache-jmeter-5.4.3\lib\ext路径下。这里遇到了自己打包的zip解压以后sh文件运行没有权限的问题,推荐用官方下载的zip包直接解压。

使用rz命令或者其他如ftp软件上传到主机。

代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
unzip apache-jmeter-5.4.3.zip /*解压*/

查询jmeter版本

代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
jmeter.sh -v

如果遇到以下报错:

Unrecognized VM option 'MaxMetaspaceSize=256m'

Error: Could not create the Java Virtual Machine.

Error: A fatal exception has occurred. Program will exit.

检查javahome版本是不是低于1.8,可以通过修改主机java版本解决,如果不想修改主机环境的java版本可以在启动脚本修改

忘记传插件的后果:

执行压测命令:

代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
../jmeter.sh -n -t test.jmx -l test.jtl

-h 帮助 -> 打印出有用的信息并退出

-n 非 GUI 模式 -> 在非 GUI 模式下运行 JMeter

-t 测试文件 -> 要运行的 JMeter 测试脚本文件

-l 日志文件 -> 记录结果的文件

-r 远程执行 -> 在Jmter.properties文件中指定的所有远程服务器

-H 代理主机 -> 设置 JMeter 使用的代理主机

-P 代理端口 -> 设置 JMeter 使用的代理主机的端口号

通过jtl文件生成网页文件。

代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
../jmeter.sh -g test.jtl -o test(输出文件夹名字)

打包文件夹

代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
tar zcvf test.tar.gz ./test

下载到本地。打开index.html

总概况

Tps

响应时间耗时

接下来说一下分布式压测的配置。以下内容来自于小菠萝的博客

代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
https://www.cnblogs.com/poloyy/p/13233055.html

首先是压力机:

修改 jmeter.properties 文件

代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
vim ~/jmeter/apache-jmeter-5.4.3/bin/jmeter.properties
修改 server_port 端口 默认1009

可修改任意端口不被占用的接口

修改 server.rmi.port 端口,和 server_port 保持一致即可, 默认是会帮你保持一致的
设置 server.rmi.ssl.disable

默认 false,代表需要认证

设置为 true,减少不必要的麻烦

启动 jmeter-server 服务,脚本在bin下

如果压力机是 linux 或 mac

./jmeter-server -Djava.rmi.server.hostname=压力机ip

如果是window

jmeter-server.bat -Djava.rmi.server.hostname=压力机ip

注意:控制机要是参与压测也需要启动jmeter-server

检查防火墙

· 检查防火墙是否被关闭,防火墙会影响脚本执行和测试结构收集

· 确认 server_port 的端口没有被占用以及需要对外开放,端口占用会导致压力机报错

· 关于开放端口和关闭防火墙可以参考这篇博客:https://www.cnblogs.com/poloyy/p/12213297.html

控制机配置

修改 jmeter.properties(下面三步走)

修改 remote_hosts

· 多个压力机之间用 , 隔开

· 不同压力机端口可以不一样,不需要全部都一致

· 如果控制机也测试则加 127.0.0.1:port (实际使用中我修改为为压力机实际ip),然后修改 server_port 和 server.rmi.port (和压力机一样步骤)

设置 server.rmi.ssl.disable
设置 mode

· 用于查看分布式测试过程中,每个压力机的测试结果

· 若不启用,在运行过程中,控制器是无法实时看到压力机的结果

控制机运行分布式测试

启动远程服务器

这里会显示所有 remote_hosts 添加的压力机

点击启动后,查看压力机

Linux命令

、指定压测机启动,命令:

代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
./jmeter -n -t /path/test.jmx -R 127.0.0.1,127.0.0.2

②、启动所有压测机,命令:

代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
 ./jmeter -n -t /path/test.jmx -r
代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
sh ./apache-jmeter-5.4.3/bin/jmeter.sh -n -t /opt/jmeter/auth/xxx.jmx -r -l /opt/jmeter/auth/xxx.jtl

注意:分布式压测时候线程组是脚本的数量和压力机数量的乘积,例如有两台压力机,设置线程组为100个则实际实现过程中线程组数量为200个。

至此,我们学会了最基础的单接口阶梯线程组分布式压力测试并查看压力测试结果。

本文参与 腾讯云自媒体同步曝光计划,分享自微信公众号。
原始发表:2022-01-22,如有侵权请联系 cloudcommunity@tencent.com 删除

本文分享自 测试开发真货 微信公众号,前往查看

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

本文参与 腾讯云自媒体同步曝光计划  ,欢迎热爱写作的你一起参与!

评论
登录后参与评论
暂无评论
推荐阅读
编辑精选文章
换一批
Vue项目:学生管理系统
链接:https://pan.baidu.com/s/1032Wkr58iZfPJ7baJSsqiw 
陶然同学
2023/02/24
9410
Vue项目:学生管理系统
IDEA+SSM+SpringBoot+Vue+Element UI实现班级管理增删改查
环境搭建 SQL CREATE TABLE `tb_class` ( `c_id` varchar(32) NOT NULL COMMENT '班级ID', `c_name` varchar(50) DEFAULT NULL COMMENT '班级名称', `desc` varchar(200) DEFAULT NULL COMMENT '班级描述', PRIMARY KEY (`c_id`) ) ENGINE=InnoDB DEFAULT CHARSET=utf8; /*Data for
陶然同学
2023/02/27
1.3K0
IDEA+SSM+SpringBoot+Vue+Element UI实现班级管理增删改查
学生管理系统Element UI版
链接:https://pan.baidu.com/s/1FAb2WUSUwpRuwIB9Spy3oQ  提取码:1234
陶然同学
2023/02/24
1.5K0
学生管理系统Element UI版
Vue入门项目:学生管理系统之班级管理 【含源码】
目录 1.概述 2.表结构 3.搭建环境         3.1后端环境                 3.1.1项目名:student                 3.1.2坐标                 3.1.3核心配置文件                 3.1.4启动类                 3.1.5封装类                 3.1.6配置类(可选)         3.2前端环境                 3.2.1拷贝静态资源            
陶然同学
2023/02/27
1.6K0
Vue入门项目:学生管理系统之班级管理 【含源码】
【学生管理系统】班级管理
<template>  <el-card class="classes-add-card">    <el-form ref="form" :model="classes" label-width="100px">      <el-form-item label="班级ID">        <el-input v-model="classes.cid"></el-input>      </el-form-item>      <el-form-item label="班级名称">        <el-input v-model="classes.cname"></el-input>      </el-form-item>      <el-form-item label="选择老师">        <el-select v-model="classes.teacherIds" multiple placeholder="请选择老师" style="width: 100%">          <el-option v-for="(teacher,index) in teacherList" :key="index" :label="teacher.tname" :value="teacher.tid"></el-option>        </el-select>      </el-form-item>      <el-form-item label="授课老师">      </el-form-item>      <el-form-item label="助理老师">      </el-form-item>      <el-form-item label="辅导员老师">      </el-form-item>      <el-form-item>        <el-button type="primary">添加</el-button>        <el-button>重置</el-button>      </el-form-item>    </el-form>    {{classes}}  </el-card> </template> ​ <script> export default {  data() {    return {      classes: {        teacherIds: []      //选择的所有老师     },      teacherList: [],      //老师列表   } },  methods: {    async findAllTeacher() {      let { data:baseResult } = await this.$axios.get('/classes-service/teacher')      // 获得结果      this.teacherList = baseResult.data   } },  mounted() {    //查询所有的老师    this.findAllTeacher() }, } </script> ​ <style>  .classes-add-card {    width: 500px; } </style>
陶然同学
2023/02/24
3K0
【学生管理系统】班级管理
完整的SpringBoot+Vue增删改查(学生管理)
md文档可在点击下方小卡片获取! 1.搭建环境 1.1 创建项目 创建项目:exam-student-vue 1.2 添加坐标 <parent> <groupId>org.springframework.bootgroupId> <artifactId>spring-boot-starter-parentartifactId> <version>2.1.6.RELEASEversion> <relativePath/>
Maynor
2021/12/06
7.5K1
完整的SpringBoot+Vue增删改查(学生管理)
vue脚手架搭建2022年6月版本(保姆级-直接到路由使用)
可以在C盘下【C:\Program Files\nodejs】找到【node.exe】文件
红目香薰
2022/11/30
6660
vue脚手架搭建2022年6月版本(保姆级-直接到路由使用)
Spring+Vue增删改查实例
前端地址:https://github.com/Snowstorm0/SpringAndVue-vue
代码的路
2022/08/23
3620
Spring+Vue增删改查实例
【学生管理系统】权限管理之用户管理
package com.czxy.classes.mapper; ​ import com.baomidou.mybatisplus.core.mapper.BaseMapper; import com.czxy.domain.TbUser; import org.apache.ibatis.annotations.*; ​ import java.util.List; ​ /** * @author 桐叔 * @email liangtong@itcast.cn * @description */ @Mapper public interface TbUserMapper extends BaseMapper<TbUser> { ​    @Select("SELECT * FROM tb_user")    @Results({            @Result(property = "uid", column = "u_id"),            @Result(property = "userName", column = "user_name"),            @Result(property = "password", column = "password"),            @Result(property = "gender", column = "gender"),            @Result(property = "image", column = "image"),            @Result(property = "roleList", many = @Many(select = "com.czxy.classes.mapper.SysRoleMapper.findAllByUid") , column = "u_id")   })    public List<TbUser> findAll(); } ​
陶然同学
2023/02/24
1.3K0
【学生管理系统】权限管理之用户管理
【腾讯云Cloud Studio实战训练营】如何轻松实现一个Springboot+Vue学生管理系统及我的使用感受
在这个博客中,我将介绍如何使用Cloud Studio打造一个基于Spring Boot和Vue的学生管理系统。该系统旨在提供一个简单而功能丰富的平台,用于管理学生的信息和课程,并提供一系列功能来增强教育管理的效率和便捷性。
Maynor
2023/07/24
7250
【腾讯云Cloud Studio实战训练营】如何轻松实现一个Springboot+Vue学生管理系统及我的使用感受
django+pymysql搭建一个管理系统(一)
django+pymysql搭建一个管理系统(一) 后续进行代码更新,优化 一.程序架构 二.mysql表单创建 zouye库:存信息相关的 #班级表 create table classes( ci
小小咸鱼YwY
2019/09/11
1.7K0
django+pymysql搭建一个管理系统(一)
【学生管理系统】权限管理之角色管理
   @PostMapping("/addPerm")    public BaseResult addPermWithRoleId(@RequestBody SysRole sysRole) {        try {            // 添加权限            sysRolePermissionService.addPermWithRoleId(sysRole); ​            // 提示            return BaseResult.ok("授权成功");       } catch (Exception e) {            return BaseResult.error("授权失败");       } ​   }
陶然同学
2023/02/24
2K0
【学生管理系统】权限管理之角色管理
Vue网络请求
定位到D:\dev\project\webpack目录,打开控制台输入创建项目的命令:vue create 项名称
代码天才TTT
2023/08/01
9120
Vue网络请求
ASP.NET Core微服务(五)——【vue脚手架解析接口】
引入后【Ctrl+s】保存,可以看到服务的控制台提示没有【axios】,需要添加。
红目香薰
2022/11/28
5460
【Vue】day02-Vue基础入门
所谓指令修饰符就是通过“.”指明一些指令后缀 不同的后缀封装了不同的处理操作 —> 简化代码
陶然同学
2023/10/14
2800
【Vue】day02-Vue基础入门
【学生管理系统】用户管理之用户登录
<template>  <nuxt/> </template> ​ <script> export default { ​ } </script> ​ <style> ​ </style>
陶然同学
2023/02/24
1.8K0
【学生管理系统】用户管理之用户登录
Vue核心与实践(五)
title: Vue核心与实践(五) series: Vue核心与实践 abbrlink: cb55f74c date: 2024-04-28 12:39:31
程序员朱永胜
2024/04/30
1430
Vue核心与实践(五)
java从入门到精通二十五(vue和element 对项目的改进)
我们之前获取前端表单数据的时候,我们需要进行大量的操作。当前我只是进行了浅显的一些认识。
兰舟千帆
2022/07/16
9190
java从入门到精通二十五(vue和element 对项目的改进)
vue+axios实现评论留言板
这里的评论数据以及添加数据都是用的FastAPI,然后再用axios发送请求,获取评论以及添加评论。
SingYi
2022/07/14
1.1K0
vue+axios实现评论留言板
③Vue3---快速入门
v-show:(控制元素展示还是隐藏) 不满足条件,span标签还是会被渲染。只是通过CSS的display属性设置为none。代表隐藏。
用户11288958
2025/01/17
1420
③Vue3---快速入门
推荐阅读
相关推荐
Vue项目:学生管理系统
更多 >
领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档
本文部分代码块支持一键运行,欢迎体验
本文部分代码块支持一键运行,欢迎体验