草庐IT

JMeter的使用

万山寒 2023-04-13 原文

JMeter的使用

注意: jmeter必须要有jdk环境,如果没有,先安装jdk

Jmeter的一些地址

下载JMeter

插件下载地址

jmeter官方使用文档,里面非常全

目前发现的比较全的博主

JMeter的使用

配置环境变量

  • 添加JMETER_HOME,变量为jmeter解压目录,eg:F:\solf_ware\apache-jmeter-5.5
  • CLASSPATH变量新加%JMETER_HOME%\lib\ext\ApacheJMeter_core.jar; %JMETER_HOME%\lib\jorphan.jar;
  • PATH新加;%JMETER_HOME%\bin
  • 注意:配置时如果是改变的系统环境变量而不是用户环境变量,cmd执行时必须是管理员

常用插件

下载完Plugins Manager后,把它放到jmeter解压目录的lib\etc下,插件都是放这个目录,然后重新打开jmeter,可以看到选项——>Plugins Manager,再点击Available Plugins就是搜索插件选项就可以搜索下载插件

使用

设置中文以及字体大小

打开bin/jmeter.properties

设置为中文:

language=zh_CN

设置字体大小:

这里我的win10只有方法一有效

  1. 方法一

    #这个是修改的字体初始倍数,但貌似要点击一次放大或缩小才起作用
    jmeter.hidpi.mode=true
    jmeter.hidpi.scale.factor=1.6
    
  2. 方法二

    jsyntaxtextarea.font.family=Hack #默认就是Hack
    jsyntaxtextarea.font.size=32 #默认=14
    jmeter.toolbar.icons.size=32x32 #图标比率,默认是22x22,可用19x19、24x24、32x32、48x48
    jmeter.tree.icons.size=32x32
    
  3. 方法三

    打开bin--->jmeter.bat-->编辑在@echo of下添加并保存:

    set JVM_ARGS=%JVM_ARGS% -Dswing.plaf.metal.controlFont=Dialog-30
    set JVM_ARGS=%JVM_ARGS% -Dswing.plaf.metal.systemFont=Dialog-30
    set JVM_ARGS=%JVM_ARGS% -Dswing.plaf.metal.userFont=SansSerif-30
    set JVM_ARGS=%JVM_ARGS% -Dswing.plaf.metal.smallFont=SansSerif-30
    

修改运行内存

  • windows下在bin/jmeter.bat文件里面修改

    set HEAP=-Xms1g -Xmx1g -XX:MaxMetaspaceSize=256m
    

  • linux在bin/jmeter修改

    ${HEAP:="-Xms1g -Xmx1g -XX:MaxMetaspaceSize=256m"}
    

创建测试计划

注意: 图形界面只能创建测试计划,如果要压测,必须使用命令的形式运行测试计划脚本。

  1. 右键测试计划,添加线程组

  2. 这里我们添加一个简单的http测试,…未完待续

测试计划的组件

测试计划的请求参数

  • 使用配置元件,如:用户自定义变量http请求默认值来设置请求ipport;HTTP请求头设置header;CSV data set config 来获取csv形式的大批量参数;
  • 可以使用函数助手来生成函数,以获取需要生成的请求参数
  • 添加前置处理器后置处理器来对请求参数或请求结果进行处理
  • 使用逻辑控制器,来完成多个请求之间的联调,比如:if控制器获取上一个接口请求结果,来判断是否请求另一个接口;事务控制器发起同一个事务请求
  • 添加取样器来增加测试请求内容,如http请求
  • 使用断言来判定请求是否成功,如响应断言、json断言。
  • 使用定时器来完成各种延时的操作
  • 使用监听器来记录并分析请求结果,要注意的是,图表类监听器最好只用在创建\debug测试计划时,不能用于压测。

保存测试计划

**注意:**这里直接点击保存按钮是是没有用的,必须选择文件选项中的保存,否则后面也将无法再打开该测试计划

执行测试计划

注意:

  • GUI图形界面仅用于压力测试的创建和调试,执行需要使用命令执行脚本
  • 根据运行内存需求修改JMeter批处理文件的环境变量,它的默认值为:HEAP="-Xms1g -Xmx1g -XX:MaxMetaspaceSize=256m"
  • 强烈建议在测试计划中不要启动聚合报告、tps、结果树等等UI监听器,在运行之前可以将其禁用,或只使用简单数据监听生成jtl或者在执行测试计划时用-l指定jtl文件,应该使用命令来分析测试结果的jtl文件生成结果报告,否则会影响性能,只要你安装了tps之类的插件,命令生成的网页报告都会有这些内容,不需要再用GUI界面查看

执行命令:

 jmeter -n -t [jmx file] -l [results file] -e -o [Path to web report folder]
 # 中文解析:
jmeter -n -t 要运行的测试计划文件.jmx -l 测试结果保存路径.jtl -e -o web报告保存路径。
# 注意的是,生成html分析文件不应该一起执行,会消耗性能,这里加上只是演示而已
# 运行测试计划命令
jmeter -n -t 要运行的测试计划文件.jmx -l 测试结果保存路径.jtl
# 运行测试计划后,使用命令分析jtl文件以生成html图表报告。
jmeter -g 测试结果保存路径.jtl  -e -o web报告保存路径。

说明:

  • -n非图形界面运行
  • -t 指定要执行的测试计划文件
  • -l指定结果文件jtl之类的存储路径
  • -e -o 指定web报告保存路径。
  • -g 指定JTL文件的相对路径或完整路径

报告类型及解析

聚合报告(Aggregate Report)

  • Samples:采样数/请求数
  • Average:平均响应时间,单位毫秒
  • Median:响应时间的一个中间值,单位毫秒
  • 90%Line:90%的请求响应时间,单位毫秒
  • 95%Line:95%的请求响应时间,单位毫秒
  • 99%Line:99%的请求响应时间,单位毫秒
  • Min:请求最小响应时间,单位毫秒
  • Maximum:请求最大响应时间,单位毫秒
  • Error %:响应错误率
  • Throughput:每秒的吞吐量,
  • Received KB/sec:每秒接收的数据量
  • Send KB/sec:每秒发送的数据量

图形结果(Graph results)

汇总报告(Summary Report)

Jmeter的函数使用

函数列表

  • threadNum: 获取线程号
  • threadGroupName: 获取线程组名称
  • samplerName: 获取取样器名称(标签)
    machineIP: 获取本地机器的IP地址
  • machineName: 获取本地机器名称
  • time: 以各种格式返回当前时间
  • timeShift: 以各种格式返回日期,并添加指定的秒/分钟/小时/天的数量
  • log: 记录(或显示)消息(并返回值)
  • logn: 记录(或显示)消息(空返回值)
  • StringFromFile: 从文件中读取一行
  • FileToString :读取整个文件
  • CSVRead :从CSV分隔文件中读取
  • XPath :使用XPath表达式从文件中读取
  • StringToFile :写一个字符串到文件
  • counter: 产生一个递增的数字
  • dateTimeConvert :将日期或时间从源格式转换为目标格式
  • digest :生成摘要(SHA-1,SHA-256,MD5 …)
  • intSum :添加整数
  • longSum :加长号
  • Random :产生一个随机数
  • RandomDate :生成特定日期范围内的随机日期
  • RandomFromMultipleVars: 从由|分隔的一组变量的值中提取元素
  • RandomString: 产生随机字串
  • UUID: 生成随机类型4 UUID
  • groovy :运行一个Apache Groovy脚本
  • BeanShell :运行一个BeanShell脚本
  • javaScript: 处理JavaScript(Nashorn)
  • jexl2 :评估Commons Jexl2表达式
  • jexl3 :评估Commons Jexl3表达式
  • isPropDefined :测试属性是否存在
  • property: 读取Jmeter属性
  • P :读取属性(速记方法)
  • setProperty :设置一个JMeter属性
  • split :将字符串拆分为变量
  • eval :评估变量表达式
  • evalVar:计算存储在变量中的表达式
  • isVarDefined: 测试变量是否存在
  • V :评估一个变量名
  • char :从数字列表生成Unicode字符值
  • changeCase: 按照不同的模式更改大小写
  • escapeHtml :使用HTML编码对字符串进行编码
  • escapeOroRegexpChars: 引用ORO正则表达式使用的元字符
  • escapeXml :使用XMl编码对字符串进行编码
  • regexFunction :使用正则表达式解析先前的响应
  • unescape :包含Java转义符的处理字符串(例如\ n和\ t)
  • unescapeHtml :解码HTML编码的字符串
  • urldecode:解码应用程序/ x-www-form-urlencoded字符串
  • urlencode:将字符串编码为application / x-www-form-urlencoded字符串
  • TestPlanName: 返回当前测试计划的名称

BeanShell常用变量

vars

// 代码使用vars
//string类型,
vars.put("error_info1", error_info);
vars.get("error_info1");

//其他object类型:list、数组、Map
vars.putObjcet("flag", list);
vars.getObjcet("flag", list);

//如果要在其他窗口调用参数:BeanShell 函数
//    使用函数 ${__BeanShell( vars.getObjcet("flag"), )}

log:

log.info("")

prev:

获取前一个sample的响应;

 prev.getResponseDataAsString()
 prev.getResponseCode()

props

props和vars区别:

  • props 继承了Hashtable的累,所以拥有与vars类似的get和put 方法, 另外还有继承Hashtable的其他方法
  • props是多个线程组共享的,可以跨线程组使用,而vars只能在当前线程组共享

多出的方法

  • 判断某属性是否存在, 返回布尔值
props.containsKey(``"PROPERTY_NAME"``)  
  • 判断某项值是否存在,返回布尔值:
props.contains("PROPERTY_VALUE")
  • 删除某个值
props.remove("PROPERTY_NAME")
  • 所有属性以字符串形式表示
props.toString()

BeanShell PostProcessor使用

**注意:**如果要使用jmeter没有的包,必须把jar包放入lib/目录,如:fastjson

//获取获取请求的返回值
String response = prev.getResponseDataAsString();
//日志打印获取请求的返回值
//log.info(response);
vars.put("cert_sign", response)
    
import com.alibaba.fastjson.JSON;
import com.alibaba.fastjson.JSONArray;
import com.alibaba.fastjson.JSONObject;


//获取获取请求的返回值
String json = prev.getResponseDataAsString();
JSONObject jso = JSON.parseObject(json);
String error_info = jso.getString("error_info");
//string类型,
vars.put("error_info1", error_info);
vars.get("error_info1");

//其他object类型
vars.putObjcet("flag", true);
vars.getObjcet("flag", true);

//如果要在其他窗口调用参数:
//    使用函数 ${__BeanShell( vars.getObjcet("flag"), )}

有关JMeter的使用的更多相关文章

  1. ruby - 如何使用 Nokogiri 的 xpath 和 at_xpath 方法 - 2

    我正在学习如何使用Nokogiri,根据这段代码我遇到了一些问题:require'rubygems'require'mechanize'post_agent=WWW::Mechanize.newpost_page=post_agent.get('http://www.vbulletin.org/forum/showthread.php?t=230708')puts"\nabsolutepathwithtbodygivesnil"putspost_page.parser.xpath('/html/body/div/div/div/div/div/table/tbody/tr/td/div

  2. ruby - 使用 RubyZip 生成 ZIP 文件时设置压缩级别 - 2

    我有一个Ruby程序,它使用rubyzip压缩XML文件的目录树。gem。我的问题是文件开始变得很重,我想提高压缩级别,因为压缩时间不是问题。我在rubyzipdocumentation中找不到一种为创建的ZIP文件指定压缩级别的方法。有人知道如何更改此设置吗?是否有另一个允许指定压缩级别的Ruby库? 最佳答案 这是我通过查看ruby​​zip内部创建的代码。level=Zlib::BEST_COMPRESSIONZip::ZipOutputStream.open(zip_file)do|zip|Dir.glob("**/*")d

  3. ruby - 为什么我可以在 Ruby 中使用 Object#send 访问私有(private)/ protected 方法? - 2

    类classAprivatedeffooputs:fooendpublicdefbarputs:barendprivatedefzimputs:zimendprotecteddefdibputs:dibendendA的实例a=A.new测试a.foorescueputs:faila.barrescueputs:faila.zimrescueputs:faila.dibrescueputs:faila.gazrescueputs:fail测试输出failbarfailfailfail.发送测试[:foo,:bar,:zim,:dib,:gaz].each{|m|a.send(m)resc

  4. ruby-on-rails - 使用 Ruby on Rails 进行自动化测试 - 最佳实践 - 2

    很好奇,就使用ruby​​onrails自动化单元测试而言,你们正在做什么?您是否创建了一个脚本来在cron中运行rake作业并将结果邮寄给您?git中的预提交Hook?只是手动调用?我完全理解测试,但想知道在错误发生之前捕获错误的最佳实践是什么。让我们理所当然地认为测试本身是完美无缺的,并且可以正常工作。下一步是什么以确保他们在正确的时间将可能有害的结果传达给您? 最佳答案 不确定您到底想听什么,但是有几个级别的自动代码库控制:在处理某项功能时,您可以使用类似autotest的内容获得关于哪些有效,哪些无效的即时反馈。要确保您的提

  5. ruby - 在 Ruby 中使用匿名模块 - 2

    假设我做了一个模块如下:m=Module.newdoclassCendend三个问题:除了对m的引用之外,还有什么方法可以访问C和m中的其他内容?我可以在创建匿名模块后为其命名吗(就像我输入“module...”一样)?如何在使用完匿名模块后将其删除,使其定义的常量不再存在? 最佳答案 三个答案:是的,使用ObjectSpace.此代码使c引用你的类(class)C不引用m:c=nilObjectSpace.each_object{|obj|c=objif(Class===objandobj.name=~/::C$/)}当然这取决于

  6. ruby - 使用 ruby​​ 和 savon 的 SOAP 服务 - 2

    我正在尝试使用ruby​​和Savon来使用网络服务。测试服务为http://www.webservicex.net/WS/WSDetails.aspx?WSID=9&CATID=2require'rubygems'require'savon'client=Savon::Client.new"http://www.webservicex.net/stockquote.asmx?WSDL"client.get_quotedo|soap|soap.body={:symbol=>"AAPL"}end返回SOAP异常。检查soap信封,在我看来soap请求没有正确的命名空间。任何人都可以建议我

  7. python - 如何使用 Ruby 或 Python 创建一系列高音调和低音调的蜂鸣声? - 2

    关闭。这个问题是opinion-based.它目前不接受答案。想要改进这个问题?更新问题,以便editingthispost可以用事实和引用来回答它.关闭4年前。Improvethisquestion我想在固定时间创建一系列低音和高音调的哔哔声。例如:在150毫秒时发出高音调的蜂鸣声在151毫秒时发出低音调的蜂鸣声200毫秒时发出低音调的蜂鸣声250毫秒的高音调蜂鸣声有没有办法在Ruby或Python中做到这一点?我真的不在乎输出编码是什么(.wav、.mp3、.ogg等等),但我确实想创建一个输出文件。

  8. ruby-on-rails - 'compass watch' 是如何工作的/它是如何与 rails 一起使用的 - 2

    我在我的项目目录中完成了compasscreate.和compassinitrails。几个问题:我已将我的.sass文件放在public/stylesheets中。这是放置它们的正确位置吗?当我运行compasswatch时,它不会自动编译这些.sass文件。我必须手动指定文件:compasswatchpublic/stylesheets/myfile.sass等。如何让它自动运行?文件ie.css、print.css和screen.css已放在stylesheets/compiled。如何在编译后不让它们重新出现的情况下删除它们?我自己编译的.sass文件编译成compiled/t

  9. ruby - 使用 ruby​​ 将 HTML 转换为纯文本并维护结构/格式 - 2

    我想将html转换为纯文本。不过,我不想只删除标签,我想智能地保留尽可能多的格式。为插入换行符标签,检测段落并格式化它们等。输入非常简单,通常是格式良好的html(不是整个文档,只是一堆内容,通常没有anchor或图像)。我可以将几个正则表达式放在一起,让我达到80%,但我认为可能有一些现有的解决方案更智能。 最佳答案 首先,不要尝试为此使用正则表达式。很有可能你会想出一个脆弱/脆弱的解决方案,它会随着HTML的变化而崩溃,或者很难管理和维护。您可以使用Nokogiri快速解析HTML并提取文本:require'nokogiri'h

  10. ruby - 在 64 位 Snow Leopard 上使用 rvm、postgres 9.0、ruby 1.9.2-p136 安装 pg gem 时出现问题 - 2

    我想为Heroku构建一个Rails3应用程序。他们使用Postgres作为他们的数据库,所以我通过MacPorts安装了postgres9.0。现在我需要一个postgresgem并且共识是出于性能原因你想要pggem。但是我对我得到的错误感到非常困惑当我尝试在rvm下通过geminstall安装pg时。我已经非常明确地指定了所有postgres目录的位置可以找到但仍然无法完成安装:$envARCHFLAGS='-archx86_64'geminstallpg--\--with-pg-config=/opt/local/var/db/postgresql90/defaultdb/po

随机推荐