JMeter的介绍和体系结构(1)
实习一段时间了,感到压力,以我目前的水平,还只停留在功能测试上,不能学会性能测试,就永远只能是实习生,不管工作时间多久。目前公司的一个测试流程并不是特别规范,而且对测试的一个要求也不高,所以目前学到的都仅仅只是皮毛。隐隐担忧。。。
不过,我也知道,任何事都是靠自己的,其他事物皆是辅助,所以想要提升自己还是要不断学习呀。公司那么多大牛,要好好利用身边的资源呀。
接下来将系统性的学习JMeter,并在学习的过程中整理一系列关于JMeter性能测试工具的使用,撸起袖子加油干
本篇来自《全站性能测试修炼宝典JMeter实战》一书,挺不错的一本书,推荐给大家,有机会可以去看看。
1、JMeter简介
JMeter是一款100%纯java开发的开源桌面应用软件,可用来模拟用户负载来完成性能测试工作。JMeter
JMeter结构图可拆解成一个三维空间:
-
X1~X5 是负载模拟的一个过程,使用这些组件来完成负载的模拟
-
Y1:包含的是负载模拟部分,负责模拟用户请求
-
Y2:结果验证部分,负责验证结果正确性
-
Z:负载结果的收集,实践上只有一个组成部分——监听器,监听器不仅可以放在线程组之内,也可以放在线程组之外,所以在图中看到它们是相交的
2、JMeter基本原理
- 建立一个线程池,多线程运行取样器产生大量负载,在运行过程中通过断言来验证结果的正确性,通过监听器来记录测试结果。
- 如果取样器中有参数化的需求,可以通过配置元件或前置处理器来完成;
- 如果有关联需求,可以通过后置处理器来完成;
- 如果想要设置运行场景,比如模拟多少用户,运行多长时间,就设置线程组;
- 如果想要模拟并发场景,可以利用定时器来设置;
- 如果想要控制业务的执行逻辑,比如登录只运行一次,我们可以用控制器来完成。
3、JMeter的组成部分
3.1 线程组
【线程组】用于模拟大量用户负载,此元件中可以设置运行的线程数(就是模拟多用户,一线程就是一个用户)
访问路径:【测试计划】——【线程组】
3.2 取样器
【取样器/采样器】用来模拟用户操作,向服务器(被测试系统)发出Http请求、WebService(SOAP/XML-RPC Requests)请求或者Java请求等。
取样器元件有23个,基本涵盖了我们常见的各种协议,如Http、FTP、JAVA、JMS、LDAP、MAIL、MongoDB、SMTP、TCP、Junit等,还支持BeanShell脚本。
取样器的访问路径:【测试计划】—— 【线程组】—— 【Sampler】, 常见的取样器如下图:
常用的取样器为HTTP请求,我们可以把HTTP请求元件看成是一个没有界面的浏览器,它可以发送Http请求,接收服务器的响应数据。
3.3 断言
【断言】用来验证结果是否正确,类似于LoadRunner中的检查点。可以帮助我们来判断请求是否成功返回且是否符合要求。就是用一个预设的结果(值、表达式、时间长短等条件)与实际结果匹配,匹配到则成功,反之失败。
常用的是响应断言,对于复杂的断言可以通过BeanShell脚本来完成
断言的访问路径:【测试计划】—— 【断言】
3.4 监听器
【监听器】收集JMeter的测试结果,JMeter结果收集程序的设计模式就是监听器模式。JMeter的监听器有两个任务:
- 添加结果监听,并且可以保存测试结果到文件,这些结果数据可以供再次分析使用。
- 展示结果,JMeter可以以表格及图形的形式展示结果,方便测试人员分析测试结果。在开发测试脚本时,不可避免需要调试,监听器也提供了辅助(比如查看结果树,我们可以在其中看到请求与响应的数据)
监听器的访问路径:【测试计划】—— 【监听器】,详情如下图:
【取样器】、【断言】、【监听器】组合在一起就可以帮助我们完成发送请求、验证结果及记录结果三项工作。
3.5 前置处理器
【前置处理器】在取样器发送请求之前做一些环境或参数的准备工作
例如:在对数据进行操作前需要建立一个数据库连接,那么前置处理器可以完成这个工作
前置处理器的访问路径:【测试计划】—— 【前置处理器】
3.6 配置元件
【配置元件】为取样器提供预备数据、然后由取样器发出请求;还可以用来记录服务器的返回数据,比如:Http Cache Manager,自动记录服务器返回的Cache信息。
性能测试中为了模拟大量用户操作往往需要参数化,JMeter中的参数化可以通过配置元件来完成,比如:CSV Data Set Config,可以帮助我们从文件中读取数据。另外JMeter也提供了从多函数来帮助我们生成动态数据。
配置元件的访问路径:【测试计划】—— 【配置元件】,详情如下图:
3.7 后置处理器
【后置处理器】一般放在取样器之后,用来处理服务器的返回结果。(专门用来对响应数据做处理的元件,JMeter中的关联也是通过后置处理器来完成)
比如一个Web程序在登录后返回一个SessionID,这个SessionID在登录之后的业务过程中会做为验证条件,验证用户是否合法登录了。我们利用取样器模拟这个请求时就需要带上这个属性,那么如何获取呢? 首先我们要知道这个SessionID从哪里来?——它是由服务器返回的。我们需要用什么工具获取它?JMeter提供了元件,比如正则表达式提取器,它支持正则表达式的方式来提取数据。
访问路径:【测试计划】——【后置处理器】,详情如下图:
3.8 控制器
【控制器】逻辑控制器可以控制采样器(samplers)的执行。由此可知,控制器需要和采样器一起使用,否则控制器就没有什么意义了。放在控制器下面的所有的采样器都会当做一个整体,执行时也会一起被执行。
比如在收邮件时,只需要登录一次邮箱就可以查看多封邮件,这个场景在JMeter中只需要使用控制器中的“一次控制器”就可以控制登录的次数。
控制器的访问路径:【测试计划】——【线程组】—— 【逻辑控制器】
3.9 定时器
【定时器】用于在模拟大量用户在同一时间处理系统业务,起到集合的功能(常用于并发测试)
访问路径:【测试计划】—— 【线程组】—— 【定时器】
下一篇☞JMeter运行原理