zoukankan      html  css  js  c++  java
  • jmeter之认识元器件及功能 大杂烩

    一、线程组

      线程组是一个测试计划的开始点。在一个测试计划中的所有元件都必须在某个线程组下;

      1.1 基础线程组Thread Group

      Ramp_up Periond值是预期Jmeter用于启动所有线程的时间;若是线程数过多,则会>该值启动完所有线程;

      如下图,预期5s 启动200个线程;可以通过"用表格查看结果"查看每个线程的启动时间;

      

       1.2 阶梯加压线程组 jp@gc - Stepping Thread Group (deprecated)

      注意,该线程组需要和Active Threads Over Time(不同时间活动线程数)等结合起来;一般是为了计算每秒最大并发数;

      平衡状态下,并发用户数=rps*响应时间=hps*响应时间;

      1.3 目标线程组 bzm - Arrivals Thread Group

        预期每秒业务量,**时间

        jmeter会根据预期的业务量与业务时间,估算出需要多少线程。如果从业务角度考量,这个线程数就是单位时间的并发数;

        非常适合进行更传统的负载测试。可能的情况可能是“当系统有每分钟100张的订单,我们的系统是否运行良好?”。

     二、取样器

      取样器指示Jmeter向服务器发送请求

      2.1 Debug Sampler

        Debug Sampler会把我们自定义的变量输出在response data中,方便我们调试的时候使用

       2.2 HTTP Request

        Post请求:常用于表单的提交,例如登录请求,新增请求等;

        Get请求:用于信息获取,常用于查询,请求的数据会附在url之后(就是把数据放置在HTTP协议头中),以?分割url和传输数据,多个参数用&连接;

        PUT请求:用于修改;

        Delete请求:常用于删除;

      2.3 JDBC Request

        这个Sampler可以通过sql语句乡数据库发送一个jdbc请求,并对获取返回的数据进行操作。它经常需要和JDBC Connection Configuration(配置数据库连接的相关属性)一起使用;

        Variable names:保存sql语句返回结果的变量名;

        Result variable name:创建一个对象变量,保存所有返回的结果;

      2.4 jp@gc - Dummy Sampler (模拟请求

        它用于模拟一个接口请求,效果类似于Mock

        我们可以设置响应码、响应信息、延迟时间、响应时间、模仿响应时间、请求数据、响应数据;

        它的意义在于:当服务器还没有开发完成时,帮助我们调试脚本;

        我们可以通过后置处理器获取Dummy Sampler里面的信息,供后面的业务使用;

       

       2.5 Java Request(java请求)

        同Dummy Sampler一样,可以用来模拟一个接口的请求和返回;

      2.6 FTP Request(FTP请求)

        ftp请求分为两种,一种是从ftp下载文件,一种是从ftp上传文件;

    三、表达式和提取器

      3.1 JSON Extractor (JSON提取)

        JSON Extractor使用json path表达式匹配,可以一次取多个变量值。$表示响应的根对象。取子对象或对象的属性用. 取数组里的对象用[],数组索引从0开始

      3.2 XPath Extractor

        //*[@class,'A']/@href 从根目录下定位所有class=A的href

      3.3 正则表达式提取

        它通过正则表达式获取接口响应,并传入下个接口

        左边界(.+?)右边界

        左边界(.*?)右边界

        正则表达式:利用正则将需要的数据提取出来

        () 括起来的部分就是需要提取的,对于你要提的内容需要用小括号括起来

        . 点号表示匹配任何字符串

        + 一次或多次

        ? 在找到第一个匹配项后停止

        模板:用$$引用起来,如果在正则表达式中有多个正则表达式(多个括号括起来),则可以是$N$等,表示提取第N个括号里面的值;

        匹配数字-1:表示取所有返回值,此事提取结果时一个数组,其余正整数代表第几个匹配的内容提取出来。如果匹配数字选择的是-1,后续还可以通过${xxx_1}的方式来取第1个匹配的内容,${xxx_2}来取第2个匹配的内容;

        匹配数字1:表示第一个返回值;

        匹配数字2:表示随机取一个返回值;

    如下图:提取生日;() 要提取的内容;.任意字符;{n} 精确n次;*前面字符出现任意次;.*任意长度的任意字符串;

     

     四、配置元件

      4.1 CSV Data Set Config

      在使用JMeter的时候,往往需要参数化一些数据,常用到的就是CSV Data Set Config

      4.2 HTTP Cookie Manager

      用来存储浏览器产生的用户信息

      4.3 HTTP Header Manager(HTTP信息头管理器)

      默认http请求的值,如server、ip、port、Protocol甚至path、parameters,都可以设置。

      4.4 HTTP 请求默认值

      默认http请求的值,如server、ip、port、Protocol、path、parameters都可以设置

      4.5 JDBC Connection Configuration

      做JDBC请求,首先需要将相应的jar包放到jmeter目录中的lib文件下,然后重启Jmeter

      mysql驱动:mysql-connector-java-5.1.13-bin.jar

      4.6 Random Variable

      配置生成随机数,自定义输出格式,最大最小值,以及是否为每个线程单独生成

      4.7 用户定义的变量

      当前的线程组内所有取样器都可以引用变量。

      4.8 计数器

      初始值,递增,引用名称

      4.9 插件管理器

        不要手动安装各种插件,jmeter提供了用户界面来完成插件的安装、升级、卸载。

        它管理的插件包括jmeter-plugins.org上面常用的插件,和各种第三方插件甚至核心JMeter插件。

        安装插件管理

        1.下载plugins-manager.jar

        2.将plugins-manager.jar放到jmeter的libext目录下;

        3.启动Jmeter;

        4.菜单栏多出一个"Plugins Manager"的选项;

      Installed Plugins:显示已安装的插件;Available Plugins:显示可安装的插件;Upgrades:显示可以升级的插件;

      通过勾选/取消勾选插件,并点击右下角"Apply Changes and Restart JMeter"按钮来卸载、安装、升级插件;

    五、 定时器

      5.1 用户集合点(Synchronizing Timer)

        加载到一定的user(线程数)才进行并发操作;

      5.2 固定定时器(Constant Timer)

        线程的标准等待时间,性能测试中相当于用户行为中的思考时间;

      5.3 固定吞吐量定时器(Constant Throughput Timer)

        这种定时器可以限制吞吐量(tps),约定事物每分钟的执行数;

    六、逻辑控制器

      逻辑控制器允许我们定制JMeter发送的请求。控制器可能包含如下的子元件:取样器,配置元件,其它的逻辑控制器;

    逻辑控制器能够更改它元件中的请求顺序。

      6.1 ForEach控制器

        ForEach控制器一般和用户自定义变量一起使用,用于可以遍历读取相关的返回值。该控制器下的采样器或控制器都会被执行一次或多次,每次读取不同的变量值。

    注:foreach控制器通常和表达式提取器一起使用。表达式提取值应为-1,表示取全部值,然后sampler在foreach控制器下执行遍历。

       6.2 循环控制器

        指定其子节点运行的次数,可以使用具体的数值,也可以设置为变量。

      1.勾选永远:表示一直循环下去。

      2.如果同时设置了线程组的循环次数和循环控制器的循环次数,那循环控制器的子节点运行的次数为两个数值相乘(线程数*循环控制器数值)

       6.3 While控制器

         直到条件为false时,停止运行。

       6.4 if控制器

        根据给定表达式的值决定是否执行该节点下的子节点,默认使用javascript的语法进行判断。

      6.5 交替控制器(交替执行控制器下的业务)

    七、常见监听器、断言

      7.1 查看结果树

      一、左侧的结果列表

        1.通常执行成功的请求在左侧会显示绿色,执行失败会显示红色。

        2.其实,当我们没有加断言时,显示绿色并不一定就是成功了,只代表响应码是200或300系列,显示红色说明响应码是400或500系列。所以要想确定请求返回的是正确的,必须要加上断言,只有断言成功才会显示绿色。

        3.在左侧最下面有一个复选框Scroll automotically?勾选后,当请求很多时,滚动条会自动向下滚动。

      二、右侧的“取样器结果”

      

       三、Raw和Parsed

        默认情况下我们看到的是raw状态的数据,也可以点击下面的标签切换到Parsed状态。

      四、结果数据项的配置

        点击右侧的Configure,会弹出配置框,在这里可以根据自己的需要选择想要在“察看结果树”中展示的数据,默认是全选的,我们可以自由配置。

       五、“请求”选项卡

        请求中会显示请求的url、参数、请求头、cookies等详细信息。

      六、“响应数据”选项卡

        1.这里是服务器的响应结果数据。

        2.通过左侧的下拉框来设置响应的数据显示方式。

        3.通过下面的search行可以进行对当前请求的内容搜索。

     

       7.2 BeanShell断言

      利用beanshell断言,获取实际响应字段与预期值进行比对,自定义断言结果。

      Failure=true;

      FailureMessage="断言失败";

      7.3 响应断言

      要测试的响应字段:针对响应的不同部分进行匹配。

      响应文本、响应code、响应头...

      匹配规则:

      包括:响应内容包括需要匹配的内容就算成功。

      匹配:响应内容要完全匹配匹配内容,不区分大小写。

      equals:完成相等,区分大小写。

      7.4 断言持续时间

      约定响应时间,响应时间如果超出约定,则断言为失败。

      7.5 监听器—断言结果

        所有脚本的断言结果都会写入这里,可以很清晰的查看请求的结果是否符合预期。

    八、关联

      关联的意义:接口请求中的某一个变量需要用到上一个接口的某个返回值(或者主键id),此时我们就需要关联。

       Cookie管理器关联session。

      一个增删改查流程,想要做自动化检验就必须形成一个闭环,那么删除-修改-查看就必须调用同一个必填参数,例如唯一性的id。

      JDBC关联

    九、参数化

      参数化是自动化测试的一种常用方法。通常用法就是将脚本中的某些固定值通过参数来代替,在脚本运行时可以指定参数的取值范围和规则,它可以是常量也可以是变量。这样,脚本在运行时就可以根据需要选取不同的参数值作为输入。它通常被称为数据驱动测试,参数的取值范围被称为数据池。

      全局变量在测试计划中设置,作用于整个线程组。

      局部变量设置于各个控制器中,通过前置处理器—用户参数或者配置元件——用户定义的变量来设置。

    十、常用的函数

      Jmeter函数是一种特殊值,可用于除测试计划外的任何组件。

      Jmeter函数有两种函数:自定义函数和内置函数。

      自定义函数可以通过beanshell脚本来定义。

      内置函数是jmeter自带,允许写进任何非控制器测试组件的任何域,这包括取样器,定时器,监听器,修改器,断言,前置处理器,后置处理器和配置元件。

    __counter:计数器函数

    每次调用计数器函数都会产生一个新值,依据循环次数,每次迭代加1;该函数也有对应的配置元件:计数器,功能类似。

     __Random:随机数函数

    函数__Random会返回指定最大值和最小值之间的随机数。

     __RandomString():随机字符串函数

    Random string length:随机字符的长度。

    Char to use for random string generation:用来生成随机字符串的字符,可以是纯数字,纯字符,字符字母数字组合。

     __time

    1、函数__time可以通过多种格式返回当前时间。

    2、如果省略了格式字符串,那么函数会以毫秒的形式返回当前时间。其他情况下,当前时间会被转成简单日期格式。

      YMD=yyyyMMdd

      HMS=HHmmss

     _matchNr

    用于统计前一个接口返回值的总数。可以给后续的控制器提供可控的循环次数。

     十一、必学的Beanshell脚本

      Beanshell保存响应内容

      利用BeanShell脚本可以提取响应结果并保存到本地文件。如,可以保存cookie相关信息。

      在本地新建一个csv文件,新建一个BeanShell PostProcessor后置处理器

    参考:https://www.cnblogs.com/canglongdao/p/12986709.html

      Beanshell断言

      Beanshell断言相对于jmeter自带的断言,比较灵活,也可以自定义断言结果。

    参考:https://www.cnblogs.com/canglongdao/p/13025002.html

      Beanshell解析jsonlist

      将fastjson-1.2.49.jar包置于jmeter的lib目录下,并将该jar包添加到测试计划的Library中,否则会报错。

     解析思路

      利用beanshell获取到json响应,然后通过JSONObject和JSONArray将数组解析,遍历数组的length之后,提取参数值。

    参考:https://www.cnblogs.com/canglongdao/p/13042684.html

      Beanshell常用内置变量

      Jmeter在BeanShell中内置了变量,用户可以通过这些变量与Jmeter进行交互,主要的变量及其使用方法如下:

      log:写入信息到jmeter.log文件,使用方法:log.info("ok?");

      vars:操作jmeter变量,它是测试用例与BeanShell交互的桥梁,常用方法:

        vars.get(String key):从jmeter中获得变量值。

        vars.put(String key,String value):数据存到jmeter变量。

      props:操作jmeter属性,该变量引用了Jmeter的配置信息,可以获取Jmeter的属性,它的使用方法与vars类似,但是只能put进去String类型的值,而不能是一个对象。

      prev:获取前面的sample返回信息,常用方法:

        prev.getResponseDataAsString();获取响应信息

        prev.getResponseCode();获取响应code

    十二、高级测试技巧

      录制http/https请求

      生成HTML测试报告

        jmeter -n -t 路径脚本.jmx -l 路径结果.jtl -e -o 路径HttpReport

    参数说明:

      -n:非GUI模式执行Jmeter

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

      -l:置顶生成测试结果的保存文件,jtl文件格式

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

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

       上传文件到服务器

      首先确认你的文件名称,参数名称,MIME类型,这些可以从接口文档里面获取,或者直接在页面抓包然后从请求头里面查看。注意,文件名称可以写成绝对路径。

      其次,Advanced里面选择java类型,切记。 执行脚本之后,文件会上传到服务器上。

     

     

       内存溢出解决方案

      内存泄露是指你的应用使用资源之后没有及时释放,导致应用内存中持有了不需要的资源,这是一种状态描述。

      内存溢出是指你应用的内存已经不能满足正常使用了,堆栈已经达到系统设置的最大值,进而导致奔溃,这是一种结果描述。

      通常都是由于内存泄露导致堆栈内存不断增大,从而引发内存溢出。

      在利用jmeter测试过程中,如果内存溢出的话,一般会出现这个提示:java.lang.OutOfMemoryError:java heap space:意思就是堆内存溢出,不够用了。

     HEAP最多设置为物理内存的一半;

    NewSize:表示新生代的内存空间

    NewRatio:表示新生代和老年代的比例。此处新生代:老年代=1:2

    SurvivorRatio:表示伊甸园和space的比例。此处伊甸园:space=8:2

      跨线程组的关联

      Jmeter的接口关联通常只在当前线程中实现。如果想要实现跨线程的关联,需要一些小技巧。

      跨线程传递参数

      可以在BeanShell Sampler中用${__setProperty(,,)}函数实现。它可以将需要关联的参数设置为系统属性。

      比如我们利用正则表达式提取了title,紧接着就可以在BeanShell Sampler将其设置为全局变量。

     后续在其它的线程中如果需要关联这个title,需要用到${__P(,)}函数来调用它。

      

      

      

      

         

     

      

     

      

      

        

      

      

          

      

     

        

     

     

    越努力,越幸运!!! good good study,day day up!!!
  • 相关阅读:
    JS 集合
    JS 字典
    JS 链表
    JS 队列
    JS 栈
    JS 列表
    JS 数组
    IOS 提示无法下载程式问题
    ubuntu 下安装Go开发环境
    菜鸟看Redis(一)
  • 原文地址:https://www.cnblogs.com/canglongdao/p/13100609.html
Copyright © 2011-2022 走看看