首页 > 技术文章 > Jmeter的基本使用

zhufeng123 2021-02-09 22:04 原文

一、Jmeter下载与安装

  1、地址:http://jmeter.apache.org/

    

  2、配置环境变量

    ① jmeter是在jdk环境下运行,首先安装jdk,配置Java环境变量

    ② 第一步:在系统变量框,点击“新建”,建立一个变量:JMETER_HOME,值为解压的jmeter安装路径

      

    ③ 第二步:配置classpath变量,若没有则新建classpath,有则编辑

     变量值固定为:%JMETER_HOME%\lib\ext\ApacheJMeter_core.jar;%JMETER_HOME%\lib\jorphan.jar;%JMETER_HOME%\lib/logkit-2.0.jar;

      

    ④ 第三步:验证是否配置正确。首先进到jmeter安装路径,找到bin文件夹,点击进去,找到jmeter.bat,双击打开

  3、注意点

    1)解压之后压缩包叫apache-jmeter-4.0.zip,如是src.zip后缀的都不对,打开之后会报错不可用,因为里面缺少我们下一步将要配置的环境变量.jar文件

    2)对应的jdk版本不可太低,一般jmeter3.0的对应jdk1.7,jmeter4.0对应jdk1.8以上,否者启用jmeter也会报错

    3)一定要确保环境变量配置正确(包括jdk的与jmeter的环境变量配置)

二、Jmeter脚本生成方式

  1、手动编写

  2、Jmeter自带HTTP代理服务器录制

    第一步:右键点击“测试计划”,添加“HTTP代理服务器“。注意点:端口号:要填写这台电脑不被占用的端口号,可以在电脑cmd上面,输入netstat –an查看,哪些端口已被占用

                  

     第二步:打开浏览器的Internet选项->连接->局域网设置->勾选LAN。地址:设置为Jmeter所在的电脑IP,端口号要与STEP1设置的一致

        

    第三步:配置排除模式、避免录制无用脚本

        ① 手动添加排除模式:输入格式为: .*\.js.*| .*\.css.*| .*\.png.*| .*\.gif.*

          

         ②  点击Add suggested Excludes按钮、使用建议的排除模式

          

     第四步:启动HTTP代理服务器,点击启动即可

     第五步:打开任何浏览器,输入要访问的网址,即可录制脚本

     第六步:录制结束。录制结束后应该关闭Jmeter中的HTTP代理服务器,并且取消Internet选项中的代理服务器的勾选,避免影响正常浏览网页

        

     第七步:运行脚本。新建线程组,将HTTP代理服务器下面所有录制的HTTP请求全部移动至线程组下,选择合适的监听器,运行脚本

  3、Badboy录制

   1)Badboy概念:基于IE内核的,用于web自动化测试的工具,我们借助他用来生成jmeter的脚本

   2)优缺点:优点:录制简单、生成的脚本比较简洁;缺点:仅适用于B/S架构的产品录制、IE内核版本很低,所以可能会因为兼容性的问题导致无法录制

   3)步骤:

      第一步:输入URL开始录制

      

      第二步:录制结束后点击暂停

      

       第三步:导出jmeter格式:File-export to Jmeter

       第四步:用Jmeter打开即可

  4、三种方式的比较

    

 三、测试案例实操

   1、添加本次测试计划 (右键-->添加-->线程(用户)-->线程组)

     

    2、添加协议及相关配置信息

    

    ① get请求

    

    ② POST请求。注意点:pwuser=zhangsan&pwpwd=123456&hideid=0&cktime=31536000这种类型的数据可以先复制,然后点击剪贴板添加

    

  3、添加断言、校验返回结果

    

  4、为线程添加监听器

    

四、HTTP Cookie管理器

  1、手动添加cookie

    第一步:在浏览器中获取已登录用户的cookie值

     

     第二步:添加HTTP Cookie管理器

    

      ① 每次反复清除Cookies?:选择后,则每次线程组运行时,都会清除 cookie。(若是手动添加的cookie,则不会被清除)

      ② Implementation:履行的协议。

      ③ Cookie Policy:Cookie的管理策略

    第三步:运行接口。不需要先登录、也可直接运行后面的接口

    

   2、自动生成cookie

    1)无需设置cookie的值

      

    2)需要按照流程设置http请求。登录成功后才能生成cookie,才能执行后面的请求

       

    3)调整登录的位置,则报错

      

 五、Jmeter-参数化

  1、Jmeter中参数调用的方式均为${ParamName}

  2、用户参数

    1)路径:前置处理器-用户参数( User Parameters )

    2)将设置后的变量名称可以用于用户登陆等,可以从这里面随机取值

       

     3)注意:引用的参数名跟用户定义变量设置的名称必须保持一致

  3、用户定义的变量

    1)路径:配置元件-用户定义的变量( User Defined Variables )

    2)相当于更改变量名称

       

     3)批量添加的方法

      ① 第一步:利用text做个表

          

      ② 第二步:将表中的所有内容复制到剪切板中(全选+复制)

      ③ 第三步:在“用户定义的变量”中选择“Add frome Clipboard”

        

   4、函数助手

    1)__RandomString:随机获取字符串。应用场景如下:

      ① 进行多个账号注册,注册信息要求手机号mobilephone不能重复

      ② 手机号前3位号段固定,那就对手机号后8位进行随机

        

       ③ 拷贝生成的函数字符串,粘贴进行参数引用

        

    2)_Random:输入最小值、最大值,随机获取数字。闭区间,[]

      

      通过设置存储结果的变量名称,在后面使用该变量,调用这个随机数的值

      

    3)__jexl3:${__jexl3(表达式,变量名)}。执行通用JEXL表达式,并返回执行结果——True或者False

      ① ${__jexl3(5>4,num)}

      ② 与随机数配合使用:${__jexl3(${__Random(1,10,rand)}>18,)}

      ③ 使用&&或者and、表示与:${__jexl3(${rand}>4 && ${rand}<9,)}  随机数大于4,小于9

      ④ 使用||或者or、表示或

    4)__RandomFromMultipleVars:${__RandomFromMultipleVars(变量名1|变量名2|...,变量名)}。在一定的取值范围内随机取数

      ① 实现步骤:

        第一步:自定义一组变量,并对变量进行赋值

          

        第二步:利用函数助手用自定义的变量进行填充

          

        第三步:在需要的http中加入随机变量

          

      ② 注意点1:必须使用变量名,不能使用具体的值,否则不能实现其功能。${__RandomFromMultipleVars(WNCD032|WNCD044|WNCD201,name)}

        

      ③ 注意点2:变量名之间只能使用管道符"|",不能使用逗号等其他分隔符,否则不能实现其功能

        

   5、CSV数据文件设置:该组件可以用来读取CSV数据文件,然后通过参数调用的方式提供给作用域内的脚本使用

       

    1)Filename:需要传入文件的完整路径。我的文件位于D盘目录下,文件名为users.txt。

    2)File encoding:参数文件的编码格式。一般选择UTF-8

    3)Variable Names:对应参数文件中每列的变量名,也是你要引用到请求中的参数变量名。这里第一列是手机号、第二列是昵称。变量名可以自定义。

    4)igonre first line(only used if Variable Names is not empty):当 CSV 文件中首行设置了变量名时,该项设为 true,此时每次请求读取文件时会自动忽略首行,直接读取第二行的数据。若首行未设置,则选择False

    5)Delimiter:文件中的分隔符,默认英文的逗号分隔。所以注意txt文档中每行多个参数用英文逗号分隔

    6)Recycle on EOF: 设置为True后,允许重头循环取值;为False,当读取文件到结尾时,停止读取文件

    7)Stop Thread EOF: 当Recycle on EOF为false并且Stop Thread EOF 为true,则读完csv文件中的记录后,停止运行,线程数及执行次数无效。

    8)Sharing Mode:共享模式。All threads:所有线程,所有线程循环取值,线程1取第一行,线程2取下一行;Current thread group:当前线程组,各个线程组分别循环取值;Current thread:当前线程,该测试计划内的所有线程都取第一行

六、正则表达式提取器

  1、可以用来提取接口响应里的信息,给予后续接口传参用

    

  2、Apply to:应用范围(一般就选择默认的Main sample only),就算有重定向,一般也是提取最终那个请求的接口

  3、要检查的响应字段:即样本数据源

    1)主体:接口响应主体内容,一般要提取普通http响应结果的数据,都勾选这个

    2)信息头:响应头的所有内容

    3)Request Headers:请求头的所有内容

    4)url:是对sample的url进行匹配,也就是查看结果树里请求内容的第一行url,不包含data里的请求参数(即只能匹配protocol(协议)+host+path+querystring,如:https://www.baidu.com/index.php?tn=monline_3_dg)

    5)响应代码:http响应代码,如101,200,302,404,501等

    6)响应信息:http响应代码对应的响应信息,例如:OK, Found(HTTP/1.1 200 Ok;HTTP/1.1 302 Found)

  4、引用名称:其他地方引用时的变量名称,名称只能是一个,引用方法:${变量名}

  5、正则表达式:通用语法:左边界(.*?)右边界,左右边界就是为了能准确定位到想匹配的内容

  6、模板:对应正则表达式提取器类型,样式为:$n$。XXX(\d+),XX(.*?)XX。若正则表达式查找到多个值,序号表示出来哪一个值

    1)$0$。为整个表达式匹配到的内容,包括小括号内跟小括号外的内容

    2)$1$。若模板为:$1$,则对应正则表达式中的第一个(.*?)所匹配的内容

    3)$2$。对应正则表达式中的第二个(.*?)所匹配的内容

    4)$1$$2$。把2个(.*?)所匹配的内容拼接起来

  7、匹配数字:正则表达式匹配数据的最终结果可以看做一个数组,匹配数字即可看做是数组的第几个元素

    1)0:随机返回匹配的数据

    2)1:返回匹配结果数组的第一个元素

    3)负数:表示返回全部元素,并且同时会返回一个元素总数的变量token_matchNr

    4)在引用时:通过${变量名_1}的方式来取第1个匹配的内容,${变量名_2}来取第2个匹配的内容

      

   8、缺省值:匹配失败时的默认值,通常用于后续的逻辑判断,建议使用一些特殊含义的,比如0,NULL,ERROR等

 七、逻辑控制器(如果(if)控制器)

  1、作用:根据给定表达式的值决定是否执行该节点下的子节点

  2、用法一:勾选“interpret condition as variable expression”

    1)这时expression中不能直接填写条件表达式,需要借助函数将条件表达式计算为true/false,可以借助的函数有_jexl3和_groovy

      a.借助函数助手,生成表达式。有时会出现\,去掉即可

        

       b.把生成的表达式,写在if控制器中

        

     2)直接填写5==5或者${rand}>0,无法识别,不能运行关联请求

      

  3、用法二:不勾选“interpret condition as variable expression”。直接输入判断表达式即可,判断表达式为真时,执行if控制器下的请求

    1)如“1!=2”,则一定会执行下面的http请求

      

    2)填写判断表达式${rand}>0

      

八、输出HTML报告

  1、环境要求

    1)jmeter3.0版本之后开始支持动态生成测试报表

    2)jdk版本1.7以上

    3)jmx脚本文件

  2、直接生成HTML报告。在脚本文件路径下,执行cmd命令:jmeter -n -t jmx文件 -l result.jtl -e -o D:\ResultReport

     

    1)● -n: 非GUI模式执行JMeter

    2)● -t: 执行测试文件所在的位置

    3)● -l: 指定生成测试结果的保存文件,jtl文件格式

    4)● -e: 测试结束后,生成测试报告

    5)● -o: 指定测试报告的存放位置

    6)注意:结尾的 ResultReport 是自己手动创建的报告文件夹。每次启动命令之前,文件夹内容必须和 jtl 文件一起清空

    7)每次运行脚本文件时,必须把报告文件夹下的内容和.jtl文件全部删除,否则会出现如下截图中的错误

      

      解决办法:写一个bat,每次执行bat都自动去清空之前的报告和jtl文件

        ① 删除文件:del resylt.jtl  ② 删除文件夹:rd 文件夹名称  ③  重建文件夹:md 文件夹路径

        

  3、使用之前的测试结果,生成测试报告

    1)先生成测试结果:jmeter -n -t jmx文件 -l result.jtl

    2)再生成报告:jmeter -g result.jtl -o D:\ResultReport

  4、报告详解:https://www.jianshu.com/p/4f32918d66bb

 

推荐阅读