性能测试实战(四):Jmeter的使用 | 您所在的位置:网站首页 › 日志文件存放位置怎么写的 › 性能测试实战(四):Jmeter的使用 |
一、初识Jmeter
1、Jmeter的文件结构: (1)bin jmeter的启动文件以及配置文件。jmeter的默认保存文件路径,也是在jmeter的bin文件夹里;读取文件,默认也是该文件夹。 (2)docs 文档,开发人员看的接口api文档,如果你要对jmeter进行二次开发,需要阅读此文档。 (3)printable_docs 文档,这是Jmeter的使用帮助文档(离线帮助)。 (4)lib library库,存放jmeter源码打成的jar包,以及第三方人员开发的扩展功能jar ext文件夹,放第三方人员开发扩展功能jar 场景设计时,也会涉及到jar (5)extras 在jmeter性能测试持续集成的时候,而外生成的文件夹 2、jmeter运行模式 (1)GUI图形界面:学习时使用该方式运行 (2)CLI无图形界面:实战中使用该方式运行 3、面试问题 (1)你用Jmeter做性能测试,你的机器配置需要什么样的配置? jmeter默认启动时,只会占用1g的内存资源 修改jmeter以及系统的相关配置,才能支持比较大的并发用户数 需要单独的性能测试机器,测试机器的配置由被测服务器决定。如果被测服务器支持几千上万的并发用户数,那么一台无法满足被测服务器的并发用户数,则需要多台测试机器;如果被测服务器,只能支持几十小几百的并发用户数,则测试机器的配置,需要中等偏上的硬件配置。 一般一台测试机器能支持上千的并发 4、性能测试相关 (1)性能测试时,如果写代码,不要使用beanshell,因为性能低 (2)写性能测试脚本时,jmeter不仅支持java,也支持python2.7、groovy、jython、js 二、jmeter工具的简单使用1、使用时,需要改变2个习惯 (1)使用工具时,容易在菜单中找功能,但jmeter的菜单中只有很少部分的功能 (2)jmeter的重点功能,都在右键 2、界面基本功能介绍 (1)快捷工具栏 00:00:00 表示jmeter的运行时间 🔺 0 0/0 ▲可以打开日志面板,后面的第一个数值,在工具报错时会有红色数字 0/0 前面的数值,是当前有多少个正在运行的线程,后面的数值,表示预计要开启多少个线程数 3、写脚本 (1)理解接口文档 ① http请求:请求行 请求头 请求体 请求行:请求方法,请求URI 请求头:Content-Type、UserAgent 当你的请求体为json格式时,请求头中必须有Content-Type:application/json ②请求头:Content-Type:application/json;charset=utf-8 意思是:请求体格式为json格式,可通过jmeter的配置元件消息头管理器配置 Accept: application/json 是表示响应格式为json格式,非必传 ③http响应:响应行 响应头 响应体 响应行:响应码 2xx 响应成功 3xx 成功,但是有重定向 4xx 资源找不到,请求地址可能有问题(功能测试时),发起机器、脚本、服务器可能有问题(性能测试时) 5xx 服务器异常 响应头:Accept(非必传) ④json格式: { "key0":"value", "key1":2, "key2":"[{\"key0\":\"v1\",\"key1\":2}]" } (2)根据接口文档写脚本 ①存在注册接口文档如下: ②上面有个字段code验证码,这个在企业测试环境中,可以采取以下两种方式解决: 开发人员暂时注释掉该部分代码 使用万能验证码 ③http请求注意事项 ⚪协议输入项里,如果协议是http可以不写,但https一定要写 ⚪服务器的名称或IP:千万不要写带任何 / 的信息 ⚪端口根据项目端口填写 ⚪请求方法一定要根据文档描述来填写 ⚪路径必须使用 / 开头 注意路径的前后空格,空格在url-encode编码后会显示 %20 ⚪请求体的内容编码:将非英文字母或数字的值,进行utf8编码 🔺控制请求体的三个地方 ▲内容编码:utf-8 ▲消息头:Content-Type 加 ;charset=utf8 application/json ------Content-Type添加该字段,代表的请求体为json格式 application/x-www-form-urlencoded ------ 不写时,默认为此表单格式,当请求体不是json的时候,不写application/x-www-form-urlencoded也会默认此格式 此时,请求体,需要写在http的参数里面 ▲在参数中写内容时,勾选“编码”,那么参数值就会进行url-encode编码,需要注意当你的请求体为参数(表单格式)时,你的参数值,如果有中文或特殊符号,请务必勾选“编码”,不然,你的请求可能报错,或进入服务器内部后乱码。所以,不管你的值是什么数据,建议都勾选“编码”。而消息体数据,可以写json、xml;文件上传时,可以写文件路径来传文件。 ④响应体的编码控制 ⚪在jmeter请求之后,在查看结果树中,看到response-body中,出现中文乱码 出现乱码的原因:jmeter.bat文件启动,去读取了我们的配置文件,然后再启动jmeter,jmeter的编码,使用了系统的中文编码,系统window中文版,编码gbk,所以,我们jmeter中,所有的中文,都是gbk编码,当你的请求响应体中的编码,不是gbk,或者是gbk但无法编码时,就会出现乱码。 解决方式:先把jmeter的编码改为utf8,如果不行,再修改为响应体的编码(修改方式:bin文件夹下面修改jmeter.proper...的配置文件) ⑤自动重定向和跟随重定向 自动重定向,也会重定向,但不会记录中间过程,因此不能提取中间数据 跟随重定向,默认勾选,请求会自动进行跳转到新的地址上,而且会显示重定向的过程,我们也可以提取出重定向过程中的数据(可以通过后置处理器提取数据)。 如果发生了重定向,在查看结果树中,会有一个折叠的加号可以展开。如果你的请求方法错误,也可能在查看结果树这边,看到这种带有加号的折叠现象。(红色时,表示方法错误) 使用keepalive,与性能相关,现在接口协议http版本是1.1版本,默认就是长连接,勾选keepalive就是长连接,可进行长时间的数据传输,不需要再次握手。注意:长连接建立起来之后,会占用发起方的端口,被测服务器要使用1个连接通道,所以端口数量可能会成为性能瓶颈,因为端口数量有限,大概是6.3万左右(1024~65534之间),我们服务器的通道也可能成为性能瓶颈(有资源才能创建,不可能无限大)。解决办法:不勾选keepalive(有可能解决问题,延缓出错时间,不能从根本上解决问题);去修改系统的端口访问相关配置(操作系统修改,如果不修改,30个并发用户数可能就出错了) ⑥jmeter的元件的作用域与优先级 ⚪配置元件的优先级:优先级最高的元件 典型的元件:csv数据文件设置、消息头管理器、请求默认值、用户定义变量 优先级最高:最先被执行 都是配置文件:优先级顺序从上往下 用户定义变量: ⚪作用域:测试计划>线程组>取样器(如果这三者都有相同元件,执行顺序由左到右,最终以最后的元件配置为准) ⚪发起请求的元件:取样器 要有取样器,必须先有线程组(这个是用来进行性能场景设计的) 要有线程组,必须先有测试计划(脚本的根路径) 取样器:是真正发起请求的元件,也就是真正干活的 根据不同的协议,会有不同的取样器 ⚪逻辑控制器: 控制取样器的逻辑 ------- 肯定在取样器之前被执行,逻辑控制下面会有取样器 作用域:只会作用在它下面的取样器 ⚪前置处理器:在取样器被执行前被执行,是在请求前做准备 作用域:放在测试计划下,则作用于整个测试计划,都可以使用;放在线程组,则作用在线程组,而不作用域其他线程组;放在取样器,则作用域取样器,而不作用于同级的其他取样器(可作用于下一级取样器)。 用户参数: ⚪后置处理器:对取样器的执行结果进行,是在请求后才执行 json提取器、正则提取器 作用域:放在测试计划下面,因为没有请求结果,相当于没有作用域;放在线程组下面,如果有多个请求结果,则结果不可预知;因此,后置处理器应正确放在某个取样器下面。 ⚪定时器 定时器放在线程组下面,作用域整个线程组 定时器放在取样器下面,只作用于该取样器 ⚪小结 元件作用作用域取样器只作用于自身无作用域逻辑控制器控制子节点作用于子节点前置处理器在取样器执行前,影响所有取样器整个测试计划后置处理器在取样器之后执行,影响在此之后的取样器后续取样器断言取样器之后执行当前取样器定时器影响同级及子集取样器同级及子级配置元件影响同级及子级元件同级及子级监听器手机取样器执行数据同级⑦实战展示: |
CopyRight 2018-2019 实验室设备网 版权所有 |