多个变量
- 多个变量的情况下,使用“,”【英文格式】逗号作为分隔符,将关键字进行分隔.
用户参数与CSV Data Set Config
关于"用户参数"
与"CSV Data Set Config"
哪个元件用来做参数化更有优势,没有标 准答案,"两者都可以用"
,主要看使用者更倾向于哪一个。
一般情况下,参数化数据量
不是很大的情况下,使用用户参数
更为简便
些。
如果参数化数据量比较大
的情况下,比如开发导出来的CSV文件,CSV Data Set Config
要比用户参数
来说更有优势
些。
可以理解为“增加并发、模拟并发”
定义:
简单的说,虽然我们的“性能测试”理解为“多用户并发测试”,但真正的并发是不存在的, 为了更真实的实现并发这概念,我们可以在需要压力的地方设置集合点,每到输入用户 名和密码登录时,所有的虚拟用户都相互之间等一等,然后,一起访问。
如淘宝的秒杀,多个用户同时进行一个操作。
注意:
1、jmeter集合点通过添加定时器来完成。
2、JMeter里面的集合点通过添加定时器来完成。
3、Synchronizing timer仅作用于同一个JVM中的线程。
查看下文“注意点”处的补充。
操作步骤
注意:
- Number of Simulated Users to Group by:
每次释放的线程数量。如果设置为0,等同于设置为线程租中的线程数量。
可理解为集合多少人后再执行请求
- Timeout in milliseconds:
如果设置为0,Timer将会等待线程数达到了"Number of Simultaneous Users to Group"中设置的值才释放。如果大于0,那么如果超过Timeout in milliseconds中设置的最大等待时间(毫秒为单位)后还没达到"Number of Simultaneous Users to Group"中设置的值,Timer将不再等待,释放已到达的线程。默认为0。
- 如果设置Timeout in milliseconds为0,且线程数量无法达到"Number of Simultaneous
Users to Group by” 中设置的值,那么Test将无限等待,除非手动终止。
作用域
如果希望定时器仅应用于其中一个sampler,则把该定时器作为子节点加入,如下图
定时器仅仅对HTTP请求1起作用,即仅在HTTP请求1执行前执行定时器,和HTTP请 求2无关。
如果希望synchronizing timer
应用于多个sampler
.
如下,执行HTTP请求1和HTTP请求2前都会执行同步定时器1、2。当执行一个sampler 之前时,和sampler处于相同作用域的定时器都会被执行;
注意点
问:集合点的位置一定要在Sample(采样器)之前才能生效吗?
答:在Jmeter中,timer是在sampler之前执行的。
不管这个定时器的位置放在sampler之 后,还是之前。当然,如果有多个timer的时候,在相同作用域下,会按上下顺序执行 timer,这个就需要慎重放置timer的顺序;不过,为了更好的可读性,还是建议将timer放在对应的sampler前面 或 子节点中;
关于Synchronizing timer
补充: Synchronizing timer 仅作用于同一个JVM中的线程。
- a.如果分布式测试时
synchronizing timer作用于所有jvm,那么jvm之间或者说监控jvm 工作的部件就需要频繁通讯,确定线程的数量及状态等,然后集结了足够的线程后,又要发送信号让Jmeter来发送测试请求,中间存在延时,这样就无法模拟更真实的高并发了,而且这个东西还会消耗测试机器的一部分性能,会给测试结果带来负面影响;所以暂时是只支持控制单个jvm,如果后面有办法解决上面那些问题后,就可以实现控制多个jvm,控制总并发量;
- b.如果分布式测试
并使用了Synchronizing timer,且设置的值是小于单个jvm的线程数量;但是,较难确保所有jvm都在同一时间点集结了同样数量的线程数,这样就很难下测试结论了,因为都不知道是多少并发下的性能表现;当然了,可以将线程的启用时间拉长,并将超时时间延长,这样就很可能会与同一时刻集结到足够的线程,达到超高并发的测试;所以,分布式测试与Synchronizing timer一般不是同时使用的;如果非要用,则需要慎重设置相关参数
关于集合点,在实际应用中基本上是不用的,或者说非常少非常少用。
其实,仅仅就集合点来说,影响性能么?答案:影响。那么影响大么?答案:其实也不是太大。
因为一个系统能够承受的并发数和压力取决于两点。
- 取决于业务脚本里的思考时间
同样的并发、同样压力情况下,若思考时间不同,能够承受的压力也是不同的。
- 取决于系统真正的处理能力,或者说 TPS【系统吞吐量,亦说QPS】,TPS每秒处理的能力越高,那么处理压力的能力相对来说就会多一些。
按照Jmeter官方的翻译过来叫“断言”,其实功能与LoadRunner的“检查点”是一样 的,叫法不一样罢了(文字游戏)
断言/检查点
对响应的结果做一个判断。
响应断言
注意点
1、模式匹配规则
2、要测试的模式
响应断言的参数
Apply to:响应作用范围
1、Main sample and sub-samples:断言应用于主采样器和子采样器。
2、Main sample only:断言仅应用于主采样器。
3、Sub-samples only:断言仅应用于子采样器。
4、Jmeter Variable:断言将被施加到命名变量的内容,变量值进行匹配
要测试的响应字段
1、响应文本:指页面返回的http文本内容 。
2、响应代码:指请求返回的状态,如200 。
3、响应信息:指请求返回的响应信息,如OK、not found 。
4、Response Headers : 响应头信息 。
5、Request Headers :请求头信息。
6、剩余几个还不了解~~
模式匹配规则:
1、包括=返回结果包括你指定的内容,支持正则匹配
2、匹配:
(1)相当于 equals 。当返回值固定时,可以返回值做断言,效果和equals相同
(2)正则匹配 。 用正则表达式匹配返回结果,但必须全部匹配。 即正则表达式 必须能匹配整个返回值,而不是返回值的一部分。
3、Equals ::返回结果与指定断言完全一致
4、SubString:与 “包括”差不多,都是指返回结果包括你指定的内容,但是SubString不支持正则字符串。
断言结果
对“响应断言”的“断言结果”进行再次的判断
增加"断言结果"
断言结果判定
- 成功
如果成功,“断言”一栏显示请求地址
- 失败
如果失败,“断言”一栏请求地址下方显示报错原因。
1、和LoadRunner中的关联差不多
2、Jmeter中关联的两种方式:正则、xpath(一般xml的时候用的多)
正则:一般用的比较多的是正则
XML:返回的数据是XML格式的情况,用XML居多
3、以webtours登录威力进行演示 webtours.jmx
webtours:LoadRunner自带的
步骤
1、webtours开启关联
2、badboy录制
3、导入Jmeter
4、找出需要关联的请求(nav.pl)
5、该请求 --> 后置处理器 --> 正则 --> 填入内容
6、增加断言
7、增加断言结果
8、运行查看
-
模板:如果前面的正则表达式取了不止一个参数,那么这里需要制定参数的组别,如果该参数为 1 1 1,则表示取得第一个值, 2 2 2表示取得第二个值
-
匹配数字:0随机; -1取所有值,以数组形式存储; 1; 2…
-
缺省值:一般默认即可(为空)
项目背景
-
XX网站
-
环境:Windows
需求
- 并发登录的性能
场景
-
1s增加2个线程;运行2000次。
-
分别查看20、40、60并发下的表现
监控
-
成功率、响应时间、标准差、CPU、MEM、IO等
-
资源监控需要在Windows / Linux下部署监控agent (server agent)
步骤
-
badboy录制
-
导入jmeter
-
参数化、检查点、集合点
-
指标监控,资源监控
-
报告(可导出到xls,然后自行生成报表)
-
演示login.jmx
注意点
关于 “聚合报告 --> 响应数据” 中文乱码解决方法
监控内存及CPU等(jconsole)
最近逛论坛的时候,发现了一个比较好的监控内存CPU等的小工具,本着开源小工具多 多益善的原则,记录一下。
打开这个小工具的步骤很简单,如果你已经配置好了Jmeter运行的环境,那么你也就 不用去做其他的配置,直接 点击:开始——》运行——》输入cmd——》然后在出现的 命令行界面输入“jconsole”即可弹出一个【java监视和管理控制台】
需求
-
上传一个文件到服务器(put)
-
下载一个文件到本地(get)
步骤
-
打开Jmeter
-
线程组
-
ftp请求缺省值(可有可无)
-
ftp请求(get和put两种)
-
如果有用户名和密码填上即可
JDBC Connection Configuration
测试计划需加载Jar包
参考链接:https://blog.csdn.net/u012167045/article/details/72638507
参考链接:https://jingyan.baidu.com/article/f96699bbf5d092894e3c1b87.html
这张图好像有点失帧了,凑合吧…
关于jdbc中文乱码的说明
第一步:请确认你在数据库中写sql出来的中文是正常显示的,并没有出现问号或乱码, 如果出现那是数据库编码的问题,和jmeter无关;
第二步:在第一步确认的前提下,修改jmeter jdbc databaseurl
为
jdbc:mysql://localhost:3306/mysql?useUnicode=true&characterEncoding=utf8&allowMultiQueries=true
,前面的链接地址和端口以及数据库名根据实际情况修改,后面的参数固定,这样就可以解决问号乱码的问题了。
Jmeter由java开发,耗内存、cpu,所以大并发下还是需要分布式的。
原理
其实和LoadRunner的agent差不多,如下图所示。
-
调度机(Controller):主要负责性能测试脚本的分发,及各个执行机(Slave)的测试 结果收集汇总,报告产出。
-
执行机(Slave):主要负责执行性能测试脚本及断言等(命令行模式执行,无界面), 并将执行结果反馈给调度机(Controller),若断言执行成功则不返回请求响应数据及 详细断言信息。
步骤
-
关闭防火墙
-
在所要运行Jmeter并作为负载生成器的机器上安装Jmeter,并确定其中一台机器作
为主的controller,其他的机器作为agent。然后运行所有的agent机器上的
jmeter-server文件.【Win系统运行“jmeter-server.bat”、Linux运行“jmeter-server”】
- 在controller机器的jmeter的bin目录下,找到jmeter.properties文件
- 启动controller机器上的Jmeter应用,选择菜单“运行” —> “远程启动”,来
分别启动agent,也可以直接选择“远程全部启动”来将所有的agent启动。
监听器
-
种类繁多…看界面
-
常用的几个
-
断言结果
-
查看结果树
-
聚合报告
-
用表格查看结果
-
图形结果
-
aggregate graph
-
等等…
指标分析
-
Samples:表示本次场景中一共发出了多少个请求。
-
Average:平均响应时间—默认情况下是单个Request的平均响应时长,当使用了
Transaction Controlle
r时,也可以以Transaction为单位显示平均响应时长。
-
Median:中位数,响应时间中值,也就是50%用户的响应时长。
-
90%Line:90%用户的响应时间。
-
Min:访问页面的最小响应时间。
-
Max:访问页面的最大响应时间。
-
以上时间单位为毫秒…不要弄错了
-
Error%:出错率;错误请求的数量/请求的总数
-
Throughput:吞吐量。默认情况下表示每秒完成的请求数(Request per Second),当使用了
Transaction Controller
时,也可以表示类似 LoadRunner 的Tranaction per Second
数。 -
KB/Sec:流量。每秒从服务器端接收到的数据量。
jtl文件分析 —> 见test.jtl
- 在性能测试过程中,我们往往需要将测试结果保存在一个文件当中,这样既可以保
存测试结果,也可以为日后的性能测试报告提供更多的素材。
- Jmeter中,结果都存放在“.jtl”文件。这个“.jtl”文件可以提供多种格式的编写,
而一般我们都是将其以CSV文件格式记录。
- 只需要选择某个监听器,点击页面中的configure按钮。此时,一个设置页面就会弹
出来,建议都勾选如下项:Save Field Name , Save Assertion Failure Message
-
经过了以上设置,此时保存下来的“.jtl”文件会有如下项:
-
timeStamp,elapsed,lable,responseCode,responseMessage,threadName,
dataType,success,failureMessage,bytes,Latency
- 请求发出的绝对时间,响应时间,请求的标签,返回码,返回消息,请求所属 的线程,数据类型,是否成功,失败信息,字节,延迟。
-
有时候我们在测试接口的时候需要调用第三方Jar包来完成。比如,某些数据的加密需要调用加密的Jar包,在Jmeter里可以很方便的完成。
-
Jar包 找开发要!找开发要!找开发要!
-
“测试计划”一栏下方调用Jar包
-
大致步骤如下:
-
获取需要调用的Jar包
-
Jmeter的测试计划中天加Jar包
-
通过beanshell sample 进行调用并保存结果
-
在Jmeter中需要用到该值的地方直接使用即可
参考链接:jmeter完成md5加密的接口请求参数
附:jmeter3.2版本之后就没有SOAP/XML-RPC Request插件了,所以没办法直接进行 webservice接口的测试。(了解即可)
-
官方解释:Web Service是一种可以接收从Internet上的其他系统传递过来的请求,轻量级的独立的通讯技术。通过SOAP协议完成,使用WSDL文件进行描述内容。
-
粗暴解释:当作一个接口,和HTTP没区别。完成请求,请求的时候完成入参,响应的时候完成出参,响应的时候有返回及返回的参数。
-
接口请求中的一种。
-
接口的本质其实就是发送请求和响应的一个过程。
Jmeter3.x测试webservice接口
附:jmeter3.2版本之后就没有SOAP/XML-RPC Request插件了,所以没办法直接进行webservice接口的测试。
自我介绍一下,小编13年上海交大毕业,曾经在小公司待过,也去过华为、OPPO等大厂,18年进入阿里一直到现在。
深知大多数Python工程师,想要提升技能,往往是自己摸索成长或者是报班学习,但对于培训机构动则几千的学费,着实压力不小。自己不成体系的自学效果低效又漫长,而且极易碰到天花板技术停滞不前!
因此收集整理了一份《2024年Python开发全套学习资料》,初衷也很简单,就是希望能够帮助到想自学提升又不知道该从何学起的朋友,同时减轻大家的负担。
既有适合小白学习的零基础资料,也有适合3年以上经验的小伙伴深入学习提升的进阶课程,基本涵盖了95%以上前端开发知识点,真正体系化!
由于文件比较大,这里只是将部分目录大纲截图出来,每个节点里面都包含大厂面经、学习笔记、源码讲义、实战项目、讲解视频,并且后续会持续更新
如果你觉得这些内容对你有帮助,可以扫码获取!!!(备注Python)
ize_15,color_FFFFFF,t_70,g_se,x_16)
自我介绍一下,小编13年上海交大毕业,曾经在小公司待过,也去过华为、OPPO等大厂,18年进入阿里一直到现在。
深知大多数Python工程师,想要提升技能,往往是自己摸索成长或者是报班学习,但对于培训机构动则几千的学费,着实压力不小。自己不成体系的自学效果低效又漫长,而且极易碰到天花板技术停滞不前!
因此收集整理了一份《2024年Python开发全套学习资料》,初衷也很简单,就是希望能够帮助到想自学提升又不知道该从何学起的朋友,同时减轻大家的负担。
[外链图片转存中…(img-H0ysAQ3h-1713001680016)]
[外链图片转存中…(img-uRhgwbRR-1713001680017)]
[外链图片转存中…(img-EQ4YUOwR-1713001680017)]
[外链图片转存中…(img-P2xEr4VC-1713001680017)]
既有适合小白学习的零基础资料,也有适合3年以上经验的小伙伴深入学习提升的进阶课程,基本涵盖了95%以上前端开发知识点,真正体系化!
由于文件比较大,这里只是将部分目录大纲截图出来,每个节点里面都包含大厂面经、学习笔记、源码讲义、实战项目、讲解视频,并且后续会持续更新
如果你觉得这些内容对你有帮助,可以扫码获取!!!(备注Python)