• JMeter接口测试


    0.前言, 我决定我的代码必须要提升性能了,而不是写不写得出来的问题了,
    however,怎么知道我的代码是不是很烂和健壮性,需要专业的测试工具来测试出来,如高并发QPS是什么?,高频率是什么? 怎样自动化测试解放双手

    1.jmeter是apache使用java的测试工具,模拟巨大的负载,官网地址
    https://dlcdn.apache.org//jmeter/source/apache-jmeter-5.6.2_src.zip

    2.优缺点

    1.开源免费,跨平台(安卓 linux 苹果),支持多协议(http/s…) 非常小巧
    2.不支持ip欺骗(ip可以改变) 无法验证js ui页面 需配合selenium

    3.安装 先安装jdk,下载jmeter解压encoding设置为utf-8

    1. jmeter.bat, linux使用.sh文件启动
    2. 添加线程组 监听器–>结果树

    3.线程包含进程,线程组包含多个线程

    4.jmeter使用并发执行(多个线程同时执行) 顺序执行(多
    个线程顺序执行)
    //创建多个请求默认并发执行
    //点击测试计划,点击独立运行每个线程组,会顺序执行
    请添加图片描述

    5.setup线程组(最先)和teardown线程组(最后执行)

    1. 点击线程组,可写线程数和ramp-up time间隔时间(程序准备的时间) 循环次数
    2. //配置元件–>设置http默认值,就可以不用写重复的拉 /// —>信息头管理器 Content-Type application/json;charset=utf-8才可以发送json消息(消息体) !!!有层次

    6.参数化(数据量大需要修改后发送请求,需要自动生成数据测试)
    1.用户定义变量(简化访问路径为全局变量) 配置元件–>用户定义变量(测试后不可用)
    路径修改为 ${mypath}

    7.csv文件 逗号分隔的数据 保存txt文件utf-8格式
    id,name,age
    //去添加csv组件设置变量名称 id,name,age 最后两个选项改为false和true.线程组 循环次数为永远(保证循环csv全部数据)
    //线程组http请求json可以使用 i d , {id}, id,{name},${age}代替
    //细节
    //使用用户参数也可以但是用得不多
    请添加图片描述

    8.参数化函数 希望 发的请求有编号加上

    ${__counter(true)} //或者可以点击book生成(function) //可以生成random,

    HTTP Request${__time(,)} //掌握!!!timestamp时间函数 format yyyy-MM-dd hh:mm:ss

    set HTTP Request${__time(yyyy-MM-dd hh:mm:ss,)}

      //图测试1,2
    
    • 1

    请添加图片描述
    请添加图片描述

    9.添加jdbc驱动(可以test数据库)
    (test plan)sqlite-jdbc-3.21.0.jar添加到目录jar包
    //创建
    //component configuration 写上pool name
    jdbc:mysql://localhost:3306/jams?useUnicode=true&characterEncoding=utf8
    driver com.mysql.jdbc.Driver
    // component jdbcrequest 写上config name

    //jdbc request设置变量(取样器有出现的),给 添加调试取样器得到jdbc结果,
    图sampler4
    //创建http请求使用不了${param}
    请添加图片描述

    10.断言(assert)

    1.响应断言 state和resp body(使用 响应文本[全部文本中搜索,包含,相等]和代码[state])
    2.大小断言size(how many bytes?) 判断响应的大小(improve resp speed )
    3.duration time (assert time…) (improve resp speed )

    图测试断言3
    请添加图片描述

    11.逻辑判断

    1. if controller 定义user define var ,http请求为他的 son, interpret必须不打勾
      “${val}”==“baidu”
    2. foreach(name_1 name_2 name_3)(var)
      prefix: name
      begin : 0
      end: 3
      output: val
    3. 循环控制器 分别控制每个请求的循环次数(number) http的father
    4. (xpath distract)关联2个http请求
      use tidy
      Xpath query: //title //得到网页title标签的内容
      num: 1 //first title
      图xpath
      请添加图片描述
    1. 如果想要提取json数据内容(正则表达式提取器 json extractor)
      表达式: “dep_name”:“(.?)“, “dep_name”:”(.?)” //匹配任意内容,?代表贪婪模式,进行取后面的值 //invaild in regular extractor
      表达式: $…message
      模板: 1 1 1 //使用上面哪个表达式 invalid
      匹配设置: 1 //得到哪个得到的值

    12.跨线程组变量关联

    // 函数helper _setProperty,放到BeanShell(script)(thread’s son)
    //_property生成
    pic acrossThread.png /${__property(dest,)}
    请添加图片描述

    13.性能测试

    1. 高并发 同步定时器 listener->聚合报告组件(get 并发测试的结果) 不用 结果树
      100
      time: 10 //prevent卡死
    2. 高频率 QPS(query per seconds) 每秒访问多少次服务器
      20QPS 持续15s //相当于抢票一直点15秒,每秒点20下
      timer–>常量吞吐量定时器 设置,每分钟 1200( 60*20),线程组循环 loop count300次(represent how many times you want to test)

    14.分布式(执行测试task,一台机器性能不够)

    1. (测试机)不同机器安装jmeter
    2. (控制机)改配置文件 /bin/jmeter.properties
      remote_hosts=127.0.0.1,127.0.0.1
    3. 全部机器设置远程访问(配置文件)
      server.rmi.ssl.disable=True
    4. 控制机窗口 运行–>远程启动所有

    15.interface test procedure

    1. distribute tasks ,make a plan
    2. simplify document,get three info such as post/get method,param,addr
    3. design cases and test
    4. use automatic scripts and import data(JMeter create,don’t need to write)
    5. summarize results,submit BUG

    15.test case

    1. vaild,invaild boundary(you can just test around the valid such as phoneNum length of 11 is valid,but 1 is invaild)
    2. special situation (chinese,english,space,…other signs , . * )
    3. component situation(a table needs id, if you don’t give,may throw errors, others param is’t required)

    16.notice(最终真数据库没有测试数据)(不会影响老的接口)

    1. this may have problems when the request is green
    2. automatic (增删改查,don’t make the dirty data to real db/ or加上 _auto mark)(assert)
      独立运行线程组can make"up(增加) normal(改) tearDown(删除)" execuse in order,ban and test the procedure(链式操作)

    17.接口弱压力测试

    1. 弱压力(regular situation) 30分钟1000个用户访问 average resp time in 3000ms ,set 1000 thread and 30*60=1800 ramp-up time
    2. 高并发(many users visit interface and every one send resp in every second ) 100 thread ,ms time 10 ,100 user(timer)
      3.高频率(高并发的特殊情况,1s 2个QPS) 2个用户 20QPS执行10s

    18.生成 charts report(easy to understand)

    1. jmx文件move to bin dir
    2. jmeter -n -t xx.jmx -l hm.txt -e -o ./out
    3. open dir and html
      pic error.png
      请添加图片描述

    19.(补充)fiddler是代理抓包,可以移动端抓包(手机和电脑在同一个局域网)
    下载地址:https://www.telerik.com/download/fiddler

    1. 前言 我在google浏览器测试我的java程序,结果他不给我响应码,我就要专业的工具得到,并调试了
    2. 设置中connections全部勾上 端口8888
    3. 在wifi设置代理
    4. 手机下载证书安装证书
  • 相关阅读:
    网络学习总结
    《QT实用小工具·三十九》仿 Windows10 画图3D 的颜色选择器, 但更加强大
    漫谈信息模型(1)
    数学知识之约数
    Linux系统网卡配置详细教程!
    Linux查询mac物理地址
    发现它,抓住它
    选择工业交换机时,需要关注哪些方面的性能?
    python自动化之(django)(2)
    解释Android中的Activity生命周期,以及在哪个生命周期方法中可以进行布局的初始化?
  • 原文地址:https://blog.csdn.net/weixin_47039303/article/details/132814009