一、介绍
JMeter是一款测试工具,主要用于服务端的性能测试,如web网站,api服务器等;可以方便的获取来自不同压力下的性能指标。另外,JMeter能够对应用程序做功能/回归测试,通过创建带有断言的脚本来验证返回结果是否符合期望。
二、安装
Jmeter依赖于JDK,确保当前工作环境的计算机上已经安装了JDK,并且配置环境变量。通过Apache Jmeter官网下载,地址:http://jmeter.apache.org/download_jmeter.cgi
下载,解压缩即可使用。
三、运行
双击bin目录下的 jmeter.bat文件即可运行;可以在bin目录中找到 jmeter.properties 它是jmeter的配置文件;设置显示语言种类
jmeter.log :运行日志,当执行过程发生异常,可以来这里查看相关异常信息。
jmeter-server.bat: 多机器做联机负载链接时用;
Jmeter使用:关键时刻点击帮助文档查看帮助;例子十分全面。右边三角感叹号查看日志。
四、常用组件
测试计划:主界面测试计划是其他组件的父级组件;存放元件的容器。
名称为测试计划的名称,注释为对这个测试计划的详细注解。JMeter所有的组件都有这两个选项。
独立运行每个线程组(例如在一个组运行后启动下一个):如果不选择,表示多个线程组全部一起运行。
主线程结束后运行teardown线程组:关闭主线程后运行 teardown程序来关闭线程组,一般不选择。
函数测试模式:可以获得更多服务器返回信息,一般不选择。
添加目录或jar包到classpath:不建议在这里添加,如果有必要可以放在 \lib\ext\ 目录下。
注意:一般情况下,这几个选项用默认即可。
线程组:线程组通过右键 测试计划->添加->线程(用户) -> 线程组 添加。
线程组的作用是:性能测试的运行场景设置,模拟并发用户发送请求,设置并发策略;所有的请求相关组件都必须在线程组下面才能创建,不能直接在测试计划里创建。
线程数:表示一次测试运行启动多少个线程。作为性能测试的时候,相当于在线用户数;做接口测试的时候,设置为1。
Ramp-Up时间(秒):决定多长时间启动所有线程。如果使用100个线程,Ramp-up period是10秒,那么JMeter在10秒后启动所有100个线程,也就是说平均每1秒钟启动10个线程。Ramp-Up需要充足长以避免在启动测试时有一个太大的工作负载,并且要充足小以至于最后一个线程在第一个完成前启动。
循环次数:设置循环的次数或者无限循环。在做接口测试的时候,设置为1。如果循环计数不是-1(随机)或永久,则持续时间将为循环计数*迭代持续时间。
继续:遇错误继续执行,不影响场景运行。默认为继续,常用。
启动下一进程循环:执行下次循环,当前循环剩余sampler不再执行。
停止线程:停止当前线程,其他线程继续执行。
停止测试:执行完剩余线程后停止测试。
立即停止测试:立即停止所有线程。
取样器:取样器用来模拟用户操作,控制JMeter向服务器发起什么样的请求,常见的:HTTP、FTP、SMTP、JDBC等类型的请求;右键线程组-》取样器 ;取样器是完成jmeter的实际工作的。
HTTP请求:HTTP协议的请求元件;定义HTTP Request请求的信息。用的最多。
在Web 服务器选项框中:
协议:默认为http协议,也可以选择https协议。
服务器名称或 IP:待测产品所在的域名或者IP地址。
端口号:为服务器运行的端口号;不填写就默认。
在HTTP 请求选项框中:
方法:选择HTTP的八个方法中的任意一个,一般为“POST”或者“GET”方法。
路径:为请求的路径,若为根目录,路径为“/”。
内容编码:Content encoding为编码格式,默认为“ios8859”,建议使用“utf-8”。
自动重定向:Redirect automatically,不会将重定向视为单独的请求。
跟随重定向:Follow redirects,会将每个重定向视为单独的请求。一般如果程序中有类
似于JavaScript语言中window.location.href="url"的重定向语句用Follow redirects,否则请使
用Redirect automatically。
使用 Keepalive:表示使用面向连接的请求,保持长链接;也就是说在请求头中包含
keep-alive。
multipart/form-data:表示以multipart/form-data发出请求,也就是说除了可以使用键值
对发送请求外,还可以发送文件。
与浏览器兼容的头:browser-compatible headers,表示浏览器兼容请求头。
参数:就是所要传输的参数(一般为POST参数,get参数写在url中),分别填写请求的名
称,值及其他信息。
察看结果书:对于每个请求,可以查看HTTP请求和HTTP响应;结果树可以查看一个线程组或整个测试计划里的所有线程组的请求结果,所以可以放在线程组也可以放在测试计划里;测试计划/线程组:请求-》添加-》监听器-》察看结果树。
取样器结果:Sample result,返回结果的基本信息。
请求:Request分别显示的是发送头信息和发送主体信息。
相应数据:Response Data中显示的是响应头和响应体。响应体即为返回的HTTP代码或JSON代码。下面是一个响应头的例子。
断言:用来验证结果是否正确,帮助判断请求是否成功返回且是否符合要求,就是用一个预设的结果(值、表达式、时间长短等条件)与实际结果匹配,匹配到则成功,反之失败。jmeter断言元件有多个,比如响应断言、XML断言、BeanShell断言;较常用的是响应断言;对于复杂的断言还可以通过BeanShell脚本来完成(BeanShell是类java的脚本语言,实际上BeanShell是一个小巧的java源码解释器。可以直接调用java程序)。断言的访问路径:【测试计划】-【断言】或者 【测试计划】-【线程组】-【断言】
逻辑控制器:就是控制脚本运行逻辑的。逻辑控制器可以控制采样器(samplers)的执行顺序。因此,控制器需要和采样器一起使用,否则控制器就没有意义。放在控制器下面的所有的采样器都会当做一个整体,执行时也会一起被执行。
逻辑控制器分两类:
一是控制测试计划执行过程中节点的逻辑执行顺序,如:Loop Controller、If Controller
等;
二是对测试计划中的脚本进行分组、方便JMeter统计执行结果以及进行脚本的运行时控
制等,如:Throughput Controller、Transaction Controller。
前置处理器:在实际请求发出之前对即将发出的请求进行特殊处理。如:用户参数、提交订单前先登录等。
后置处理器:用于对发出的请求后得到的服务器响应进行处理。如:正则表达式提取器。
定时器:用于为请求之间设置的等待时间,常用:高斯随机定时器、固定定时器、synchronizing timer(集合点)
配置元件:用于提供对静态数据配置的支持。常用:http cookies管理器、用户自定义变量、csv数据文件设置;
http cookies管理器:Jmeter不会自动关联cookie,需要添加管理器来关联cookie;加进来即可,一般不需要更多操作。
HTTP请求默认值:就是将线程组下面的重复参数放到请求默认值中,后续所有请求不需要重复实现该参数设置,会默认从该元件中获取所需要的参数值。
JMeter组件执行顺序:配置元件 → 前置处理器 → 定时器 → 取样器(模拟用户操作) → 后置处理器 → 断言 → 监听器;同一层级的组件,顺序执行。
五、实例
模拟用户操作:登录、打开首页、提交数据;操作之间有顺序,要注意各个取样器的顺序;点击鼠标可以拖拽。查看结果树可以放在线程组也可以放在测试计划里。分别是看单个和全部的结果。
六、录制脚本
1、badboy录制:直接输入地址,会自动录制脚本。录制完成后,导出Jmeter脚本格式,选择file -》 export jmeter;然后倒入jmeter中运行即可。
由于badboy录制是基于ie浏览器内核,会存在兼容性问题,有些接口可能录制不全,因此需要上传脚本后再jmeter中手动不全脚本。基于IE内核这一点很不好。
2、HTTP代理服务器录制
端口:设置JMeter代理服务器所要用的端口,不能被占用,否则JMeter无法使用;默认启用8888端口。
HTTPS Domains:编写代理主机的域名或者主机IP地址,可以对指定地址进行请求录制。
目标控制器:选择录制的脚本所保存的位置;因为录制的脚本都得在线程组底下才能运行;所以不能保存在HTTP代理服务器里。
3、Chrome插件-blazemeter录制
BlazeMeter是一款可以安装在chrome浏览器的脚本录制工具,是可以辅助Jmeter完成脚本的创建的chrome插件。
打开你要录制的网页,之后打开BlzaeMeter界面,如下所示:点击大圆圈就可录制脚本:
点击开始录制按钮,并在网页开始操作,会看到右上角的图标的数字一直变化,说明你的操作事件已经被记录。
录制完毕后按.jmx导出jmeter脚本,点击 .jmx 按钮。这里要先注册,然后才能够导出脚本,直接用谷歌账号就行。
找到导出的Jmeter脚本保存即可,此时脚本生成完毕,之后打开Jmeter并导入刚刚从chrome导出的脚本,之后就可以导入到 jmeter 进行处理。
七、断言
断言种类很多,最常用的是相应断言;用以判断响应结果是否符合预期。断言的访问路径:【测试计划】-【断言】或者 【测试计划】-【线程组】-【断言】
响应文本:请求的响应文本信息,不包含响应头信息。最常用的断言字段
响应代码:对应http返回的响应码
响应信息:匹配响应信息
响应头:响应头信息
URL样本: 请求url,如果有重定向包含重定向url
文档(文本):通过Apache Tika从各种的文档中提取的文本进行验证,包括响应文本,pdf、word等等各种格式
忽略状态(Ignore Status): 一个请求多项响应断言时,忽略某一项断言的响应结果,而继续下一项断言
模式匹配规则:
包括:响应的结果中包含指定的文本或者字段值,支持正则表达式
匹配:完全匹配,期望值与实际结果必须完全一致,一般结合正则表达式使用
相等:响应结果与指定的内容完全一致,不支持正则表达式
字符串:返回结果,包含指定的字符串,不支持正则表达式
否:不进行匹配
断言结果:JMeter断言成功,在查看结果树中请求是绿色,看不到断言成功的信息。JMeter断言失败的时候,在查看结果树中显示为红色,可以看到断言失败的信息。
八、思考时间
线程组/http请求 - 》添加-》定时器; 根据所在的位置不同,定时器的作用于不同。
九、参数化
未完待续。。。。。。