Jmeter
agrapea
这个作者很懒,什么都没留下…
展开
-
Jmeter(119)-函数threadNum妙用
这样,如果需要使用100个用户,只需要加一个beanshell的前置处理器vars.put("user","test"+"${__threadNum}");要执行2个线程3次循环,发现每次循环时,接口中用户参数的数据就会不一样,变成了test1、test2、test3、test4、test5、test6,想到的第一个办法是,使用前置处理器User Parameters,定义参数user,值为test1和test2。如果使用csv也是这个效果,但是实际想要的是test1执行3次,test2执行3次。原创 2023-07-17 20:29:57 · 1203 阅读 · 0 评论 -
Jmeter(118)-json提取器如何直接提取响应是数组的值
在响应结果树中可以用json path tester进行测试,也就是说当返回的直接是数组的情况下,$.[*]就可以表示数据下的每个元素,$.[*].CN_DESCRIPTION就可以或者元素下某个具体字段的值了,其它。按以上的写法写入csv文件后字段并没有对齐,比如同一个英文名会被切分成2个字段,有时候响应的数据直接是一个数组的情况下,也可以用json提取器进行值的提取。目的是想提取这个数组下的每个值对应一行数据,以提取这几个数据为例。应该是这个字段中有逗号的原因,这个在之前讲过,可参考。原创 2023-03-14 09:46:57 · 1868 阅读 · 0 评论 -
Jmeter(117)——beanshell生成2进制文件
添加后置处理器,指定录音文件存放的位置filepath,通过getResponseData()获取字节数组,FileOutputStream、DataOutputStream写入。接口的响应内容是2进制文件,实际是一段录音文件,希望将响应内容生成aac格式的录音文件。原创 2023-03-09 14:03:25 · 660 阅读 · 0 评论 -
Jmeter(116)——写入xls登录案例实战
比如需要测试一堆登录信息是否可用,使用手机号、身份证、验证码进行登录,如果登录接口msg信息返回成功,则认为登录成功,否则失败。关于模板标题字段,只要确保最后3个字段是固定表示预期、实际、结果就行,其它可以任意减少或增加,就可以直接使用这个类下方法生成报告。第1至第3字段为传入登录接口的参数手机号、验证码、身份证号,第4列为期望结果,第5列实际结果,最后1列用背景色表示用例通过或失败。通过login接口msg的返回值与期望结果比较,得出最后的result,全部写入xls文件,最后的结果类似。...原创 2022-09-01 16:13:14 · 429 阅读 · 5 评论 -
Jmeter(115)——在jmeter中写入xls文件的基本方法
WritableFont wf=new WritableFont(WritableFont.createFont("宋体"),11,WritableFont.BOLD);//添加label对象,Label(column,row,content),在sheet中将label加入到单元格中,适用于以上单元格格式。log.info("单元格类型:"+sheet1.getCell(0,1).getType());//设置列宽度setcolumnview(列号,宽度)//添加DateTime对象。...原创 2022-08-29 14:25:21 · 625 阅读 · 0 评论 -
Jmeter(114)——在jmeter中读取xls文件的基本方法
在数据量不大时,我们可以使用xls格式文件进行读写操作,同时也可以对单元格内容进行设置,而不像csv文件一样保存后格式就无,还有数字特长时总是出现科学计数法,导致读取后内容有问题。将下载的jxl包放入到jmeter安装目录lib/ext下,此时打开jmeter,建立一个beanshell sampler,今天先学习下如何读取文件内容,在D盘根目录下创建以下文件,分别是手机号,验证码和ID。需要注意的是,在beanshell中,必须先import,然后再写方法,最后才调用方法。......原创 2022-08-26 15:31:41 · 2029 阅读 · 0 评论 -
Jmeter(113)——提取html中元素的CSS selector extractor
在做gui页面元素断言时,需要提取页面中的元素,可能会用到这个CSS selector extractor,实际我没有在工作中使用过,大抵看了下,定位元素方法,语法规则用的是jsoup,这个后续可以学习下。三、通过属性,[attr^=value], [attr$=value], [attr*=value]: 分别表示属性名以什么开头,以什么结尾,包含什么。二、通过class定位,以.class名称。四、选择器组合定位,tag.class。简单的尝试了以下一些方法,作为记录。一、通过id定位,#id名称。..原创 2022-08-12 11:28:45 · 1121 阅读 · 0 评论 -
Jmeter(112)——windows环境下内存溢出
找到安装目录bin下jmeter.bat文件,用记事本打开,搜索set Heap,将Xms设置为1g,Xmx=4g,通常情况下Xmx表示分配的最大内存不应大于实际机器内存的一半,保存后重启。这时候你会发现启动界面上的堆内存设置还是原来的1g,没有改变,我也一直没搞明白为什么。在执行压测过程中由于压力机本身的原因导致脚本出错,在日志中可以看到。但是可以通过jconsole查看VM参数,在cmd命令行下输入jconsole.exe。查看vm参数,实际已经是修改过后的值。...原创 2022-08-11 11:55:44 · 421 阅读 · 0 评论 -
jmeter(111)——如何测试单接口或某个事务的tps?
今天看论坛时无意中得到启动,可以通过stepping Thread Group进行不同线程数量的加压,具体参数说明上一节已讲过,现设置如下,总共启动20个线程,分5次加压,每次增加4个线程,每次持续30秒。从上图的聚合报告中看出不同并发数下对应的吞吐量和响应时间,其中在前4个阶梯时随着并发量增加响应时间增加,tps也随着增加,但是到了并发20时,响应时间增加,tps不再增加,说明已经到了吞吐量的拐点。同时通过查看下图,随着线程数增加一开始tps是线性增长,到16个时突然下降。......原创 2022-08-10 15:35:19 · 1687 阅读 · 0 评论 -
Jmeter(110)——阶梯式加压线程组Stepping Thread Group
传统的Thread Group线程组的加压方式只能在ramp up time内加载多少个线程,这样每秒加载的线程数量就是线程数/ramp up time ,有一个插件Stepping Thread Group可以帮助我们加压时进行阶梯式加压。Next:几秒内加多少个线程,并持续多久。上图中就是0秒内加20个线程,并且持续30秒,这样的话启动100个线程需要5步。Then,start:然后再启动多少个线程,上图中,首先没有设置等待,然后启动了20个线程。Then,hold for :所有线程启动后持续多久。.原创 2022-08-10 14:27:57 · 624 阅读 · 0 评论 -
Jmeter(109)——Transaction Controller
可以看到结果树和聚合报告中都增加了一个sample名为Transaction Controller,聚合报告中事务控制器的Average响应时间为2000ms,很显然是它下面两个取样器的响应时间之和,但是没有包括定时器的时间,但是在最后计算Throughput时值为1.1,表示每秒处理的事务数(包括其下所有的子项)为1.1个,这个值是怎么计算的?总的事务数是10个,所有事务执行完毕的时间是9秒(这个值可以从右上角的时间看到),那么10/9=1.1,很显然这个值是包含定时器的时间的。...原创 2022-08-03 11:49:52 · 470 阅读 · 1 评论 -
Jmeter(108)——Concurrency Thread Group
设置完毕以上参数,意思就是期望达到10个并发,这10个并发不是瞬间增长的,需要在1分钟内达到,并且分5次加压,即每60/5=12秒加压一次,每次增加并发数10/5=2个,达到10个并发后,运行1分钟。ThreadIterationslimit线程循环次数,默认空为无限循环,最后根据保持时间停止线程。HoldTargetRateTime保持时间,这里设置1分钟。这个线程组只有在启动时会设置阶梯加压,最后释放时会全部瞬时释放。RampUpTime加压时间,这里设置1分钟。......原创 2022-08-02 15:53:08 · 563 阅读 · 0 评论 -
Jmeter(107)——线程等待Thread.sleep
除了使用定时器、Thinktime外,还可以在beanshell中使用Thread.sleep(sleeptime)来设置等待时间,其中sleeptime的单位为ms。原创 2022-08-02 11:42:33 · 1597 阅读 · 0 评论 -
Jmeter(106)——http取样器中同请求一起发送参数中编码的作用
在http请求中当请求参数中包含一些特殊符号(指除了数字字母外)和中文外,请求的响应结果就会出现异常,检查时看到结果树中明明显示的请求参数没问题,可是就是不对。所以如果参数值中包含了这些特殊符号,请在请求时务必将URLEcode勾选上,以免出现编码格式问题。这时候要去后台看下请求日志,就会发现传过去的token参数值会有部分解析问题,所以响应会报token失效。比如,以下请求参数token。...原创 2022-07-18 10:42:23 · 497 阅读 · 0 评论 -
Jmeter(105)——读取csv文件参数时显示方块乱码
在91节中讲过在结果树中显示?乱码的解决方案Jmeter书中不会教你的(91)——dummy sampler中响应中文结果树中显示乱码?_agrapea的博客-CSDN博客在实际中还会遇到读取csv文件参数时显示方块字乱码比如这种,content和type都是从csv文件中读取的参数,其中方块字是中文乱码 尝试采用91中的解决方案无果,怀疑是文件格式有问题。解决方案:步骤1:将原csv文件用记事本打开,可以看到在这里其实没有乱码 步骤2:将其另存为,可以看到原编码格式ANSI改成utf-8保存 步骤3:重新原创 2022-07-12 10:15:58 · 640 阅读 · 0 评论 -
Jmeter(104)——前置处理器User Parameters
我们在遇到请求时如用户名和密码需要参数化,在用户量不多的情况下,可以使用前置处理器User Parameters去预设值一批用户名和密码的值,但是如果量大的情况下,还是建议使用csv。 将username和password参数化,引用变量来自于前置处理器User Parameters 每个线程会从User_1依次取值,比如执行3个线程,http请求中username依次会取u1,u2,u1如果是单个线程循环3次,那么http请求中username每次都会取第一个值u1...原创 2022-07-07 11:11:40 · 379 阅读 · 0 评论 -
Jmeter(103)——前置处理器RegEx User Parameters
实际中这个前置处理器RegEx User Parameters用的很少,需要配合正则表达式提取器一起使用,关于正则表达式提取器,可以看前一篇文章。Jmeter(102)——正则表达式提取器详解_agrapea的博客-CSDN博客作用:就是将正则表达器中提取的值,分组1和组2的值, 作为下一个请求入参的参数和值。比如正则表达式中提取的第一条userlist_1_g1=username,userlist_1_g2=Test001第二条userlist_2_g1=password,userlist_2_g2=12原创 2022-07-06 11:47:52 · 471 阅读 · 0 评论 -
Jmeter(102)——正则表达式提取器详解
之前在Jmeter书中不会教你的(8)——提取响应内容的神器JSON Extractor_agrapea的博客-CSDN博客中提到过如果要在一个提取器中设置两个变量的方法。 今天来看看正则表达式中《组》group的概念。 首先创建一个dummy sampler,响应数据如下,希望提取name和value中的值存放在变量userlist中 ...原创 2022-07-05 14:36:55 · 710 阅读 · 0 评论 -
Jmeter(101)——Beashell中Script File的用法
在beanshell sampler中编写如下,日志在下方打印出来。 beanshell用了这么久,Script file这里一直没用过,不知道怎么用。一开始看帮助文档时以为是执行另外一个脚本文件,于是将此脚本另存为jmx文件后,将其加入到这里的script file,执行后出错啦。 后来仔细斟酌了下,应该是beanshell的脚本文件,就是指在在Script下执行的这段脚本,于是将log.info("如何引用外部脚本文件");log.info("abc");log.info(Parameters);原创 2022-07-04 17:37:55 · 553 阅读 · 0 评论 -
Jmeter书中不会教你的(100)——函数V的使用
在41节及69节涉及过变量的嵌套引用,再来说说V这个函数怎么做到嵌套引用。看一下它的帮助文档新建一个测试计划,增加三个变量如果想在后续引用A1的值很显然这种嵌套引用是不支持的,全部当成字符串处理...原创 2022-06-22 16:57:34 · 1958 阅读 · 2 评论 -
Jmeter书中不会教你的(99)——java request实例
简单来说java request就是在jmeter界面通过传入一些设置的参数给特定的java代码去处理,最后在jmeter中输出结果。比如以下,设置两个参数,选择test.MyJavaRequest类,这个是一个自行创建的java代码,将这个java代码导出为jar包后存放在/lib/ext下,这时候再java request下拉菜单中会自动加载这个类。这个java代码怎么写?在jmeter中使用的需要按固定格式一、在eclipse创建一个java工程,比如JavaRequest二、在src下创建packa原创 2022-06-22 11:02:29 · 1325 阅读 · 0 评论 -
Jmeter书中不会教你的(98)——存放键值对HashMap
以获取的取样器响应头为例,演示如何将响应头信息存入HashMap,通过prev.getResponseHeaders()获取的响应头格式如下,其中第一行为状态码 HTTP/1.1 200 OK,换行后的数据都是以冒号区分的键值对,我们只存这部分内容。可以随意创建一个http取样器,在其下增加一个后置beanshell处理器 控制台打印结果如下 如果想要获取HashMap长度以及遍历整个...原创 2022-06-20 15:23:02 · 727 阅读 · 0 评论 -
Jmeter书中不会教你的(97)——程序复用的Module Controller
实际中,总有一些代码需要重复使用,为了减少脚本或者看着更简洁,比如以下2个线程组内都需要调用baidu,可以将这个请求作为公共部分,放在Test Fragment下,在线程组1和线程组2下建立逻辑控制器---Module Controller,点击Module Controller,在右侧选择这个模块控制器要执行的动作,比如,要访问baidu增加一个结果树执行后查看......原创 2022-06-17 15:24:14 · 284 阅读 · 0 评论 -
Jmeter书中不会教你的(96)——如何避免写入csv的数字显示科学技术法
如果我们对一个很长的数字不进行处理,name写入csv文件时很可能看到的是这样的为了让它正常显示,实际写入时只需要增加一个符号即可,以当前时间戳为例//当前时间戳,利用time函数,加双引号将其转换成字符串打印sendtimestamp="${__time(,)}";log.info(sendtimestamp);//写入文件path="writeto.csv";fw=new FileWriter(path,true);bw=new BufferedWriter(fw);//按以下格式直接写入时 就会原创 2022-06-17 10:46:38 · 647 阅读 · 0 评论 -
Jmeter书中不会教你的(95)——debug时输出脚本中各节点的名称
当脚本越来越复杂,压测中出现的问题进行定位时,我们希望知道是那个节点出现了问题,这时候如果节点名称本身就有某些代表意义,就可以输出。比如,设计以下树结构,在日志中分别输出测试脚本、线程组、取样器、后置处理器的名称 一、输出测试脚本名称log.info("测试脚本1:"+"${__TestPlanName}");二、输出线程组名称log.info("线程组名称1:"+"${__threadGroupName}");三、获取取样器名称,其中prev代表的就是ctx.getPreviousResult(),返回的原创 2022-06-16 15:03:33 · 631 阅读 · 1 评论 -
Jmeter书中不会教你的(94)——将时间戳转换为日期格式
上一节中,我们看到获取的请求开始时间和结束时间显示的是一个时间戳,如果想要按照年月日时分秒怎么显示?在beanshell中,将获取的long型时间戳转换为Date型,创建一个想要转换的日期格式对象formatter,通过format方法将Date型的时间戳转换成定义的格式//通过getStartTime()方法获取的开始时间是一个long型long st=prev.getStartTime();Date date=new Date(st);DateFormat formatter=new Simple原创 2022-06-15 11:48:03 · 1510 阅读 · 2 评论 -
Jmeter书中不会教你的(93)——获取请求响应时间、请求开始时间、请求结束时间
在做一个请求时,想要实时查看这个请求的连接时间,请求开始和结束时间,响应时间,从而在性能测试中判断哪段耗时是最长的。比如访问百度想在日志中输出划线部分的时间,一定要去看jmeter的api文档,Overview (Apache JMeter dist API)其中我目前用的最多的就是org.apache.jmeter.samplers这个包下SampleResult类这个类下有很多方法可以对我们的请求进行操作今天需要用到的就是其中几个方法,在请求下增加一个beanshell postprocessor1.获原创 2022-06-14 14:03:16 · 11876 阅读 · 0 评论 -
Jmeter书中不会教你的(92)——读取文件夹下所有文件名和文件数
给定一个文件夹路径,期望将这个文件夹下所有的文件名和文件数量输出供后续接口使用增加一个beanshell sampler,filepath可以在用户自定义中定义后引用String filepath="${filepath}";log.info(filepath); // 获得指定文件对象File file=new File(filepath);// 获得该文件夹内的所有文件存于数组中File[] array = file.listFiles();//计算数组长度,获取文件数量int cycle原创 2022-06-06 18:01:01 · 957 阅读 · 0 评论 -
Jmeter书中不会教你的(91)——dummy sampler中响应中文结果树中显示乱码?
我将一段响应文本拷贝到dummy sampler中进行调试,里面包含中文的但是结果执行后在结果数中看中文显示了问号,导致提取出来的也都是乱码尝试使用了以下解决方案:1.在后置处理器上增加一句prev.setDataEncoding("utf-8"); 但是无效还是乱码2.在jmeter.properties中增加sampleresult.default.encoding=UTF-8,重启jmeter结果生效了在我之前遇到的乱码问题,基本上方案一也可以解决.原创 2022-05-09 14:47:50 · 498 阅读 · 0 评论 -
Jmeter书中不会教你的(90)——JSONObject not found in namespace
在beanshell postprocessor中导入import org.json.*;执行后发现原因是在安装目录的lib下,D:\apache-jmeter-5.4.3\lib,缺少了json.jar包将下载下来的rar文件夹解压缩后,将里面的json.jar放入lib下https://pan.baidu.com/s/1KFDUIq40BhUXcy2NYo7YkA 密码: c91m重启jmeter(很重要)再执行...原创 2022-05-09 14:20:08 · 1607 阅读 · 0 评论 -
Jmeter书中不会教你的(89)——在beanshell中使用正则表达式提取参数值
有这样一个请求,目的是获取请求url以及获取url中token的值一/获取请求完整url方法1)正则表达式2)采用beanshell,利用方法getUrlAsString()rh=prev.getUrlAsString();log.info(rh);二/需要再灵活一点,获取url中参数值1)同获取响应头一样,可以采用正则表达式提取器,比如提取token,括号中为提取内容的表达式,可以理解成括号左右实际就是边界值2)采用边界值提取器,比如提取userId,观察参数左右原创 2022-04-25 15:47:35 · 2950 阅读 · 0 评论 -
Jmeter书中不会教你的(88)——获取响应头值
昨天小伙伴遇到一个问题,从开发者工具上看,http请求发出后系统又自动发送了另外一个请求,经过观察,这个重定向请求的url来自于第一个请求发出后响应头中location内容。那写脚本的思路就是:1.获取响应头中location的值2.将location的值作为新的http请求本节先讲第1点,如何获取响应头中location的值,实际不管是location值还是其它值,目的就是为了获取响应头中某个参数的值。我暂时还没找到需要重定向的链接,就以百度为例吧打开网站首页,用开发者工具查看,Res原创 2022-04-24 15:15:49 · 6286 阅读 · 0 评论 -
JmeterV5.4.3中插件管理器的安装
最近在新电脑上安装了V5.4.3后发现之前自带的插件管理器没有了(实际也记不清以前就是自带的还是去下载的),所以重新整了一遍。Documentation :: JMeter-Plugins.org原创 2022-04-07 11:17:58 · 1413 阅读 · 0 评论 -
Jmeter书中不会教你的(87)——另存为文件名的小tips
今天偶然发现的这个小功能, 就是在我们另存为jmx文件时需要输入文件名,实际上我们可以直接选中采样器的名称,再点击另存为时,就直接可以将脚本保存为采样器名称。原创 2022-04-01 14:12:02 · 387 阅读 · 0 评论 -
解决jmeter.bat文件双击无法启动问题
买了个新笔记本,重新安装jmeter环境,先安装了jdk环境配置了环境变量JAVA_HOMEPath:增加Classpath:检查jdk是否配置成功,cmd进入dos模式,输入java -version ,出现版本信息说明安装成功接着下载jmeter.zip包,包是用的以前jmeter5.0版本,根据以往经验需要配置环境变量JMETER_HOME:双击bin目录下jmeter.bat文件,没有任何反应,报错日志都没有,一开始以为是copy的这个jmeter包...原创 2022-03-27 17:42:10 · 17425 阅读 · 9 评论 -
Jmeter书中不会教你的(86)—— Variables From CSV File
今天再来讲一个非常有用的插件,下载后可以在config element中找到,有什么作用呢?实际就是将变量存储在csv文件中,同之前的自定义用户变量那个配件一样,好处就在于,在我们做性能测试非GUI界面操作时,经常需要更改参数测试,如果放在用户自定义变量中,每次就需要更改脚本,如果放在csv文件中,脚本就可以不动,只需更改csv文件即可。假设要访问以下地址,由于文章id不同就可以访问不同内容,需要将文章id作为变量随时更改在线程组下增加一个config element>jp@gc.原创 2022-03-15 15:39:06 · 993 阅读 · 0 评论 -
Jmeter书中不会教你的(85)——开关控制器switch controller
逻辑控制器之开关控制器switch controller,通过给switch value赋值来指定执行哪个采样器。赋值方式有两种:1.通过数值,从0开始,即0执行第一个采样器,依次,若数值对应的采样器不存在,则执行第一个如下:增加一个计数器,从1开始,输出变量为num在Switch value中引用计数器${num}执行一次结果,因为计数器第一个值为num=1,表示开关控制器执行第二个采样器将线程数设置为6,这时候计数器到4时就已经没有采样器,所以第4、5、6个线程执行.原创 2022-03-14 14:20:10 · 671 阅读 · 0 评论 -
Jmeter书中不会教你的(84)——webdriver输入预定信息提交
紧接着83节内容,在查询航班信息,选择航班后,需要输入预定信息进行提交预定信息中文本框定位都可以通过By.name定位到定位到元素之后再通过sendKeys()输入内容WDS.browser.findElement(pkg.By.name("inputName")).sendKeys("agrapea");WDS.browser.findElement(pkg.By.name("address")).sendKeys("123mainstreet");WDS.browser.findEl原创 2022-03-11 16:47:09 · 478 阅读 · 0 评论 -
Jmeter书中不会教你的(83)——webdriver选择最廉价航班实例
Jmeter书中不会教你的(80)——webdriver下拉框选择_agrapea的博客-CSDN博客紧接着上面80课的内容,查询航班后到下一个选择航班页面,我们固定选择了出发地为Boston,目的地为Rome查询航班信息如下目的:希望在查询的航班中找出最便宜价格的航班选择一、首先先打印查询出来的航班信息,每一个航班信息都是表格中的一行,以tagName=‘tr’表示,并且层级是在tbody下var flights=WDS.browser.findElement(pkg.By..原创 2022-03-10 16:30:54 · 341 阅读 · 0 评论 -
Jmeter书中不会教你的(82)——webdriver定位链接点击
今天要做的是使用webdriver完成访问BlazeDemo点击首页链接断言链接过去页面的title是否符合预期先将固定的代码贴在脚本区域在需要优化补充地区来完成需要的操作第一步:在chrome浏览器中使用小箭头查看链接信息,定位点击的元素定位方式1:通过By.linkText(),即链接上的文本信息定位元素,这里文本信息为destination of the week! The Beach!WDS.browser.findElement(pkg.By.link...原创 2022-03-09 15:07:15 · 1298 阅读 · 0 评论