特别鸣谢《全栈测试笔记》公众号,很优秀的开源测试公众号整理,用于公司内部培训及技能总结!

背景:

对我们测试来说,jmeter应该是我们使用较频繁的测试工具之一,因为其开源、免费、轻量、功能强大,支持很多种协议,除了测功能,还能做接口和性能自动化;

从各大招聘网站或其他线上培训机构,常常使用期来吸引一部分学员,而在性能测试工具中,jmeter市场占有率慢慢的超过了loadrunner商业性能测试工具;如此优秀的测试工具,作为优秀的测试人员是必须掌握的;

然而经常看到QQ群或其他博客论坛讨论jmeter的各种“晦涩难懂”的功能,譬如支持一些groovy脚本、还要黏贴python胶水语言,当然这不排除其场景确实需要这些来辅助,友情提示一下:还是不要过度使用其功能;

在实际工作中,jmeter常用的功能并不多,把主要的功能元件掌握,基本上可以搞定90%的需求,所以,不要把时间耗费在工具不常用的功能上,如果是做性能测试,分析定位调优才是重中之重。

 

JMeter常用功能介绍

从jmeter2.x版本用到现在的5.x,常用功能进阶得并不是很多,如下举例(想要详细了解的可以参考其JMeter官网或本人CSDN博客都有部分使用介绍):

从添加测试计划-线程组开始(基本按执行顺序介绍)

【配置元件】

        HTTP信息头管理器:接口中特别需要指定的请求头,如content-type、或token鉴权

        HTTP Cookie管理器:适用于做web功能测试,保持cookie不过期

        CSV 数据文件设置:相当于参数化数据文件,可以是测试用例(接口自动化中)

        HTTP请求默认值 :对于接口请求中通用的公共部分进行提取,如url、port或通用参数

【前置处理器】

        BeanShell PreProcessor:提前准备数据的元件,支持java及jmeter自带的功能脚本

【逻辑控制器】

        事务控制器:这个来做事务控制的,譬如一个场景中涉及多个接口,单个接口是一个子事务,但是我们需要将其作为一个整体事务看待,就需要这个元件了。

        ForEach控制器:一遍用来遍历上一个接口返回的数据中有多个元素的时候,例如提取响应结果中所有满足条件的参数,需要一一遍历,又譬如sql请求的结果集也需要遍历的场景

        仅一次控制器:适用于性能测试场景中只需一次操作的请求,例如登录,这里必须要提一点的是它只跟线程组中的线程数有关,至于迭代数无关

【定时器】

        固定定时器:相当于thinktime,

        高斯随机定时器:这个类似thinktime但是它是有活动范围的,即一个时间区间等待

        Synchronizing Timer:同步定时器,jmeter中的集合点,它的第二个参数是timeout,如果非0,即为等待对应时间不满足集合数也会执行sampler请求

【Sampler】

        HTTP请求:应该了解http协议的各种请求及传参方式,比较难的应该是文件上传/下载的接口,同样支持soap协议的请求;

        BeanShell Sampler:一般作用自己写脚本来完成测试,毕竟需要一些java基础

        Debug Sampler:说白了就是调试脚本时使用,需要测试jmeter脚本中使用的变量是否正确

比如sampler取样器支持的java、jdbc、ftp、webservice等协议,如果不满足其它协议,需要我们自己开发,所以java基础是必备的条件。

【后置处理器】

        正则表达式提取器:动态参数关联的方式很多,可以根据实际请求来选择,例如json的少不了json path提取器,又如爬虫工作中喜欢用的正则

        Debug PostProcessor:除了可以看到jmeter变量,还可以看到配置信息,最好放在正则表达式提取器后面,否则看不到提取的结果,说白了还是对后置处理器使用的调试

        BeanShell PostProcessor:处理samlper请求响应结果数据的。

【断言】

        响应断言:最简单的,在接口测试设计中,一般没有出现数据变动或者响应结果简单的情况下使用

        BeanShell断言:属于高级断言,因为是编写脚本,所以比较灵活

【监听器】

        查看结果树:调试结果使用,其上有各种tester调试视图

        聚合报告:可以查看性能测试结果的数据,如:响应时间分:90、95、99,这几个值可以通过配置文件修改的,还有错误率、tps等性能指标

 

【函数助手】

这个按需使用,例如随机函数、随机字符串函数、线程计数器函数、环境变量参数函数、时间函数等

 

不得不说的分布式压测:什么样的情况下需要分布式压测?

第一,大用户量并发的时候

第二,负载机不支持大并发的时候

第三,同第一,大数据的情况下

 

另外,beanshell相关的元件,基本语法是通用的,上述所介绍元件中就有四类beanshell元件使用:前置处理器、取样器、后置处理器、断言等等,可见java基础非常重要!

 

【JMeter执行顺序】

配置元件 → 前置处理器 → 定时器 → 取样器 → 后置处理器 → 断言 → 监听器;

tips:同一层级的,顺序执行; 

 

最后,我们来看看官方的性能测试最佳实践,地址是:

http://jmeter.apache.org/usermanual/best-practices.htmlJMeter我们应该学会使用哪些功能?

 

 

 

chrome浏览器右键翻译内容如下:

16.7减少资源需求

关于减少资源使用的一些建议。

  • 使用CLI模式:jmeter -n -t test.jmx -l test.jtl
  • 使用尽可能少的侦听器;如果使用上述的-l标志,则可以将其全部删除或禁用。
  • 在负载测试期间不要使用“查看结果树”或“在表中查看结果”侦听器,仅在脚本编写阶段使用它们来调试脚本。
  • 与其使用大量相似的采样器,不如在循环中使用相同的采样器,并使用变量(CSV数据集)来改变采样。[“包含控制器”在这里无济于事,因为它将文件中的所有测试元素添加到测试计划中。
  • 不要使用功能模式
  • 使用CSV输出而不是XML
  • 只保存您需要的数据
  • 使用尽可能少的断言
  • 使用性能最高的脚本语言(请参阅“ JSR223”部分)

如果您的测试需要大量数据(尤其是需要将其随机化),请在可通过CSV数据集读取的文件中创建测试数据。这样可以避免在运行时浪费资源。

 

相关文章: