美文网首页
jmeter简介及使用

jmeter简介及使用

作者: 开心的小哈 | 来源:发表于2022-04-22 20:47 被阅读0次
    image.png

    JMeter是Apache组织使用java开发的一款测试工具:Apache JMeter - Apache JMeter™

    1. 可以用于对服务器、网络或对象模拟巨大的负载
    2. 通过创建带有断言的脚本来验证程序是否返回期望的结果

    优点:

    1. 开源、免费
    2. 跨平台
    3. 支持多协议
    4. 小巧
    5. 功能强大

    缺点:

    1. 不支持IP欺骗
    2. 使用Jmeter无法验证JS程序,也无法验证页面UI,需要Selenium配合来完成Web2.0应用的测试

    JMeter 安装

    1. 访问Apache JMeter - Apache JMeter™
    2. 选择符合您系统的软件包进行下载
    3. 解压即可
      注意: Jmeter是使用Java编写的,必须安装java环境:JDK:java开发工具包,JREjava运行环境;如果是windows需要设置JAVA_HOME环境变量哦;

    设置中文编码级


    image.png

    启动:


    image.png

    进程: 正在运行的程序
    线程:是进程中的执行线索
    线程组:进程中有许多线程,为了方便管理,可以对线程按照性质分组,分组的结果就是线程组
    ps:三者关系,一个进程可以包含多个线程组,一个线程组可以包含多个线程;

    如果存在多个线程组默认的执行时并发,可以通过设置测试计划中的独立运行每个线程组-复选框即可(例如在一个组运行结束后启动下一个)

    setUP线程组:最优先执行的线程组
    tearDown线程组:最后执行的线程组

    HTTP默认请求值

    配置元件-用户定义的变量/用户参数 ,配置完成之后引用的命令为:${name}
    如果使用csv文件则需要注意文件的编码格式UTF-8,无BOM格式即可;
    csv中也可以配置遇到文件结束符停止线程,在线程里设置永远即刻达到数据驱动;
    参数化--函数(打开函数助手来找函数即可)
    counter计数器函数true,每个用户有自己独立的计数器,false则是全局的计数器;
    reandom随机数函数:一个范围内最小值,一个范围内最大值,区间是按照开区间进行的;
    time当前时间戳函数:不设置参数直接生成则展示是时间戳,1970000到现在的时间换算成毫秒,Format参数填写:yyyy-MM-dd hh:mm:ss格式化时间

    连接数据库

    通过直接连接数据库让程序代替接口访问数据库,如果二者预期结果不一致,就找到了程序缺陷。

    1. Jmeter 不具备直接链接数据库功能,必须整合第三方jar包实现
    2. 配置数据库的链接:在测试计划中添加目录或jar到ClassPath中选择数据库的驱动jar包(注意mysql,sqlite,sqlservice的jar包是不一样的百度下载即可);
    3. 添加数据库链接配置:测试计划右键添加配置元件,JDBC Connection Configuaration
      1. Variable Name for created pool: 数据库连接池的名字填入即可如:A

      2. Database URL:jdbc:mysql:///day17(数据库链接地址)(如果是远程服务器则写入IP地址即可) image.png
      3. JDBC Driver calss 数据库驱动选择对于数据库驱动即可;

      4. username:数据库账号

      5. password:数据库密码

    4. 添加取样器中的JDBC Request请求想数据库发送SQL语句并接受提取相应结果,在Variable name Eound 同pool中选择刚才配置的数据库名称即可引用使用如:A;
      1. Query Type:增删改使用Update Statement,查使用Select Statement即可,下方进行编写sql语句,
        2.其中Variable names设置完成后添加,取样器-调试取样器即可将该数据抽取出来,然后可以使用${name}进行访问即可
    5. 运行在查看结果树查看即可;

    断言

    断言:让程序代替人工判断相应结果是否符合预期
    分类:
    响应断言=断言状态码和响应体
    大小断言=判断相应内容的字节长度
    断言持续时间=判断相应时间
    步骤:

    1. 添加取样器
    2. 给取样器添加断言组件
    3. 也可以添加断言相应结果树,直接运行查看结果即可;如果断言失败则会给出错误信息;

    大小断言,判断得到的数据大小,大小如何查看?察看结果树的取样器结果中可以就可以查看到请求头,请求体,
    整体大小size in bytes
    headers size bytes
    body size bytes
    response code:200
    相应消息体:response message:ok
    断言持续时间
    毫秒 5,

    jmeter进阶

    一、逻辑控制器:如果if控制器,(如果想要生效需要把对于的http拖入到if控制器中
    下方有两个复选框都取消掉即可);
    配置元件用户自定义的变量,在if逻辑中写下方判断即可;
    "${val}"=="itcst"
    如果是true则执行如果是false不执行

    二、for Each控制器
    在定义的时候需要用一样存在规律的进行,如name_1 name_2
    在控制器中输入,变量前缀name
    开始循环字段(不包含)0
    结束循环字段(含)3
    下方复选框勾进行勾选;
    输出变量:val (在里面http调用时使用该变量)
    循环控制器,只要是逻辑控制器必须是父级;增加配置即可;

    三、xpath 提取器
    添加后置处理器Xpath提取器,Use Tidy 进行勾选,
    引用名称val
    xpath query //title
    匹配数字 1 获取匹配第一个;
    缺省值:如果没有找到则替换您这里输入的值;

    四、正则表达式提取器
    引用名称:val
    正则表达式:d,a其中?代表终止贪婪模式,不终止的话会将后面的内容全部给获取到的;
    模板:$1$,中间加逗号我就可以使用$2$
    匹配数字
    缺省值

    五、跨线程组关联:

    1. 函数助手找到_setProperty设置全局变量,属性名称out,value of property ${val}
    2. 创建BeanShell取样器:将刚才的代码写入到脚本中即可;
    3. 获取全局变量:函数助手找到_property 属性名称 out 将代码放在需要的地方即可;

    性能测试

    一、高并发
    添加同步定时器,100个线程,模拟用户组的数量:100,超时时间以毫秒为单位:10,如果不设置出现100人,用户组30当第4次调用时
    如果超时时间为0则会出现死等现象,所以传递一个10;
    异常:服务器运转情况
    吞吐量:每秒钟能够访问多少次服务;
    发送:每秒钟发送多少
    接受:每秒钟接受多少

    二、高频率
    QPS每秒钟查询数
    如一个用户每秒点击20次 的频率访问点击持续15秒,统计服务器的平均影响时间
    添加常量吞吐量定时器,目标吞吐量每分钟的样本量:1200.0(每分钟访问次数=访问频率*60)
    循环次数=访问频率*持续时间

    三、分布式
    多态机写作,以集群的方式完成测试任务,可以提高测试效率。

    1. 不同的测试机上安装jmeter
    2. 配置基础的环境统一操作系统,JDK、Jmeter
    3. 核心控制机如何与执行机通信?关键点 IP及端口号
    4. 控制机中设置执行机的IP
      %JMETER_HOME%/bin/jmeter.properties-->remote_hosts=执行机A的IP:端口号,执行机B的IP:端口号,....
    5. 控制机和执行机都要设置远程访问相关属性:server.rmi.sll.disable=true
    6. 启动:点击运行下拉框,选择 远程启动所有,执行机的jmeter要进行待定(点击jmeter.bar即可)

    练习1:模拟半小时之内1000个用户访问服务器资源,要求平均相应时间在3000ms内,却错误率为0;
    半小时=30分钟,
    答:用户组1000,ramp-UP时间(秒)1800(半小时):多少秒内执行打开10000个用户(弱压力测试场景)查看聚合报告是否满足要求平均相应时间在3000ms内,却错误率为0;

    练习2:模拟100个用户同时访问服务器资源,要求平均响应时间在3000ms内,且错误率为0;
    答:添加同步定时器设置100个用户访问即可;

    练习3:模拟2个用户以每秒20QPS的频率访问服务器资源持续10秒,要求平均响应时间在3000ms内,且错误率为0;
    答:线程组用户2个,http添加常数吞吐量定时器(每分钟,20X60得到每秒,每分钟走1200次每秒执行20次)1200.0,设置循环(一秒执行20测换算10那就是)200次

    生成测试图形化测试报告

    命令:jmeter -n -t 脚本文件 -l 日志文件 -e -o 目录
    -n 无图形化运行
    -t 被运行的脚本
    -l 将运行的测试信息写入日志文件
    -e 生成测试报告
    -o 指定报告输出的目录
    (./hm代表当前目录)
    不过注意的是java版本如果太高可能会报
    Error generating the report: org.apache.jmeter.report.dashboard.GenerationException: Error while processing samples: Consumer failed with message :Consumer failed with message :Consumer failed with message :Consumer failed with message :Begin size 0 is not equal to fixed size 5
    安装兼容的java版本即可,
    查看jdk安装版本,发现是17系列的。在网上查看教程发现需要更换成jdk8系列,具体安装步骤参照网上。
    猜测应该是jdk17的兼容性问题。

    也可以使用图形化的导出按钮进行:jmeter导出结果报告 - 简书 (jianshu.com)

    扩展资料阅读:测试高级进阶技能系列 - Jmeter - 随笔分类 - 小菠萝测试笔记 - 博客园 (cnblogs.com)

    相关文章

      网友评论

          本文标题:jmeter简介及使用

          本文链接:https://www.haomeiwen.com/subject/xzhrertx.html