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

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

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. 手机下载证书安装证书

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.hqwc.cn/news/107088.html

如若内容造成侵权/违法违规/事实不符,请联系编程知识网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

C++ 特性模版

目录 1. 非类型模板参数 2. 模板的特化 2.1 概念 2.2 函数模板特化 2.3 类模板特化 2.3.1 全特化 2.3.2 偏特化 2.3.3 类模板特化应用示例 3 模板分离编译 3.1 什么是分离编译 3.2 模板的分离编译 3.3 解决方法 4. 模板总结 1. 非类型模板参数 模板参数分类类型形…

数据库数据恢复-Oracle数据库truncate的数据恢复案例

Oracle数据库故障&分析: 北京某单位Oracle 11g R2数据库误执行truncate table CM_CHECK_ITEM_HIS,表数据丢失,查询该表时报错。数据库备份无法使用,表数据无法查询。 Oracle数据库Truncate数据的机理:执行Trunca…

如何初始化静态成员在类中

c - How do I initialize a const data member? - Stack Overflow

【GO语言基础】基本数据类型

系列文章目录 【Go语言学习】ide安装与配置 【GO语言基础】前言 【GO语言基础】变量常量 【GO语言基础】数据类型 文章目录 系列文章目录数据类型数值型:整数类型:浮点数类型: 字符型-布尔型-字符串零值转义字符 常用类型转换运算符总结 数据…

2023-9-11 台阶-Nim游戏

题目链接&#xff1a;台阶-Nim游戏 #include <iostream> #include <algorithm>using namespace std;int main() {int n;cin >> n;int res 0;for(int i 1;i < n; i){int x;cin >> x;if(i % 2) res ^ x; }if(res) cout << "Yes" &l…

Ask Milvus Anything!聊聊被社区反复@的那些事儿 Ⅰ

作为用户备受期待的重大版本&#xff0c;Milvus 2.3 不仅新上线了实用的新功能&#xff0c;还对已有功能的进行更新和优化。因此&#xff0c;新版本一经发布&#xff0c;便受到了社区用户的热切关注&#xff0c;期间我们也陆陆续续收到了不少用户的使用体验及问题反馈。 为了给…

多元共进|科技促进艺术发展,助力文化传承

科技发展助力文化和艺术的传播 融合传统与创新&#xff0c;碰撞独特魅力 一起来了解 2023 Google 开发者大会上 谷歌如何依托科技创新 推动艺术与文化连接 传承和弘扬传统文化 自 2011 年成立以来&#xff0c;谷歌艺术与文化致力于提供体验艺术和文化的新方式&#xff0c;…

HarmonyOS/OpenHarmony应用开发-DevEco Studio 中文插件的使用

DevEco Studio按照后&#xff0c;各项菜单栏默认是英文的&#xff0c;很多初学者&#xff0c;把菜单栏调整为中文的后&#xff0c;更容易上手与操作。具体步骤如下&#xff1a; 一、打开文件 二、选择设置 三、选择插件 四、选择中文 五、询问是否马上重启&#xff0c;本文选择…

2022年全国研究生数学建模竞赛华为杯E题草原放牧策略研究求解全过程文档及程序

2022年全国研究生数学建模竞赛华为杯 E题 草原放牧策略研究 原题再现&#xff1a; 一、背景介绍   草原作为世界上分布最广的重要的陆地植被类型之一&#xff0c;分布面积广泛。中国的草原面积为3.55亿公顷&#xff0c;是世界草原总面积的6%~8%&#xff0c;居世界第二。此外…

Python的get请求报错Error: Unexpected status code 400

一句话导读&#xff1a; 最近在做研发效能提升的事情&#xff0c;其中有一块就是要对项目管理相关数据做统计&#xff0c;我们使用的是ones做的项目管理&#xff0c;ones本身带的那些报表满足不了我们的需求&#xff0c;就想着看这些数据是不是能自己拿出来做统计&#xff0c;有…

Qt应用开发(基础篇)——菜单 QMenu

一、前言 QMenu类继承于QWidget&#xff0c;它提供了一个菜单样式的小部件&#xff0c;用于菜单栏、上下文菜单和一些弹出式菜单。 QMenu菜单的选项是可选的&#xff0c;它可以是一个下拉的菜单&#xff0c;也可以是独立的上下文菜单。下拉菜单通常作用于当用户单击相应的项目或…

2023面试题记录

1、js怎么判断对象为空&#xff1f; 判断对象是否为空的一个简单方法是检查对象的所有可枚举属性。如果一个对象没有可枚举属性&#xff0c;那么我们可以认为它是空的。你可以使用 Object.keys() 函数来获取对象的所有可枚举属性&#xff0c;然后检查得到的数组的长度。如果长…