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使用并发执行(多个线程同时执行) 顺序执行(多
个线程顺序执行)
//创建多个请求默认并发执行
//点击测试计划,点击独立运行每个线程组,会顺序执行
JMeter接口测试_第1张图片

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}代替
//细节
//使用用户参数也可以但是用得不多
JMeter接口测试_第2张图片

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

JMeter接口测试_第3张图片
JMeter接口测试_第4张图片

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}
JMeter接口测试_第5张图片

10.断言(assert)

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

图测试断言3
JMeter接口测试_第6张图片

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
    JMeter接口测试_第7张图片
  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,)}
JMeter接口测试_第8张图片

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
    JMeter接口测试_第9张图片

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

  1. 前言 我在google浏览器测试我的java程序,结果他不给我响应码,我就要专业的工具得到,并调试了
  2. 设置中connections全部勾上 端口8888
  3. 在wifi设置代理
  4. 手机下载证书安装证书

你可能感兴趣的:(JMeter,jmeter)