zoukankan      html  css  js  c++  java
  • jmeter重点

    之前,写过一篇文章:jmeter,学这些重点就可以了,今天就来把一些重点细节点说一下。 

    测试计划

    可以理解为各种测试元件的容器

    其中:

    定义整个测试中使用的重复值(全局变量),一般定义服务器的ip、端口,这样,我们改下值,就可以测试不同的环境了,比如测试环境、灰度环境等;

    或者把对应的几个测试环境都设置为变量,后面用哪个,就引用哪个,不过这个引用,最好是在请求默认值中引用,实例参考:https://www.cnblogs.com/uncleyong/p/10988524.html

    默认不勾选,如果测试计划下有多个启用的线程组,他们是并行执行的(也就是混合场景);如果勾选,是顺序执行,即前一个线程组执行完了,才执行下一个线程组,大家可以试一下;相当于lr的group模式;

    调试的时候用,会打印更多日志,不勾选,勾选的话很影响性能,会有详细的请求记录,消耗资源;

    函数测试模式勾选了,还要把查看结果树写到一个路径下的文件中,函数测试模式才生效

    一般用于添加jar包配合着beanshell使用,注意:lib目录下加入了新的jar包,需要重启jmeter;参考链接中“方式一:把jar包加入到classpath”:https://www.cnblogs.com/uncleyong/p/11475577.html

    线程组

    相当于LR中场景设计,可以设置一些并发策略,模拟并发用户发送请求

    其中:

     默认即可,并发过程中,遇到错误,继续执行下一次请求

    线程数:并发数

    启动所有线程需要的时间,如果线程数是100,这里是10,表示每秒启动10个线程

    循环次数:不勾选永远,后面的次数生效;类似LR中运行时设置中迭代次数;循环控制器是循环,相当于LR中的for循环

    调度器:循环次数中勾选永远,持续时间就是并发的时间,一般10-15分钟,根据业务实际情况来设置

    在当前时间之后的启动延迟时间后开始运

    【Sampler】

    在线程组下(在测试计划下面不能添加取样器),是被请求内容;

    假如请求是:http://192.168.168.168:8057/user/query?name=全栈测试笔记

    自动重定向:只记录最后跳转请求,会丢失初始请求的Cookie等信息;

    跟随重定向:记录整个请求过程所有信息, 过程请求为sub-sampler,即子请求

    POST请求时,使用的Content-Type,文件上传的时候使用;默认不勾选,此时的Content-Type是application/x-www-form-urlencoded

    参数中,如果有特殊字符时(“=”、“&”、“?”等),最好选上“编码”,否则字符串可能会被截断; 

    自动添加参数名和值之间的等号

    发送json,实例参考:https://www.cnblogs.com/uncleyong/p/10990373.html

    发送文件,实例参考:https://www.cnblogs.com/uncleyong/p/9794250.html

    上图,客户端实现默认是HttpClient4,也可以从配置文件中看到,当然也可以改配置文件

    客户端设置超时时间

    jmeter在发出 HTTP请求并获得响应的HTML文件内容后,且对该HTML进行分析并获取HTML中包含的所有资源(图片等),默认不选中,此选项和loadrunner中是否下载非html资源类似;

    响应保存为32位的MD5加密字符

            (重点)HTTP请求:实例参考:测试必备:jmeter测试http协议接口的各种传参方式

            BeanShell Sampler,实例参考:https://www.cnblogs.com/uncleyong/p/7189778.html,或者:https://www.cnblogs.com/uncleyong/p/9429752.html

            Debug Sampler:调试的时候用,只看到jmeter变量,实例参考:https://www.cnblogs.com/uncleyong/p/10939647.html

    如果是其它协议,比如dubbo、websocket、webservice、smtp、tcp、jdbc,添加对应的取样器等即可,如果没有,那么就需要我们自己开发,所以,java基础是必备的。

      dubbo,实例参考:https://www.cnblogs.com/UncleYong/p/10732754.html

      websocket,实例参考:https://www.cnblogs.com/UncleYong/p/10735967.html

      webservice,实例参考:https://www.cnblogs.com/UncleYong/p/10990172.html

      smtp,实例参考:https://www.cnblogs.com/UncleYong/p/10990159.html

      tcp,实例参考:https://www.cnblogs.com/UncleYong/p/10739526.html

      jdbc,实例参考:https://www.cnblogs.com/UncleYong/p/10990333.html

    【逻辑控制器】

    事务控制器

    事务控制器:要把多个请求作为一个事务时才用,建议将这四个请求放在一个事务控制器中,并且勾选‘Generate parent sample’

    ForEach控制器

    ForEach的应用:先请求A页面,通过正则表达式获取到多个值,然后循环这些值,依次作为B请求的入参

    classIds_matchNr=8,是jmeter正则个数的统计(${refName_matchNr}来引用函数总共发现的匹配组合数目),表示匹配到8个结果
    所以,可以通过Debug PostProcessor取样器看到jmeter提供给我们的变量

    输入变量classIds是一个数组
    从0到${classIds_matchNr},(0, ${classIds_matchNr}],左开右闭
    每次循环,获取到的值放到classId中

    请求名称也加上变量,方便查看

     

    仅一次控制器

    仅一次控制器,是控制线程内部的循环只执行一次:
    1个vuser,运行3次,查看结果树中1个结果
    3个vuser,运行1次,查看结果树中3个结果
    3个vuser,运行2次,查看结果树中3个结果

    应用场景:非分布式压测中,只执行一次的被关联请求,比如登录

    【前置处理器】

    发送请求前做的一些处理

    BeanShell PreProcessor

    实例参考:https://www.cnblogs.com/uncleyong/p/9429752.html,或者:https://www.cnblogs.com/uncleyong/p/7189778.html

    【后置处理器】

    发送请求后做的一些处理

    正则表达式提取器

    关联的方式很多,我喜欢用万能的正则,另外,大家可以看之前写的:jmeter关联的5种方式,或者:https://www.cnblogs.com/uncleyong/p/10779268.html

    Debug PostProcessor

    用于调试,除了可以看到jmeter变量,还可以看到配置信息,最好放在正则表达式提取器后面,否则看不到提取的结果;

    BeanShell PostProcessor

    实例参考:https://www.cnblogs.com/uncleyong/p/10939647.html

    【断言】:检查点

    响应断言

    断言内容可以多个

    断言持续时间

    响应时间大于设置的值,就报错 

    BeanShell断言

    实例参考:https://www.cnblogs.com/uncleyong/p/7189778.html

    【定时器】:思考时间、集合点

    固定定时器

    相当于lr的思考时间

    高斯随机定时器

    下图表示思考时间在200-400ms之间

    Synchronizing Timer:集合点

    集合策略,集合线程数小于等于线程组设置的线程数,还可以设置超时时间

    【配置元件】

    HTTP信息头管理器

    实例参考:https://www.cnblogs.com/uncleyong/p/11668665.html

    HTTP Cookie管理器

    域填写ip或者域名,路径根据实际情况填写,默认/

    实例参考:https://www.cnblogs.com/uncleyong/p/11668665.html

    CSV 数据文件设置

    实例参考:https://www.cnblogs.com/uncleyong/p/12154065.html,或者:https://www.cnblogs.com/uncleyong/p/10988524.html

    大量的变量值,我们一般用csv参数化

    文件名:通过浏览,选择参数化的文件,参数化文件可以是多种格式,我一般用txt
    文件编码:读取文件的编码,默认是US-ASCII,一般选择UTF-8
    变量名称(西文逗号间隔):参数文件中每列的名称,如有多列,用英文逗号间隔,如果只有一列,则不加分隔符
    忽略首行(只在设置了变量名称后才生效):如果参数文件中有很多列,为了区分每列,就在首行把列名写上,此时就要选True,
    比如:username,passwd,age,addr,phone
    jack,123456,18,beijing,119
    tom,123456,19,beijing,110
    分隔符(用' '代表制表符):是变量值的分隔符,比如上面,分隔符就是英文逗号。提醒:分隔符不能是参数化的值中的符号,否则会被截断,比如,你参数化整个json,逗号作为分隔符,而json中就有逗号,所以,发送请求的时候,会被截断。
    是否允许带引号?:如果是False,请求中保留引号;如果是True:请求中去掉引号
    遇到文件结束符再次循环?: True表示循环,False就取值EOF
    遇到文件结束符结束线程?:值不够,停止线程,一般保持默认False,如果设置为true,则下面的设置失效

    线程共享模式:

      所有现场:所有线程共享一个数据文件

      当前线程组:一个线程组一份数据文件,线程组内是所有线程共享一个数据文件

      当前线程:每个线程一份数据文件

      如果多个线程组,每个线程取值和测试计划中“独立运行每个线程组”是否勾选没有关系

    总结,和LR差异
    无随机、无每次出现、无once
    模拟随机:其实把文件中值打乱,也相当于随机

    HTTP请求默认值

    一般填入ip、端口,后续的http取样器不填写,就读取http请求默认值

    【监听器】:查看结果树、聚合报告

    查看结果树

    可以导入jtl文件查看结果

    勾选表示仅展示失败的请求

     可以选择结果展示方式为文本、html等

    可以查看请求的内容

    请求的响应结果

    聚合报告

    Label:每个JMeter的element的Name值。例如HTTP Request的Name
    #Samples:发出请求数量。如第三行记录,模拟20个用户,循环100次,所以显示了2000
    Average:平均响应时间(单位:ms)。默认是单个Request的平均响应时间,当使用了Transaction Controller时,也可以以Transaction为单位显示平均响应时间
    Median:中位数,也就是50%用户的响应时间
    90%Line:90%用户的响应时间【90%的用户响应时间不会超过这个值】
    95%Line:同理
    99%Line:同理
    Min:最小响应时间
    Max:最大响应时间
    Error%:本次测试中出现错误的请求的数量/请求的总数
    Throughput:吞吐量。默认情况下表示每秒完成的请求数(包含成功和失败的)
    KB/sec:每秒从服务器端接收到的数据量。

    作用域

    说起来既复杂又简单,为了大家不花过多时间在上面,我只说最简单的方式:

    全局的放线程组下,局部的,专属哪个取样器,就放哪个取样器下。

    jmeter执行顺序

    配置元件 → 前置处理器 → 定时器 → 取样器 → 后置处理器 → 断言 → 监听器;

    同一层级的,顺序执行;  

    函数助手

    常用的函数需要掌握,如随机函数等,举例:生成1-1000的随机数,可以通过${__Random(1,1000,key)}生成随机数,通过${key}可以获取这个随机数;

    总之,需要某个功能可以先在函数助手中找找,没有的话,再考虑beashell实现。

    官网:https://jmeter.apache.org/usermanual/functions.html

    函数列表:

     

    beanshell

    beanshell相关的,实例参考:玩转jmeter:beanshell必备技能

    日志相关

    日志级别默认INFO

    查看日志

    分布式压测

    分布式压测也是需要掌握的,实例参考:jmeter5.1分布式压测

    生成报告

    实例参考:https://www.cnblogs.com/uncleyong/p/9548723.html

    jmeter最佳实践


    最后,我们来看看官方的最佳实践,地址是:
    http://jmeter.apache.org/usermanual/best-practices.html

    上图大概意思是:https://mp.weixin.qq.com/s/0zL3HbmJ_YluNPdQ1QwRbA

    关于jmeter脚本

    脚本基本上不用录制方式,参考接口设计文档直接写,或者fiddler抓包写。

    要想了解录制,实例参考:https://www.cnblogs.com/uncleyong/p/10990053.html

  • 相关阅读:
    设计模式-转载
    Java-类和对象基础练习
    Java-单例模式(singleton)-转载
    java-面向对象练习2
    Java-面向对象基础练习
    Java-字符串练习
    Java-数组练习5
    Java-数组练习4
    JAVA-初步认识-常用对象API(String类-常见功能-获取-1)
    JAVA-初步认识-常用对象API(String类-构造函数)
  • 原文地址:https://www.cnblogs.com/uncleyong/p/12343285.html
Copyright © 2011-2022 走看看