jmeter接口测试、压力测试简单实现

jmeter测试的组件执行顺序:

测试计划—>线程组—>配置元件—>前置处理器—>定时器—>逻辑控制器—>取样器—>后置处理器—>断言—>监听器

组件的作用范围:

  • 同级组件
  • 同级组件下的子组件
  • 父组件

目前市面上的三类接口

1、基于webservice协议接口,通过xml传输数据

2、基于dubbo协议接口,通过json传输数据

3、基于http协议接口,通过json传输数据

[ ]:数组,多个值

{ }:对象,键值对

接口项目实战:

端口号:http:80

             https:443

接口测试实战

  • 创建一个线程计划
  • 在线程计划中创建一个线程组
  • 在线程组中添加配置元件(HTTP信息头管理器、HTTP请求默认值、HTTP Cookie管理器、用户定义的变量)
  • 在线程组添加一个结果树来查看测试结果

        在HTTP请求默认值中配置测试接口的请求协议、ip、端口号。在这里统一配置后,在接口测试时就不用重复配置这些前缀,只需要把URL填上即可。

        在 HTTP信息头管理器,添加请求头信息     

        在线程组添加一个取样器—HTTP请求。这个组件就是填写要测试接口的信息。接口路径、参数、返回格式都在这里填写。

        比如,我要测试的一个接口为用户登录接口,填写好接口路径以及参数后,点击运行,即可在查看树查看结果。

          填写完接口信息后,点击运行按钮,然后在结果树查看测试结果。

 

现在正式开始一组接口测试:

要测试的接口流程:

验证码加载==>用户登录==>查看商品信息==>添加商品到购物车==>结算生成订单==>查看订单

用户登录接口:

方法:post

地址:/sysUser/listb

参数:

  • username: admin
  • password: admin
  • code: aaaaa
  • picture: aaaaa
  • 不需要鉴权

结果:

{"msg":"操作成功!","code":200,"data":{"jwt":"token值","username":"用户名"}}

查看信息接口:

方法:get

地址:/login

参数:无

结果:

{{"code":200,"msg":"操作成功!","data":[{数据}]}}

添加商品到购物车

方法:post

地址:/sysUser/insertcar

参数:

{
  "gname": "string",
  "num": 0,
  "price": 0,
  "seller": "string",
  "username": "string"
}

结果:

{{"code":200,"msg":"操作成功!","data":[{数据}]}}

结算生成订单

方法:post

地址:/sysUser/insertcar

参数:

{
    "oid": "string",
    "address": "string",
    "buyer": "string",
    "gname": "string",
    "num": 0,
    "seller": "string",
    "created": "2023-07-26T09:11:10.237Z",
  }

结果:

{{"code":200,"msg":"操作成功!","data":[{数据}]}}

查看订单

方法:get

地址:/sysUser/insertcar

参数:

  • name(当前的用户名)

结果:

{{"code":200,"msg":"操作成功!","data":[{数据}]}}

测试登录接口

现在开始测试用户登录接口

添加一个http请求

填入传输类型post,填入url,填入参数

然后,运行,查看结果树

 测试查看商品的接口    

        测试查看商品的接口,除了登录接口的其他接口都需要登录时生成的token,也就是上图的jwt值,没有这个值,是无权进行查看接口这个操作。登录接口与查看商品接口有关联的,我们需要获取到这个token值,添加到后续接口的请求头。 

接口关联:有两种方法

正则表达式提取器

1、变量名:可以随意定义

2、正则表达式:要包括左边界、右边界以及(.*?),

3、$1$表示取第一个正则。$2$表示取第二个正则

4、匹配数字,1表示取第一个匹配到的值

5、默认值,没有匹配到使用默认值。

然后在HTTP信息头管理器添加token信息

JSON提取器

例子

{"jwt":"eyJ0eXAiOiJKV1QiLCJhbGciOiJIUzUxMiJ9.eyJzdWIiOiJhZG1pbiIsImlhdCI6MTY5MDM1OTczNiwiZXhwIjoxNjkwOTY0NTM2fQ.1HPGr2RLQpW8SzcRfHzWhMmJ9zMOVQXqe8g69tkOPF-QbdEPj7N0ASXW86lL0KxQ_rGcNdZ-WYmV9cbUpj8dCw","username":"admin"}

语法规则:只适用于json数据

  • $代表根目录
  • .代表子节点

$.jwt=>eyJ0eXAiOiJKV1QiLCJhbGciOiJIUzUxMiJ9.eyJzdWIiOiJhZG1pbiIsImlhdCI6MTY5MDM1OTczNiwiZXhwIjoxNjkwOTY0NTM2fQ.1HPGr2RLQpW8SzcRfHzWhMmJ9zMOVQXqe8g69tkOPF-QbdEPj7N0ASXW86lL0KxQ_rGcNdZ-WYmV9cbUpj8dCw

  • $.username=>admin
  • $.* 取所有的值即jwt和username的值

如果没有通过鉴权测试,是无法访问其他接口的

 在登录接口添加一个正则表达式管理器来获取token值

 在线程组添加一个HTTP请求(查看商品接口),在接口下添加HTTP信息头管理器,并在信息头管理器里面填写token配置

  

然后在查看商品接口填写传输方式:get,参数:无;

运行测试,可以看到成功获得商品列表

 测试添加商品到购物车

在线程组添加一个HTTP请求(添加商品接口),在接口下添加HTTP信息头管理器,并在信息头管理器里面填写token配置。

在添加商品接口内填写:

传输方式:post

参数:

{ "gname": "苹果手机", "num": 1, "price":4000.00, "seller": "root", "username": "${username}" }

username为当前登录的用户名,所以我们可以通过json提取器来获得登录时的用户名,并在此引用。

然后启动测试,查看结果数

 测试结算生成订单接口

 在线程组添加一个HTTP请求(生成订单接口),在接口下添加HTTP信息头管理器,并在信息头管理器里面填写token配置

在添加商品接口内填写:

传输方式:post

参数:

[
    {"gname": "苹果手机",
    "num": 1,
    "buyer": "${username}",
    "seller": "root",
    "address": "广东省xx市xx区",
    "created": "2023-06-27T03:19:43.460Z"
    }
    ]

运行测试,得到结果

 测试查看订单接口

 在线程组添加一个HTTP请求(查看订单接口),在接口下添加HTTP信息头管理器,并在信息头管理器里面填写token配置

传输方式:post

参数:

String username

 

运行,查看结果树

 以上就是jmeter测试接口的基本流程,但是以上例子都是正例。我们可以csv参数化来设置正例、反例来测试接口。以登录接口为例。

csv参数化

  • 创建一个csv文件
  • 打开文件
  • 输入数据

第1行为属性名

username为登录接口的账号,password为密码,code和picture为验证码,duanyan为断言

第1行下面的则为属性值

第2行:账号密码、验证码都正确

第3行:账号为空,密码、验证码正确

第4行:账号、验证码正确、密码为空

第5行 :账号、密码正确、验证码错误

然后再登录接口下面添加一个csv数据文件设置,并配置

 然后修改接口的参数

在线程组添加一个循环控制器 ,因为这里有4个用例,所以循环次数为4

 把验证码接口和登录接口放到循环控制器中,运行测试,查看结果树,可以得到4组测试结果

 

 

 

压力测试 

添加一个线程组,设置线程数为10,线程多少内启动完成,循环次数为1.

然后添加查看结果的页面:(聚合报告)、表格统计结果界面(根据需要,可选)、添加图形结果页面(根据需要,可选)。

然后添加要压力测试的接口,运行测试。

我要测试登录接口以及获取商品库存的接口,添加两个http请求,填好数据(如接口测试那样操作)。运行测试,查看结果:

聚合报告 

 表格统计

 

性能测试主要关注如下三个指标

  • 吞吐量:每秒钟系统能够处理的请求数、任务数,该值越大越好
  • 响应时间:服务处理一个请求或一个任务的耗时
  • 错误率:一批请求中结果出错的请求所占比例

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

如若内容造成侵权/违法违规/事实不符,请联系我们进行投诉反馈qq邮箱809451989@qq.com,一经查实,立即删除!

相关文章

PyCharm安装pip依赖,如何添加国内镜像源?

目录 前言 PyCharm如何安装依赖 PyCharm如何配置国内镜像源 前言 首先我们都知道,使用pip安装依赖的方式,却很少有人知道使用PyCharm如何安装依赖。 PyCharm如何安装依赖 但你会发现,基本都是安装失败的,因为你是去外网下载的…

[JAVAee]文件操作-IO

本文章讲述了通过java对文件进行IO操作 IO:input/output,输入/输出. 建议配合文章末尾实例食用 目录 文件 文件的管理 文件的路径 文件的分类 文件系统的操作 File类的构造方法 File的常用方法 文件内容的读写 FileInputStream读取文件 构造方法 常用方法 Scan…

探索容器镜像安全管理之道

邓宇星,Rancher 中国软件架构师,7 年云原生领域经验,参与 Rancher 1.x 到 Rancher 2.x 版本迭代变化,目前负责 Rancher for openEuler(RFO)项目开发。 最近 Rancher v2.7.4 发布了,作为一个安全更新版本,也…

【bar堆叠图形绘制】

绘制条形图示例 在数据可视化中,条形图是一种常用的图表类型,用于比较不同类别的数据值。Python的matplotlib库为我们提供了方便易用的功能来绘制条形图。 1. 基本条形图 首先,我们展示如何绘制基本的条形图。假设我们有一个包含十个类别的…

ElasticSearch 7.x

前言 elastic表示可伸缩,search表示查询。所以es的核心即为查询。通常情况下,我们的数据可以分为三类:结构化数据、非结构化数据、半结构化数据。 结构化数据:一般会用特定的结构来组织和管理数据,表现为二维表结构。…

【Android常见问题(五)】- Flutter项目性能优化

文章目录 知识回顾前言源码分析1. 渲染过程2. 分析工具3. 优化方法合理使用const关键词合理使用组件管理着色器编译垃圾 知识回顾 前言 项目迭代开发一定程度后,性能优化是重中之重,其中包括了包体积,UI 渲染、交互等多个方面。 通过 Flutt…

码农该如何延长周末体验感

码农该如何延长周末体验感 码农该如何延长周末体验感 码农该如何延长周末体验感1.制定合理的工作计划:2.实践工作与生活的平衡:3.学习新技术或扩展知识领域4.参与开源项目或个人项目:5.与同事或朋友组织活动:6.自己写博客或者总结…

百万数据快速导入导出

百万数据快速导入 pom <dependency><groupId>com.alibaba</groupId><artifactId>easyexcel</artifactId><version>3.2.0</version></dependency>Resourceprivate SalariesListener salariesListener;private ExecutorService…

求解方程x^2=a的根,不使用库函数直接求解(不动点迭代法)

首先可以将方程两边同时加上x&#xff0c;&#xff0c;这时候两边同时再除以1x&#xff0c;就得到了&#xff0c;变形为。&#xff08;变性后的迭代式不唯一&#xff0c;这里随便选取一个&#xff09; 当x是准确值的时候&#xff0c;两边应该是相等的&#xff0c;如果x是近似值…

【Git】分支管理之创建、切换、合并、删除分支以及冲突处理

目录 一、理解分支 二、创建、切换、合并分支 三、删除分支 四、冲突处理 五、合并模式 六、合并策略 七、Bug分支处理 八、强制删除分支 一、理解分支 master其实就是一个指针 &#xff0c;他指向的是主分支最近一次commit。我们可以创建新的分支&#xff0c;在新的分…

Arcgis之 KML/KMZ文件转shp

一般我们在Goole Earth上勾画的区域导出后都为KML或者KMZ格式的&#xff0c;但无法在arcgis等软件上直接应用&#xff0c;故需进行一定的转换 1.打开ArcMap&#xff0c;选择ArcToolbox->Conversion Tools->From KML->KML To Layer 得到如下结果&#xff08;由于本KML…

请问学JavaScript 前要学html 和css 吗?

前言 html和css可以理解为是一个网站的骨架和皮肤&#xff0c;这两部分做好后整个网站的外观展示的完成度基本就有了个90%左右&#xff0c;所以在学习js前是需要学习html和css 的&#xff0c;这两部分不用花特别多的时间&#xff08;虽然css如果想做一些非常炫酷的效果个人认为…

什么是SVM算法?硬间隔和软间隔的分类问题

SVM全称是supported vector machine(支持向量机)&#xff0c;即寻找到一个超平面使样本分成两类&#xff0c;并且间隔最大。 SVM能够执行线性或⾮线性分类、回归&#xff0c;甚至是异常值检测任务。它是机器学习领域最受欢迎的模型之一。SVM特别适用于中小型复杂数据集的分类。…

MobaXterm通过SSH访问Ubuntu服务器遇到的一个问题

在Windows下的MobaXterm界面配置完ubuntuIP以后显示access denied&#xff0c;排查发现是因为在ubuntu那边忘记安装了SSH Serve&#xff0c;安装过程如下&#xff1a; 第一步&#xff1a;安装所需包 让我们从打开终端输入一些必要命令开始。 注意&#xff0c;在安装新的包或…

SpringBoot统一异常处理和统一返回格式

上篇博客我们讲解了使用AOP来进行统一的用户登录判断&#xff0c;其实像这种功能统一且使用较多的地方&#xff0c;都可以用AOP来处理&#xff0c;除了统⼀的⽤户登录判断之外&#xff0c;AOP 还可以实现&#xff1a; 统⼀⽇志记录统⼀⽅法执⾏时间统计&#xff08;在性能优化…

机器学习:混合高斯聚类GMM(求聚类标签)+PCA降维(3维降2维)习题

使用混合高斯模型 GMM&#xff0c;计算如下数据点的聚类过程&#xff1a; Datanp.array([1,2,6,7]) 均值初值为: μ1,μ21,5 权重初值为: w1,w20.5,0.5 方差: std1,std21,1 K2 10 次迭代后数据的聚类标签是多少&#xff1f; 采用python代码实现&#xff1a; from scipy import…

人工智能-Dlib+Python实现人脸识别(人脸识别篇)

人脸识别流程 人脸检测,人脸数据提取:首先是检测到人脸保存人脸数据:可以保存到mysql数据库中mysql数据库连接mysql数据库安装mysql数据库操作设置人脸数据标签:(人脸名字),保存到数据库打开摄像头,检测到人脸,提取人脸数据:人脸数据与数据库中的数据对比,1、人脸检…

【图论】Prim算法

一.介绍 Prim算法是一种用于解决最小生成树问题的贪心算法。最小生成树问题是指在一个连通无向图中找到一个生成树&#xff0c;使得树中所有边的权重之和最小。 Prim算法的基本思想是从一个起始顶点开始&#xff0c;逐步扩展生成树&#xff0c;直到覆盖所有顶点。具体步骤如下…

用合成数据训练托盘检测模型【机器学习】

想象一下&#xff0c;你是一名机器人或机器学习 (ML) 工程师&#xff0c;负责开发一个模型来检测托盘&#xff0c;以便叉车可以操纵它们。 ‌你熟悉传统的深度学习流程&#xff0c;已经整理了手动标注的数据集&#xff0c;并且已经训练了成功的模型。 推荐&#xff1a;用 NSDT设…

【业务功能篇60】Springboot + Spring Security 权限管理 【终篇】

4.4.7 权限校验扩展 4.4.7.1 PreAuthorize注解中的其他方法 hasAuthority&#xff1a;检查调用者是否具有指定的权限&#xff1b; RequestMapping("/hello")PreAuthorize("hasAuthority(system:user:list)")public String hello(){return "hello Sp…