运行Jmeter需要Java环境,装jdk 环境变量配置jmeter_home
Jmeter目录
backups:备份 bin:执行文件,windows系统中执行jmeter.bat,linux系统中执行jmeter.sh或jmeter bin目录中的jmeter.properties是配置文件,其他文件暂时用不到 docs:接口文档,jmeter这个工具本身的接口 extras:用来做持续集成的 lib:依赖的其他文件 lib下的junit是用来做单元测试的,ext是核心jar包,插件都是放在ext下面 licenses:许可 printable_docs下的usermanual是用户手册,帮助文档
打开jmeter时的黑窗口不能关,也不能随便点,如果点了可能会暂停进程,直接最小化就可以了
jmeter汉化
Options — Choose Language — Chinese(Simplified) 修改完是汉化,但是重启又变回英文 在jmeter.properties中搜language 大概第39行,把language=en换成language=zh_CN,#删除
调整字体大小
jmeter录制有两种方式
1、badboy(有些网站不支持,会报错) 使用方法:badboy使用手册
添加察看结果树 录制好的脚本拖到jmeter中,会出现Thread Group 右键点击线程组-添加-监听器-察看结果树,会在下方出现察看结果树 这时可以点击运行,运行后下方会出现录制过的脚本,text的位置可以选择其他模式 这个位置可以选择其他模式,我选了浏览器模式,看着方便
2、用jmeter工具自己去录制 右键点击测试计划-添加-线程(用户)-线程组 线程组中定义好了你将会用多少用户去跑这个脚本,一个线程数就是一个用户 线程组中添加一个录制控制器 测试计划下面再添加一个HTTP代理服务器(与线程组同级) 代理服务器中的配置 目标控制器:选择刚才新建的录制控制器 分组:根据实际情况选择 代理服务器配置好了点击启动 点击启动后有一个事务控制器的弹框,拖到一边不用管 然后要配置浏览器的代理 以火狐为例 进入浏览器-右上角菜单-设置-下滑至网络设置-网络设置右边的设置-选择手动配置代理-代理的位置填127.0.0.1,端口要和刚才代理服务器中的端口一致,然后点击确定,没问题就重启浏览器 这时我再打开jmeter时就已经开始录制了 jmeter录制完记得要把代理停掉,不然无法上网(和fiddler一样)
点击clear all the recorded samples可以把录制控制器下所有内容清除 要想不录制那么多无用的内容 进入代理服务器,点击Requests Filtering,排除模式中的添加建议排除,可以排除掉一部分无用的内容,但是无法排除所有 要把所有无用的内容都删掉,需要 停掉现有的服务,然后到排除模式中添加内容.* .(js|png|gif|css|jpg|jpeg|txt).*
jmeter中几大类组件
取样器 性能测试、接口测试是测协议的,是什么协议就用什么样的取样器 最常用的是HTTP请求,也可能会用到FTP请求和JMS发布,其他几乎用不到 要测哪个协议,就去请求哪个就可以了 HTTP请求:请求网页 JDBC Request:请求数据库 FTP请求:请求FTP Java请求:请求Java SMTP取样器:请求邮件
逻辑控制器 控制脚本逻辑用的 录制脚本会用录制控制器,其他是手写脚本时会用到 前置处理器 一般会添加在HTTP请求上,在请求发出之前对请求进行的操作 请求发出之前用来做修改的 后置处理器 响应返回之后做处理的 关联的时候就是在这里操作 断言 断言,就是检查点 定时器 与时间相关的,让脚本走慢点或者走快点 测试片段 就是把脚本保存成一个片段,然后在脚本中引用 配置元件 搞配置的,比如想要读文件、配置它去连接数据库、加请求头、加cookie等 监听器 类似查看器,控制台,查看请求的响应、看聚合报告、看响应时间、看断言结果等
手写脚本
添加最基本的HTTP请求和察看结果树 HTTP请求改名 HTTP请求页面包含 协议:默认是http,可以不写,如果是https就必须写 服务名称或IP:要访问的请求,可以是网址,也可以是ip 端口号:默认是80,可以不写,如果端口号不是80就必须写 请求方式:常用的GET、POST,还有HEAD、PUT、DELETE等 路径:可以通过F12抓包获得 内容编码:默认可以不写,如果发生乱码就加上UTF-8
登录需要缓存,所以需要加cookie管理器,cookie管理器放在最上面 结果出首页和登陆后首页会显示三个结果是因为检测到了访问的这个网站需要重定向 HTTP请求默认值 如果每次都要在http请求中添加协议、ip、端口等内容很麻烦,所以要添加http请求默认值,一劳永逸。直接添加请求默认值,在HTTP请求中就不用每个请求都设置了。 这些都可以写,如果有post请求或者路径和默认值中写的不一致也没关系,直接在HTTP请求中添加就行,不冲突。 HTTP请求的优先级高,HTTP默认值的优先级低,如果HTTP请求中没有设置,就走默认值;如果HTTP请求中有设置,就按照请求的走。
手写注册
注册页面可以直接进入,并不需要通过首页,和首页之间不存在依赖关系 点击提交注册按钮,进入到首页 开始抓包
把路径抓出来粘到注册接口的HTTP请求路径位置 注册需要填写注册信息,这些都是参数,所以还要抓出参数 这个请求是这种格式,所以就不能直接粘过去,需要一个一个添加 这时从业务上来说执行应该是可以成功的,但是因为没有关联,所以会失败
关联
想在那个请求上面提取内容,就在哪个请求上面添加后置处理器 如果需要在同一个页面提取两个内容,可以再加一个处理器,一个处理器最好只提取一个内容,不然容易出错 可以先在前一个接口中找到想要的哈希值,然后复制这一行 jmeter支持多种关联的方式,这多种方式在不同的场景下都有自己的应用 正则表达式提取器 名称:随便写名字 注释:写明是干嘛用的,写了注释后鼠标放在正则表达式提取器上会有注释的提示 Apply to:
Main sample and sub-samples:检测到网站需要重定向,主要的和子级的都取 Main sample only:只取主要的 Sub-samples only:只取子级的
要检查的响应字段:一般选主体就可以
主体:选中接口,响应数据,Response Body中所有内容 Body(unescaped):选中接口,响应数据,Response Body中body标签内的内容(不区分大小写) Body as a Document:一般网页返回的都是一个HTML代码,但是有的网页返回的是文档,这时用这个,但是这种很少 信息头:选中接口,响应数据,Response Headers中的内容 Request Headers: 选中接口,请求,Request Headers中的内容 URL:选中接口,请求,Request Body中的请求网址 响应代码: 选中接口,取样器结果,Response code 响应信息:选中接口,取样器结果,Response message
引用名称:就是取个名字 正则表达式:不能有空格,一步都不能错。把刚才复制的那一行粘过来,删删减减。确定好左边界和右边界,然后value的值设置为(.*?),value的值就是我们写的表达式 模板:$ 1 $ ,意思是要取第一个地方的值。如果表达式后面还有另外的表达式,那么也可以取第二位,但是最好不要写第二个 匹配数字(0代表随机):1就可以 缺省值:找不到的时候给它赋个值,error或者null 在当前页面提取的内容,保存的是引用名称的值(在注册页面提取的hash,保存的就是hash,然后在下一个接口引用这个提取的值时,使用方法就是 ${hash}) 正则提取器里的内容都配置完之后就是已经提取完了,然后要在下一个接口引用 这时再一执行,就可以看到是注册成功的状态 边界提取器 把刚才的正则提取器禁用,然后设置边界提取器 因为想要提取的是hash的值,所以值前面的是左边界,值后面的是右边界 引用方式都是一样的 ${hash} 这时再执行一下注册试试,可以看到是注册成功状态 调试取样器 调试脚本方便 查看结果的位置可以看到取没取到想要的内容 当然,接口请求的位置也可以看到,只是调试取样器会方便一些 JSON提取器 如果接口返回的数据不是HTML格式而是这种JSON格式 返回结果可以用JSON格式来看 如果这时需要提取一些JSON响应结果中的数据,那么需要先找出想要的内容,需要用jsonpath 这里有一个 JSON Path Tester 假如说我想要提取到城市名,可以在这里进行测试,找到我想要的内容 如果我想要找到数组里某一个字段的所有内容,可以用通配符 * 然后再JSON提取器中设置 然后运行就可以在调试取样器中看到,我想要的值已经提取出来了。 我刚才设置的是取第一个值,所以date只有第一个 如果后面有需要用到的接口,直接用就可以了
|